上一版的改进
问题
因为log agent可以部署在多台机器上,每一台机器上需要收集的日志可能不尽相同,所以需要针对不同机器部署不同的配置文件。
改进
因为不同的机器上拥有不同的配置文件,所以etcd中每一台机器对应的配置文件的key应该是唯一可标识的,这样可以区分不同的机器。在key中加入IP地址以区别不同的key,故config.ini
做出以下更改:
1 | # 原来是collect_conf_key = collect_conf |
相对应的增加一个获取IP地址的函数,用于获取IP地址:
1 | // GetOutboundIP 获取本机的IP地址 |
在main
主函数中,首先获取本机的IP地址:
1 | // 获取本机ip |
根据配置文件中的collect_conf_key = collect_%s_conf
项格式化字符串,替换配置文件结构体中的相应字段:
1 | // 用ip替换collect_conf_key中的%s |
收集系统信息
目前,已经完成了日志收集log agent的构建。
现在来构建用于收集系统日志的sys info agent,需要收集的系统信息包括CPU、主存、磁盘、网络信息,将收集到的系统信息发送给Kafka。基本思路与log agent相同:
- 首先根据配置文件获取Kafka的相关配置信息
- 根据配置信息初始化Kafka
- 连接Kafka
- 初始化消息管道,这个消息管道用于接收收集到的系统信息
- 开启协程,从消息管道中取出消息,发送到Kafka
- 初始化系统信息收集系统,开启线程用于采集数据,每隔1秒收集一次