一下是我在单位对haproxy进行日志分析的一整套流程html
咱们一直都是处在维护es集群的配置,并无把一整套流程 包括收集端的代码,所有本身搞定一次,并且线上收集日志的时候咱们通常都用的logstash,可是业界不少人都说logstash无论是性能上还有稳定性上都不是很好,logstash的优势在于配置简便,此次我选用了rsyslogpython
今天就这haproxy日志,我把整个流程给你们走一遍,就算是让你们了解下git
具体流程以下github
haproxy----local2级别----rsyslog----kafka---collector(消费kafka,写到es)---es---kibana展现json
1.haproxy的日志默认须要结合rsyslogapi
配置文件这样的restful
local2.* /data1/logs/haproxy/haproxy.logapp
若是咱们不用rsyslog,用logstash就会存在这样的状况ide
咱们仍是要在input里写/data1/logs/haproxy/haproxy.log这个路径,这样我认为在性能上有很大的影响性能
可是咱们用了rsyslog,rsyslog能够直接从local2级别里直接拆分日志,这块我只是举个例子,rsyslog和logstash的不一样在于,rsyslog须要插件,并且rsyslog连接kafka的时候须要v8版本,并且不能yum安装rsyslog,须要编译的时间加载针对kafka的模块
前期准备,咱们须要首先让rsyslog可以把数据发送到kafka里
如何让rsyslog支持推送到kafka,步骤以下
/opt/test.sh
## Install rsyslog with omkafka.
## omkafka enables rsyslog to push logs to kafka, a distributed message system.
## see http://www.rsyslog.com/doc/master/configuration/modules/omkafka.html
## This installation use yum to manage packages.
## add rsyslog repo
WORK_DIR=$(pwd)
cd /etc/yum.repos.d
wget http://rpms.adiscon.com/v8-stable/rsyslog.repo -O rsyslog.repo
cd $WORK_DIR
mkdir rsyslog-install
cd rsyslog-install
# check rsyslog version
# rsyslog supports kafka from v8.7.0
old_rsyslog_ver=$(rsyslogd -version |head -n 1 | awk '{print $2}')
## install rsyslog dependency: libestr
yum install -y libestr-devel
## install rsyslog dependency: libee
yum install -y libee-devel
## install rsyslog dependency: json-c
yum install -y json-c-devel
## install rsyslog denpendency: uuid
yum install -y libuuid-devel
## install rsyslog denpendency: liblogging-stdlog
yum install -y liblogging-devel
## install rsyslog denpendency: rst2man
yum install -y python-docutils
## install librdkafka for omkafka
wget https://github.com/edenhill/librdkafka/archive/0.8.5.tar.gz -O librdkafka-0.8.5.tar.gz
tar zxvf librdkafka-0.8.5.tar.gz
cd librdkafka-0.8.5
./configure
make
make install
cd ..
## install rsyslog
wget http://www.rsyslog.com/files/download/rsyslog/rsyslog-8.8.0.tar.gz -O rsyslog-8.8.0.tar.gz
tar zxvf rsyslog-8.8.0.tar.gz
export PKG_CONFIG_PATH=/usr/lib64/pkgconfig:/lib64/pkgconfig/
old_executable_path=$(which rsyslogd)
executable_dir=$(dirname "$old_executable_path")
cd rsyslog-8.8.0
./configure --prefix=/usr/local/rsyslog --sbindir=$executable_dir --libdir=/usr/lib64 --enable-omkafka
make
make install
## show installation result:
new_rsyslog_ver=$(rsyslogd -version |head -n 1 | awk '{print $2}')
echo "Old rsyslogd version: "$old_rsyslog_ver
echo "New rsyslogd version: "$new_rsyslog_ver
echo "Executable: " $(which rsyslogd)
## References:
## http://www.rsyslog.com/doc/master/installation/install_from_source.html
## http://bigbo.github.io/pages/2015/01/21/syslog_kafka/
## http://blog.oldzee.com/?tag=rsyslog
## http://www.rsyslog.com/newbie-guide-to-rsyslog/
## http://www.rsyslog.com/doc/master/configuration/modules/omkafka.html
2.cp ./rsyslog-install/librdkafka-0.8.5/src/librdkafka.so.1 /lib64/
chmod 755 /lib64/librdkafka.so.1
3.cp ./rsyslog-8.8.0/plugins/omkafka/.libs/omkafka.so /lib64/rsyslog/
chmod 755 /lib64/rsyslog/omkafka.so
4.rsyslogd -n 测试rsyslog配置文件是否正确
5. /lib64/rsyslog/下面都是rsyslog所能加载的模块
ok如今咱们可让rsyslog推送到kafka了
咱们如今要提早定义好数据推送到es 索引里的字段都有那些,咱们根据这些字段对日志进行处理
rsyslog针对haproxy的日志处理,固然我下面贴出的处理方法不是最好的,rsyslog还支持logstash的filter的grok中的pattern,rsyslog有本身相似的插件,用mmnormalize插件更高效
咱们如今已经对日志进行了咱们所须要到es里的正确拆分
下面咱们就要往kafka里对数据了
local2.* action(type="omkafka" broker="[172.16.10.130:9092,172.16.10.131:9092,172.16.10.132:9092,172.16.10.139:9092,172.16.10.140:9092]" topic="EAGLEYE_LOG_HAPROXY_CHANNEL" partitions.number="15" confParam=["compression.codec=snappy","s
ocket.keepalive.enable=true"] queue.saveonshutdown="on" queue.size="10000000" queue.type="LinkedList" queue.highwatermark="600000" queue.lowwatermark="20000" queue.discardmark="800000" queue.maxfilesize="1g" queue.maxdiskspace="10g" acti
on.ResumeInterval="10" action.ResumeRetryCount="-1" action.reportSuspension="on" action.reportSuspensionContinuation="on" template="json_lines")
具体这些参数你们能够去官网查看
下面咱们去看kafka的topic EAGLEYE_LOG_HAPROXY_CHANNEL是否已经有数据过来了
能够看到数据已经写到了kafka中
下面咱们就要去编写收集端的代码
说到收集端,实际上就是消费者还有往es里插入
代码我就不贴出来了
大体逻辑是起2个单独的线程 一个线程负责消费kafka,一个线程调用es的api或者restful接口的_bulk方法去批量插入json数据
下面咱们再去看es是否已经有数据了
ok如今es集群里也已经有数据了
下面咱们去kibana里添加图表
具体如何添加我就不在这里说了,先给你们看些图
kibana图我就不展现了 由于有铭感信息
能够看到总共的请求数 平均响应时间 都有那些ip连接haproxy haproxy都调用了那些ip 那些请求不正常均可以经过图表看到,还有些需求我后续都会加到kibana中
这样整个流程就走下来了,咱们如今大部分都是别人给咱们提需求,咱们只是去配置,可是咱们能不能本身给本身提一些需求,本身来去分析一些咱们认为有用的日志信息,haproxy日志分析,我认为就是个例子,供你们参考,谢谢