简介
该项目主要分为三个部分,web端负责对etcd的写入以及从mysql读写数据进行展示。logAgent负责日志的收集,主要是通过tail从etcd中实时获取所要收集的日志项,然后通过sarama从相应的日志文件读取日志信息发送到Kafka。logTransfer负责从Kafka中读取日志,并将日志写入elasticsearch最后通过Kibana进行日志的检索。
logBeegoWeb
前端使用Beego框架完成。在运行项目之前,首先安装bee脚手架。
1 | go get github.com/beego/bee |
执行bee
命令查看是否安装成功。
1 | caoyifan@MacBookPro ~ % bee |
进入logBeegoWeb文件夹,bee run
启动项目
1 | caoyifan@MacBookPro logBeegoWeb % bee run |
查看本地8080
端口,项目启动成功
数据库
创建数据库的sql源码如下,创建名为logCollect
的数据库,并创建三张表。
1 | create database logCollect; |
数据库创建成功
1 | show tables; |
在前端主页面,项目列表对应tbl_app_info
这张表,日志列表对应tbl_log_info
这张表。tbl_app_ip
这张表用来保存项目所在的ip
地址。
etcd
当我们申请好项目之后,就可以针对该项目所产生的日志进行收集。对于所要收集的日志配置信息,可以采用etcd进行存储。
例如我们可以在日志申请页写入所要收集的项目信息,前提是项目的名字必须在项目列表中是存在的,否则日志申请就会失败。
etcd中获取key的值
1 | caoyifan@MacBookPro ~ % etcdctl get /backend/logagent/config/10.100.163.201 |
logAgent
logAgent项目树结构如下
1 | logAgent |
其中每个文件的具体作用如下
1 | logagent.conf :配置文件 |
进入main文件夹中,执行go build
命令,之后执行./main
启动项目,项目启动日志输出如下
1 | 2021/11/12 15:32:11.007 [D] get config from etcd success, [{/Users/caoyifan/test.log kafka_test}] |
可以看到,项目启动之后首先会从etcd中去获取前端写入etcd中的日志收集配置信息,之后etcd会持续监控key的变化,一旦有新的日志配置加入etcd中,就会更新配置文件,随后启动kafka准备从日志文件中读取日志信息。
测试日志文件读取
在/Users/caoyifan
目录下创建test.log
文件并尝试写入一些信息。
发现kafka能够成功读取写入的文件信息
1 | 2021/11/12 15:46:50.530 [D] 导入日志成功&{debug /Users/caoyifan/go/src/Golang_logCollect/logAgent/logs/my.log 100 0.0.0.0:9092 [] 0.0.0.0:2379 /backend/logagent/config/} |
logTransfer
确保已经启动了kafka
和ElasticSearch
和kibana
进入main文件夹下,执行go build
,输出日志如下
1 | caoyifan@MacBookPro main % ./main |
这个时候我们查看一下etcd中的日志配置信息
1 | caoyifan@MacBookPro ~ % etcdctl get /backend/logagent/config/10.100.163.201 |
接着我们尝试向kafka.log
中写入一些测试信息
这个时候我们查看logAgent
中的日志,发现消息已经成功写入了kafka中
再查看logTransfer
中的日志,发现已经成功收集到日志信息
Kibana可视化
这个时候我们已经成功收集到了kafka中的消息,并且已经将消息写入到了ElasticSearch中,接下来我们配置一下Kibana查看收集到的相关信息。
首先我们在Kibana中创建索引,索引名就是我们在etcd中获取到的topic名称。
通过postman,我们看到当前ElasticSearch中一共有三个索引,其中有一个就是我们创建好的kafka_log
索引
最后我们在Kibana的Discover模块下,选择相应的索引,就可以看到索引下的相关数据。