为了给Haproxy做异步的监控统计,打算将Haproxy的log输出到kafka,由后面的监控应用(Spark)处理后再进行存储展现(Influxdb+Grafana),而rsyslog可以支持不同input、output类型的适配,在v8.7.0及以上的版本中,也支持omkafka模块了,因此可以选择用来将HA的log给到Kafka。
在此记录一下这部分的配置过程和填过的坑。
1、升级rsyslog
原机器上已经安装了v5的版本,但是需要升级到v8.7.0才可以支持kafka,因此需要升级rsyslog,安装相关依赖包。
另外都是内网机器,因此采用下载rpm包离线安装的方式;注意对应的操作系统(centos6对应el6)和包的位数(64位对应x86_64)
- rpm -ivh libfastjson-0.99.2-1.el6.x86_64.rpm
- rpm -ivh libfastjson4-0.99.8-1.el6.x86_64.rpm
- rpm -ivh libestr-0.1.11-1.el6.x86_64.rpm
- rpm -ivh lz4-1.7.5-1.el6.x86_64.rpm
- rpm -Uvh rsyslog-8.1907.0-1.el6.x86_64.rpm #这边使用 -U 参数是为了直接升级本地rsyslog
- rpm -ivh rsyslog-kafka-8.1907.0-1.el6.x86_64.rpm #rsyslog-kafka组件安装依赖 rsyslog-8.1907,该命令最后执行,可能还依赖librdkafka
安装完后执行 rsyslogd -v,显示版本是8.1907.0,则验证rsyslog是否升级成功
查看/lib64/rsyslog/中是否存在 omkafka.so,验证rsyslog-kafka是否安装成功。
2、配置rsyslog
这里主要配置通过udp的方式获取ha的log输入,然后通过omkafka输出到kafka;
首先把新生成rsyslog.conf配置文件更名替换旧的,然后把吐kafka相关配置写到rsyslog.conf或者在rsyslog.d下独立的conf文件都可以。
module(load="omkafka")
module(load="imudp")
input(type="imudp" port="514" ruleset="tokafka")
ruleset(name="tokafka") {
#输出到kafka
action(type="omkafka" topic="ha2kafka" broker="ip:9092")
#输出到文件
action(type="omfile" file="/var/log/haproxy.log")
}
配置好之后,/etc/init.d/rsyslog restart进行重启使配置生效,此时rsyslog与broker所示的ip:port已经建立连接了。
3、修改hosts
这里是遇到的一个坑,不知为何,broker配置的是ip,但吐消息的时候却FAILED了,并报一个域名访问不到的错误;经排查,该域名正是broker所配置kafka ip对应的机器名。
因此在rsyslog服务器上修改/etc/hosts文件,添加一条kafka ip对应的机器名,之后就好使了。