• ELK+Kafka 企业日志收集平台(一)


    背景:

    最近线上上了ELK,但是只用了一台Redis在中间作为消息队列,以减轻前端es集群的压力,Redis的集群解决方案暂时没有接触过,并且Redis作为消息队列并不是它的强项;所以最近将Redis换成了专业的消息信息发布订阅系统Kafka, Kafka的更多介绍大家可以看这里:传送门  ,关于ELK的知识网上有很多的哦, 此篇博客主要是总结一下目前线上这个平台的实施步骤,ELK是怎么跟Kafka结合起来的。好吧,动手!

    ELK架构拓扑:

    然而我这里的整个日志收集平台就是这样的拓扑:
    1

    1,使用一台Nginx代理访问kibana的请求;
    2,两台es组成es集群,并且在两台es上面都安装kibana;(以下对elasticsearch简称es)
    3,中间三台服务器就是我的kafka(zookeeper)集群啦; 上面写的消费者/生产者这是kafka(zookeeper)中的概念;
    4,最后面的就是一大堆的生产服务器啦,上面使用的是logstash,当然除了logstash也可以使用其他的工具来收集你的应用程序的日志,例如:Flume,Scribe,Rsyslog,Scripts……

    角色:

    11111

    软件选用:

    部署步骤:

    1.ES集群安装配置;

    2.Logstash客户端配置(直接写入数据到ES集群,写入系统messages日志);

    3.Kafka(zookeeper)集群配置;(Logstash写入数据到Kafka消息系统);

    4.Kibana部署;

    5.Nginx负载均衡Kibana请求;

    6.案例:nginx日志收集以及MySQL慢日志收集;

    7.Kibana报表基本使用;

    ES集群安装配置;

    es1.example.com:

    1.安装java-1.8.0以及依赖包

    2.获取es软件包

    3.修改配置文件

    4.创建相关目录

    5.获取es服务管理脚本

    6.启动es ,并检查其服务是否正常

    访问http://192.168.2.18:9200/ 如果出现以下提示信息说明安装配置完成啦,

    2

    7.es1节点好啦,我们直接把目录复制到es2

    8.安装es的管理插件

    es官方提供一个用于管理es的插件,可清晰直观看到es集群的状态,以及对集群的操作管理,安装方法如下:

    安装好之后,访问方式为: http://192.168.2.18:9200/_plugin/head,由于集群中现在暂时没有数据,所以显示为空,

    3

          此时,es集群的部署完成。

    Logstash客户端安装配置;

    在webserve1上面安装Logstassh

    1.downloads  软件包 ,这里注意,Logstash是需要依赖java环境的,所以这里还是需要yum install -y java-1.8.0.

    2.提供logstash管理脚本,其中里面的配置路径可根据实际情况修改

    3.Logstash 向es集群写数据

    (1)编写一个logstash配置文件

    (2)检查配置文件是否有语法错

    (3)既然配置ok我们手动启动它,然后写点东西看能否写到es

    4.png

    ok.上图已经看到logstash已经可以正常的工作啦.

    4.下面演示一下如何收集系统日志

    将之前的配置文件修改如下所示内容,然后启动logstash服务就可以在web页面中看到messages的日志写入es,并且创建了一条索引

    启动logstash后,我们来看head这个插件的web页面

    5

    ok,系统日志我们已经成功的收集,并且已经写入到es集群中,那上面的演示是logstash直接将日志写入到es集群中的,这种场合我觉得如果量不是很大的话直接像上面已将将输出output定义到es集群即可,如果量大的话需要加上消息队列来缓解es集群的压力。前面已经提到了我这边之前使用的是单台redis作为消息队列,但是redis不能作为list类型的集群,也就是redis单点的问题没法解决,所以这里我选用了kafka ;下面就在三台server上面安装kafka集群

    Kafka集群安装配置;

    在搭建kafka集群时,需要提前安装zookeeper集群,当然kafka已经自带zookeeper程序只需要解压并且安装配置就行了

    kafka1上面的配置:

    1.获取软件包.官网:http://kafka.apache.org

    2.配置zookeeper集群,修改配置文件

    3.创建zookeeper所需要的目录

    4.在/data/zookeeper目录下创建myid文件,里面的内容为数字,用于标识主机,如果这个文件没有的话,zookeeper是没法启动的哦

    以上就是zookeeper集群的配置,下面等我配置好kafka之后直接复制到其他两个节点即可

    5.kafka配置

    6.将kafka(zookeeper)的程序目录全部拷贝至其他两个节点

    7.修改两个借点的配置,注意这里除了以下两点不同外,都是相同的配置

    8.修改完毕配置之后我们就可以启动了,这里先要启动zookeeper集群,才能启动kafka

    我们按照顺序来,kafka1 –> kafka2 –>kafka3

    注意,如果zookeeper有问题 nohup的日志文件会非常大,把磁盘占满,这个zookeeper服务可以通过自己些服务脚本来管理服务的启动与关闭。

    后面两台执行相同操作,在启动过程当中会出现以下报错信息

    由于zookeeper集群在启动的时候,每个结点都试图去连接集群中的其它结点,先启动的肯定连不上后面还没启动的,所以上面日志前面部分的异常是可以忽略的。通过后面部分可以看到,集群在选出一个Leader后,最后稳定了。

    其他节点也可能会出现类似的情况,属于正常。

    9.zookeeper服务检查

    ok.  这时候zookeeper集群已经启动起来了,下面启动kafka,也是依次按照顺序启动

    注意,跟zookeeper服务一样,如果kafka有问题 nohup的日志文件会非常大,把磁盘占满,这个kafka服务同样可以通过自己些服务脚本来管理服务的启动与关闭。

    此时三台上面的zookeeper及kafka都已经启动完毕,来检测以下吧

    (1)建立一个主题

    (2)查看有哪些主题已经创建

    (3)查看summer这个主题的详情

    (4)发送消息,这里使用的是生产者角色

    (5)接收消息,这里使用的是消费者角色

    如果能够像上面一样能够接收到生产者发过来的消息,那说明基于kafka的zookeeper集群就成功啦。

    10,下面我们将webserver1上面的logstash的输出改到kafka上面,将数据写入到kafka中

    (1)修改webserver1上面的logstash配置,如下所示:各个参数可以到官网查询.

    (2)配置检测

    (2)启动Logstash,这里我直接在命令行执行即可

    (3)验证数据是否写入到kafka,这里我们检查是否生成了一个叫system-messages的主题

    可以看出,这个主题生成了16个分区,每个分区都有对应自己的Leader,但是我想要有10个分区,3个副本如何办?还是跟我们上面一样命令行来创建主题就行,当然对于logstash输出的我们也可以提前先定义主题,然后启动logstash 直接往定义好的主题写数据就行啦,命令如下:

    好了,我们将logstash收集到的数据写入到了kafka中了,在实验过程中我使用while脚本测试了如果不断的往kafka写数据的同时停掉两个节点,数据写入没有任何问题。

    那如何将数据从kafka中读取然后给我们的es集群呢?那下面我们在kafka集群上安装Logstash,安装步骤不再赘述;三台上面的logstash 的配置如下,作用是将kafka集群的数据读取然后转交给es集群,这里为了测试我让他新建一个索引文件,注意这里的输入日志还是messages,主题名称还是“system-messages”

    在三台kafka上面启动Logstash,注意我这里是在命令行启动的;

    在webserver1上写入测试内容,即webserver1上面利用message这个文件来测试,我先将其清空,然后启动

    下图为我在客户端写入到kafka集群的同时也将其输入到终端,这里写入了三条内容

    6

    而下面三张图侧可以看出,三台Logstash 很平均的从kafka集群当中读取出来了日志内容

    7

    9

    8

    再来看看我们的es管理界面

    10

    ok ,看到了吧,

    流程差不多就是下面 酱紫咯

    111

    由于篇幅较长,我将

    4.Kibana部署;

    5.Nginx负载均衡Kibana请求;

    6.案例:nginx日志收集以及MySQL慢日志收集;

    7.Kibana报表基本使用;

    放到下一篇博客。

     
      分享到:
     
     码字很辛苦,转载请注明来自Daemon's blog《ELK+Kafka 企业日志收集平台(一)》

    评论

    1. Tiantiandas#1

      [root@es1 ~]#
      set.default.ES_HOME=/usr/local/elasticsearch #安装路径
      set.default.ES_HEAP_SIZE=1024 #jvm内存大小,根据实际环境调整即可

      您好,请问这个设置是在哪个文件里面? 谢谢!

      回复
      2016-06-17
    2. 表弟#2

      表哥大神,已进入膜拜状态,

      回复
      2016-12-14
  • 相关阅读:
    编写StyleCop自定义规则教程(二)校验规则增加配置参数
    XtraReport学习笔记之Bookmark (一)
    Web Application Firewall(WAF)
    CAN/CFN/CPN
    什么是 SASE?
    FEC 前向纠错
    VPP usage
    强化学习
    What Is a RAN Intelligent Controller (RIC)?
    Read Up: Connection Management xAPP for ORAN RIC: A Graph Neural Network and Reinforcement Learning Approach
  • 原文地址:https://www.cnblogs.com/felixzh/p/6411307.html
Copyright © 2020-2023  润新知