高性能Go语言日志收集库,支持实时监控、断点续传和灵活配置
🚀 项目地址: filewatch
欢迎star支持!
核心特性
• 智能文件监控 - 自动读取目录下所有文件(包括新增文件)
• 灵活过滤规则 - 支持正则表达式匹配文件名
• 断点续传 - 基于offset机制,重启后从上次位置继续读取
• 高性能设计 - 轻量级实现,资源占用低
快速开始
package main
import (
"fmt"
"github.com/ChangSZ/filewatch"
)
func main() {
watcher := filewatch.NewWatcher()
watcher.SetCompleteMarker("***") // 设置完成标记
watcher.SetFileRegexp(`\d+.log`) // 匹配数字.log文件
watcher.SetWatchDir("./logs") // 监控目录
watcher.SetRemoveAfterComplete(true) // 完成后删除文件
// 异步处理日志
go func() {
for logInfo := range watcher.GetResChan() {
fmt.Printf("%+v\n", logInfo)
// 这里可以对接 Kafka、ES、gRPC 等
}
}()
watcher.Start()
}集成方案
通过 watcher.GetResChan() 获取日志流,可轻松对接:
- 消息队列:Kafka、RabbitMQ
- 搜索引擎:Elasticsearch、OpenSearch
- 远程服务:gRPC、HTTP API
- 存储系统:数据库、对象存储
性能表现
测试环境:4核8G Kubernetes Pod
负载情况:50个文件 × 1600行/秒 = 80,000行/秒
资源占用:CPU ~35%,内存 ~10%(实际使用量,扣除其他业务)
处理效果:实时无延迟处理
适合中小规模日志收集场景,性能表现优异。