实现日志收集服务的客户端
前言
从这篇文章开始我们就正式进入了日志收集系统的编写,后面几篇文章我们将学习到如何编写日志收集服务的客户端,话不多说,让我们进入今天的内容吧!
需要实现的功能
我们要收集指定目录下的日志文件,将它们发送到Kafka中
实现的步骤
- 读取配置文件,寻找日志路径
- 初始化服务
- 根据日志路径去利用tail来收集日志
- 将收集到的日志利用sarama发送到Kafka中
读取配置文件
go-ini包
go-ini
包的安装
包的地址为"github.com/go-ini/ini"
,安装可以基于go mod来使用go mod tidy
或者go get github.com/go-ini/ini
来进行安装- 包的使用
由于篇幅有限,这里对于包的实现不做过多赘述,可以参考矿方文档,文档里面作者将该包的使用方法讲解的非常好,博主这里就不班门弄斧了,官方文档的地址如
下:
超赞的 Go 语言 INI 文件操作 - 代码示例:
首先我们定义一个config.ini
的配置文件,如下:
[kafka] address=127.0.0.1:9092
然后我们尝试提取出Kafka的address:
package main import ( "fmt" "github.com/go-ini/ini" "github.com/sirupsen/logrus" ) func main() { cfg, err := ini.Load("G:\\goproject\\-goroutine-\\log-agent\\conf\\config.ini")//读取配置文件 if err != nil { logrus.Error("load config.ini error!,err:", err) //日志中打印错误信息 } fmt.Println(cfg.Section("kafka").Key("address").String()) }
输出结果为:
当然我们还可以将配置文件的配置有谁到结构体中,首先还是我们的配置文件:
[kafka] address=127.0.0.1:9092 [collect] logfile_path:G:\goproject\-goroutine-\log-agent\log\log1
示例代码:
package main import ( "fmt" "github.com/go-ini/ini" ) type Config struct { Kafakaddress Kafkaddress `ini:"kafka"` LogFilePath LogFilePath `ini:"collect"` } type Kafkaddress struct { Addr string `ini:"address""` } type LogFilePath struct { Path string `ini:"logfile_path"` } func main() { var configObj = new(Config) //生成指针便于参数传递 err := ini.MapTo(configObj, "G:\\goproject\\-goroutine-\\log-agent\\conf\\config.ini") if err != nil { fmt.Println("log config failed,err:", err) } fmt.Println(configObj.LogFilePath, configObj.Kafakaddress) }
输出结果为:
结语
对读取配置文件就讲到这里了。下一篇文章我们就开始探寻如何初始化Kafka和tail的服务,以及介绍什么是etcd,以及它在项目中所起到的作用,下篇见!