ELK日志分析集群搭建管理(rsyslog(2)

方案2:线上还有另一个传输方案,rsyslog设置一个中继,通过udp的方式将日志传到中继的rsyslog,由中继rsyslog入kafka,这么做的目的是方便了管理,当时还有个考虑是udp不会堵,但经过多轮测试后,nginx的rsyslog模块也是很健壮,不会堵的。

2、对于redis、php curl的日志

通过rsyslog的imfile模块,直接对文件监听,配置见上面的rsyslog配置,在日志轮转时通过超链接的方式进行新文件的连接,对应的超连接计划任务如下,每天0点5分执行:

5 0 * * * root sh /usr/local/script/php_slow_log.sh  &> /dev/null

对应的php_slow_log.sh的脚本如下:

#!/bin/bash

DATE=`date +%F`

ln -sf  /data1/ms/log/php_common/curl-$DATE  /data1/ms/log/php_common/php_slow_log

备注:

a、rsyslog向4个kafka的broker推送消息时,是以轮训的方式;

b、rsyslog通过udp或tcp向外转发日志时,会默认加上时间、主机名、主机ip的属性。

二、队列(kafka+zookeeper)

队列用的是kafka,kafka集群使用zookeeper管理,我们用了4台服务器混装了4个kafka和3个zookeeper,kafka和zookeeper的安装地址如下:

 注意:下载Binary downloads版本,别下错了,解压后就能用

  注意:安装过程很简单,按照文档来即可,不在说明

1、关于kafaka

a、配置比较简单,基本默认即可,常调整的配置项如下:

配置文件:server.properties

broker.id=190  #id

num.partitions=20 #默认kafka的partion数量 

log.dirs=/data1/kafka-logs  #日志文件存放目录

log.retention.hours=3 #日志保留时间长短

zookeeper.connect=10.13.88.190:2181,10.13.88.191:2181,10.13.88.192:2181 #zookeeper指定

delete.topic.enable=true #topic是可以删除的

b、安装后测试(假设kafka和zookeeper都装了):

开两个终端,两个终端分别运行如下命令

启动:./bin/kafka-server-start.sh /usr/local/kafka/config/server.properties &

终端1:./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

终端2:./bin/kafka-console-consumer.sh  --zookeeper localhost:2181 --from-beginning --topic test

注意两个终端的topic要一个名字,这时你在终端1输入任何数据,在终端2是同步的,证明你安装成功。

c、kafka常用管理命令

创建topic:./bin/kafka-topics.sh --create --topic test --replication-factor 1 --partitions 32  --zookeeper  localhost:2181

删除topic:./bin/kafka-topics.sh --delete --topic test --zookeeper localhost:2181

查看topic列表:./bin/kafka-topics.sh  --list  --zookeeper localhost:2181

查看某个topic详细:./bin/kafka-topics.sh --describe --topic test --zookeeper localhosts:2181

监控某个topic的消费:./bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test

指定消费组查看消费情况:./bin/kafka-consumer-offset-checker.sh --zookeeper localhost:2181  --group test

备注:topic下partitions的数量决定了并发消费的数量,在设置上要根据消息的QPS和硬盘情况合理配置。

2、关于zookeeper

a、配置比较简单,大多数默认项,最好奇数个,半数以上zookeeper存活可用

配置文件:zoo.cfg

dataDir=/data1/zookeeper

server.1=10.13.88.190:3888:4888

server.2=10.13.88.191:3889:4888

server.3=10.13.88.192:3889:4888

注意:要在数据目录手动建立myid,myid的值是server后面的数字,数字是有范围限制的1~255

b、zookeeper的常用管理命令

zookeeper我主要是看下它的整体状态,写了个简单脚本获取zookeeper的状态,执行结果如下:

脚本内容如下:

#!/bin/sh

#writer:gaolixu

[ -z $1 ] && echo "Please specify zoo.cfg like /usr/local/zookeeper/conf/zoo.cfg " && exit

cat $1 |grep "^server" |awk -F'[:|=]' '{print $2}' |

while read line

do

echo -ne "$line\t"

echo stat|nc -w 2 $line 2181  |egrep "^(Node|Zxid|Mode|Connections)" |tr "\n" "\t"

echo stat|nc -w 2 $line 2181  |egrep "^(Node|Zxid|Mode|Connections)" &>/dev/null || echo -n "host is done."

echo

done

使用方式:zkstat.sh   /配置文件zoo.cfg的位置

zookeeper是相当稳定的,基本不用管。

备注:zookeeper配置文件里不能有汉字,否则启动不起来。

三、清洗(logstash)

logstash用做清洗,并且将处理好的日志推送到es里,安装过程很简单详见网址:

我线上的nginx的配置文件如下:

input {

  kafka {

    zk_connect => "10.13.88.190:2181,10.13.88.191:2181,10.13.88.192:2181"

    topic_id => "cms-nginx"

    group_id => "cms-nginx"

    consumer_threads => 1

    reset_beginning => false

    decorate_events => false

  }

}

filter {

  ruby {

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/6601157f7fc6dad2553a55911c1db82f.html