在團800運維工做總結之haproxy---rsyslog----kafka---collector--es--kibana

一下是我在單位對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插件更高效

viewfile?f=DFAF6C355BE1606A4A0FE026C5E48

咱們如今已經對日誌進行了咱們所須要到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是否已經有數據過來了

viewfile?f=DFAF6C355BE1606A4A0FE026C5E48

能夠看到數據已經寫到了kafka中

下面咱們就要去編寫收集端的代碼

說到收集端,實際上就是消費者還有往es裏插入

代碼我就不貼出來了

大體邏輯是起2個單獨的線程 一個線程負責消費kafka,一個線程調用es的api或者restful接口的_bulk方法去批量插入json數據

下面咱們再去看es是否已經有數據了

viewfile?f=DFAF6C355BE1606A4A0FE026C5E48

ok如今es集羣裏也已經有數據了

下面咱們去kibana裏添加圖表

具體如何添加我就不在這裏說了,先給你們看些圖

kibana圖我就不展現了 由於有銘感信息



能夠看到總共的請求數 平均響應時間 都有那些ip連接haproxy haproxy都調用了那些ip 那些請求不正常均可以經過圖表看到,還有些需求我後續都會加到kibana中

這樣整個流程就走下來了,咱們如今大部分都是別人給咱們提需求,咱們只是去配置,可是咱們能不能本身給本身提一些需求,本身來去分析一些咱們認爲有用的日誌信息,haproxy日誌分析,我認爲就是個例子,供你們參考,謝謝

相關文章
相關標籤/搜索