在团800运维工作总结之haproxy---rsyslog----kafka---collector--es--kibana

一下是我在单位对haproxy进行日志分析的一整套流程

我们一直都是处在维护es集群的配置,并没有把一整套流程 包括收集端的代码,全部自己搞定一次,而且线上收集日志的时候我们一般都用的logstash,但是业界很多人都说logstash不管是性能上还有稳定性上都不是很好,logstash的优点在于配置简便,这次我选用了rsyslog

今天就这haproxy日志,我把整个流程给大家走一遍,就算是让大家了解下

具体流程如下

haproxy----local2级别----rsyslog----kafka---collector(消费kafka,写到es)---es---kibana展示

1.haproxy的日志默认需要结合rsyslog

配置文件这样的

local2.*                                                /data1/logs/haproxy/haproxy.log

如果我们不用rsyslog,用logstash就会存在这样的情况

我们还是要在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日志分析,我认为就是个例子,供大家参考,谢谢

时间: 2024-10-15 08:57:26

在团800运维工作总结之haproxy---rsyslog----kafka---collector--es--kibana的相关文章

在团800运维工作总结之记一次lvs坑

今天突然发现13.14这个lvs的vip代理的所有端口不可用,重启lvs后恢复可用,过会又不可用了 解决方法 通过arpping **13.14看到居然有2个mac地址,一个居然是后端新加机器的mac地址 立马发现原因是由于之前有人在13.14后面加了一台机器,没有在sysctl.conf修改内核的那4个参数,导致13.14穿透到后端机器 具体原因 为什么重启keepalived就好了,因为出现问题后重启LVS会刷新交换机上记录的13.14对应mac,所以会恢复一段时间,但是一旦mac过期后问题

在团800运维工作总结之dns集群使用

1.产生燕郊 蓝汛 亦庄三机房同步dns数据所用到的key rndc-confgen -k yanjiao -c yanjiao -a -r keyboard rndc-confgen -k lanxun -c lx -a -r keyboard rndc-confgen -k yizhuang-c yz -a -r keyboard 2./etc/named.conf // // named.conf // // Provided by Red Hat bind package to conf

在团800运维工作总结之salt的使用

来这个公司第一件事就是推出了salt,因为要结合自动化上线使用 salt-net-api 获取tocken 1.curl -k http://127.0.0.1:8000/login -H "Accept: application/x-yaml" -d username="saltapi" -d password="abc/123" -d eauth='pam' 2.curl -k http://192.168.10.169:8000/ -H &

在团800运维工作总结之kafka集群日常工作经验总结

一些重要的原理 基本原理什么叫broker partition cg我就不在这里说了,说一些自己总结的原理 1.kafka有副本的概念,每个副本都分在不同的partition中,这中间分为leader和fllower 2.kafka消费端的程序一定要和partition数量一致,不可以多,会出现有些consumer获取 不到数据的现象 3.producer原理 producer通过zookeeper获取所连接的topic都在那些partiton中,每个parition的leader是那 个,针对

在团800运维工作总结之redis-cluster使用

其实可以看到redis-cluster也好,codis也好其实最根本的原理几乎一致,都有slot槽的概念,数据存储在这些hash槽中 各个缺点 不同点codis中有proxy,每个group中的主从切换不是自动的,对zookeeper的依赖过强 rediscluster集群要求的过于严格,同时挂掉2个分片集群不可用,同时挂掉2个group中的master集群不可用 yum install ruby gem install redis 1.创建redis集群 ./src/redis-trib.rb

在团800运维工作总结之jumpserver分析代码,新加功能

github地址 https://github.com/jumpserver/jumpserver 使用的是他3.0版本不支持ldap的 在他的基础上我添加的功能如下 高可用,双机热备 用户每次登出jumpserver的web页面,都会重置jumpserver的web登录密码发邮件给用户 由于这上面不方便贴代码 有想了解的可以单密我

五年屌丝运维工作shell精华

屌丝运维常用shell列出你最常用的10条shellhistory | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | headhistory | awk '{a[$4]++}END{for(i in a){print a[$i] " " i}}' | sort -rn | head grep -v "#" .bash_history |awk '{++a[$1]}EN

日常运维工作中如何确保你的linux操作系统安全

在现在这个世道中,Linux操作系统的安全是十分重要的.但是,你得知道怎么干.一个简单反恶意程序软件是远远不够的,你需要采取其它措施来协同工作.下面是日常运维工作中常用的几种Linux安全的策略方法. 1. 使用SELinux SELinux是用来对Linux进行安全加固的,有了它,用户和管理员们就可以对访问控制进行更多控制.SELinux为访问控制添加了更细的颗粒度控制.与仅可以指定谁可以读.写或执行一个文件的权限不同的是,SELinux可以让你指定谁可以删除链接.只能追加.移动一个文件之类的

运维工作解释

2017/3/9 PC小记:<运维之下>的文档作者对运维工作的解释清晰明了,有利于工作的划分和职业的规划,因而值得整理后分享. https://github.com/opera443399/ops/tree/master/doc/ARCHITECTURE/ops [Q]:如何开展运维工程师的工作? A:推荐<运维之下> ---------------- [运维工作解释] ---------------- 第一章:互联网运维工作 http://mp.weixin.qq.com/s?_