• 离线部署ELK+kafka日志管理系统【转】


    转自

    离线部署ELK+kafka日志管理系统 - xiaoxiaozhou - 51CTO技术博客
    http://xiaoxiaozhou.blog.51cto.com/4681537/1854684

    1、简介

    对于日志来说,最常见的需求就是收集、查询、显示,正对应logstash、elasticsearch、kibana的功能。

    ELK日志系统在系统中,主要可解决的问题:

    基于日志的数据挖掘

    问题排查,上线检查

    根据关键字查询日志详情

    异常数据自动触发消息通知

    服务器监控,应用监控,Bug管理

    统计分析,比如接口的调用次数、执行时间、成功率等

    性能分析,用户行为分析,安全漏洞分析,时间管理

    Logstash:

    Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。与其他监控系统的整合也很方便,可以将数据输出到zabbix、nagios等。还可以把数据统计后输出到graphite,实现统计数据的可视化显示。

    logstash对日志的处理逻辑很简单,就是一个pipeline的过程:

    inputs >> codecs >> filters>> outputs

    agent分布在每一台需要采集数据的节点上,agent只是Logstash承担的一个角色,与此对应的是indexer。agent会分别将各自获取的日志作为输入输出到一个消息代理(例如redis或者kafka),indexer会将消息代理作为输入再输出到ES上,由ES做indexing。其实Logstash在整个过程中只负责输入输出,对Logstash而言并没有agent和index之分。如果日志量小的话完全不需要设置indexer,直接将ES作为agent的输出源。

    Elasticsearch:

    elasticsearch是基于lucene的开源搜索引擎,主要的特点有

    real time

    distributed

    high availability

    document oriented 

    schema free

    restful api

    kibana:

    Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。kibana是根据前台过滤的条件,生成query 发送到elasticsearch,然后根据返回的值重绘页面。

    下面盗用一张图来展示整个架构:

    wKiom1fhLJaj6e0nAAFzLbrjnOw559.jpg

    以上是我查看网上资料最终总结的,感谢各位大神的贡献。

    2、测试环境说明

    下面通过在测试环境下搭建ELK日志系统来对ELK进行更加深入的认识。

    软件环境:

    logstash-2.3.3.tar.gz  marvel-2.3.3.tar.gzelasticsearch-2.3.3.zip   kibana-4.5.1-linux-x64    marvel-agent-2.3.3.zip   elasticsearch-head-master.zip   license-2.3.3.zip   jdk-8u101-linux-x64.tar.gz   kafka_2.10-0.10.0.1.tgz   zookeeper-3.4.6.tar.gz

    服务器和角色:

    192.168.1.101           kafka+zookeeper     
    
    192.168.1.102           kafka+zookeeper      
    
    192.168.1.103           kafka+zookeeper   logstash shipper 
    
    192.168.1.104          logstash shipper
    
    192.168.1.105             elasticsearch kibana
    
    192.168.1.106        logstash indexer

    说明:

    本篇分别对上边的物理节点标识为node1—node6,下面都以这种称谓。

    Node1和nide2以及node3三台节点上搭建kafka+zookeeper集群,另外node3本身也是一个nginx服务器。

    Node4上搭建nginx服务器,和node3一起负责logstash日志数据生产端,把nginx日志传给kafka集群。

    日志传输方向:

    Nginx日志-->logstash shipper-->kafka+zookeeper-->logstash indexer-->elasticsearch

    最后kibana负责展示es收集到的数据

    3、 配置java环境

    各节点配置jdk1.8的环境

    /home/apps # tar -zxvf jdk-8u101-linux-x64.tar.gz
    
     
    
    /home/apps # ln -sv /home/apps/jdk1.8.0_101/usr/local/jdk1.8.0_101
    
    `/usr/local/jdk1.8.0_101' ->`/home/apps/jdk1.8.0_101'

    编辑环境变量文件,注释掉之前的java环境配置,添加下面的内容

    /home/apps # vi /etc/profile
    
    JAVA_HOME=/usr/local/jdk1.8.0_101
    
    PATH=$JAVA_HOME/bin:$PATH
    
    CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
    
    export PATH JAVA_HOME CLASSPATH
    
     
    
    /home/apps #source /etc/profile
    
     
    
    /home/apps # java -version
    
    java version "1.8.0_101"
    
    Java(TM) SE Runtime Environment (build1.8.0_101-b13)
    
    Java HotSpot(TM) 64-Bit Server VM (build25.101-b13, mixed mode)

    4、搭建kafka+zookeeper集群环境

    4.1、node1上安装配置zookeeper

    解压包

    # tar -xf kafka_2.10-0.10.0.1.tgz -C /usr/local
    
    # tar -zxf zookeeper-3.4.6.tar.gz -C /usr/local
    
     
    
    # cd /usr/local
    
    # mv kafka_2.10-0.10.0.1/ kafka
    
    # mv zookeeper-3.4.6/ zookeeper

    生成zookeeper配置文件

    # cd zookeeper/conf
    
    # cp zoo_sample.cfg zoo.cfg

    编辑配置文件

    # vi zoo.cfg
    
    dataDir=/usr/local/zookeeper/tmp/zookeeper
    
    server.1=192.168.1.101:2888:3888 
    
    server.2=192.168.1.102:2888:3888 
    
    server.3=192.168.1.103:2888:3888
    
     
    
    # cd ..
    
    # mkdir -p tmp/zookeeper
    
    # echo "1" >tmp/zookeeper/myid

    4.2、配置node2和node3的zookeeper

    依照node1的配置配置node2和node3,注意下面的参数三个节点各有差异

    Node2:
    
    # echo "2" >tmp/zookeeper/myid
    
     
    
    Node3:
    
    # echo "3" >tmp/zookeeper/myid

    其他配置都一样

      

    4.3、依次启动三个节点的服务

    # ./bin/zkServer.sh start conf/zoo.cfg
    
    Using config:/usr/local/zookeeper/bin/../conf/zoo.cfg
    
    Starting zookeeper ... STARTED
    
     
    
    查看三个节点的状态
    
    Node1:
    
    # ./bin/zkServer.sh status
    
    JMX enabled by default
    
    Using config:/usr/local/zookeeper/bin/../conf/zoo.cfg
    
    Mode: follower
    
     
    
    Node2:
    
    # ./bin/zkServer.sh status
    
    JMX enabled by default
    
    Using config:/usr/local/zookeeper/bin/../conf/zoo.cfg
    
    Mode: follower
    
     
    
    Node3:
    
     
    
    # ./bin/zkServer.sh status
    
    JMX enabled by default
    
    Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
    
    Mode: leader

    4.4、配置node1的kafka

    # cd ../kafka
    
    # vi config/server.properties
    
    broker.id=0
    
    port=9092 
    
    host.name=node1
    
    log.dirs=/usr/local/kafka/tmp/kafka-logs
    
    num.partitions=2
    
    zookeeper.connect=192.168.1.101:2181,192.168.1.102:2181,192.168.1.103:2181
    
     

    4.5、配置Node2和node3的kafka

    依照node1的配置配置node2和node3,注意下面的参数三个节点各有差异
    
    Node2:
    
    broker.id=1
    
    host.name=node2
    
     
    
    node3:
    
    broker.id=2
    
    host.name=node3
    
     
    
    说明:
    
    host.name是节点的主机名
    
     
    
    依次启动三个节点的kafka
    
    # ./bin/kafka-server-start.sh config/server.properties
    
     

    4.6、创建topic验证集群是否正常

    Node1上创建topic
    
     
    
    /usr/local/kafka# bin/kafka-topics.sh --create --zookeeper 192.168.1.100:2181 --replication-factor 3 --partitions 2 --topic test1
    
    Created topic "test1".
    
     
    
    Node2上发送消息至kafka(2节点模拟producer)
    
    /usr/local/kafka # bin/kafka-console-producer.sh --broker-list 192.168.1.100:9092 --topic test1
    
    hello world 
    
     
    
    Node3显示消息的消费(3节点模拟consumer)
    
    /usr/local/kafka # bin/kafka-console-consumer.sh --zookeeper  192.168.1.100:2181 --topic test1 --from-beginning
    
    hello world
    
     
    
    可以看到在node2节点的输入的信息可以在nide3节点显示,说明集群正常使用。
    
     
    
    使用下面的命令可以查看zookeeper服务的端口
    
    # netstat -nlpt | grep -E "2181|2888|3888"
    
     

    5、配置es和kibana

    在node5节点配置es

    5.1、创建elasticsearch账户

    # groupadd esuser
    
    # useradd -d /home/esuser -m esuser
    
    # passwd esuser
    
     
    
    /home/apps # unzip elasticsearch-2.3.3.zip
    
    /home/apps # mv elasticsearch-2.3.3 /usr/local/elasticsearch 

    5.2、编辑es配置文件

    # cd /usr/local/elasticsearch/
    
     
    
    编辑es配置文件
    
    # vi config/elasticsearch.yml 
    
    cluster.name: es_cluster
    
    node.name: node5
    
    path.data: /usr/local/elasticsearch/data
    
    path.logs: /usr/local/elasticsearch/logs
    
     
    
     
    
    network.host: 192.168.1.105
    
    http.port: 9200
    
     
    
    # mkdir data logs
    
     
    
    修改目录权限
    
    /home/apps # chown -R esuser:esuser /usr/local/elasticsearch/
    
     
    
    切换到esuser用户,启动es服务
    
    /usr/local/elasticsearch> ./bin/elasticsearch
    
     
    
    可使用下面命令查看es服务端口情况
    
    # netstat -nlpt | grep -E "9200|9300"
    
     
    
    浏览器输入http://192.168.1.105:9200/,显示如下所示信息,说明服务正常
    
    {
    
      "name" : "node5",
    
      "cluster_name" : "es_cluster",
    
      "version" : {
    
        "number" : "2.3.3",
    
        "build_hash" : "218bdf10790eef486ff2c41a3df5cfa32dadcfde",
    
        "build_timestamp" : "2016-05-17T15:40:04Z",
    
        "build_snapshot" : false,
    
        "lucene_version" : "5.5.0"
    
      },
    
      "tagline" : "You Know, for Search"
    
    }

    5.3、ES插件配置

    /home/apps # unzip elasticsearch-head-master.zip 
    
    # mv elasticsearch-head-master /usr/local/elasticsearch/plugins/head 

    在浏览器中输入http://192.168.1.105:9200/_plugin/head/,出现如图【ELK&kafka1】所示的画面。

    wKioL1fhNk7hgW-vAACkKHufojE726.png

    ELK&kafka1

    marvel插件的安装

    /usr/local/elasticsearch # ./bin/plugininstall file:///home/apps/license-2.3.3.zip
    
    -> Installing fromfile:/home/apps/license-2.3.3.zip...
    
    Trying file:/home/apps/license-2.3.3.zip...
    
    Downloading .DONE
    
    Verifying file:/home/apps/license-2.3.3.zipchecksums if available ...
    
    NOTE: Unable to verify checksum fordownloaded plugin (unable to find .sha1 or .md5 file to verify)
    
    Installed license into/usr/local/elasticsearch/plugins/license
    
     
    
    /usr/local/elasticsearch # ./bin/plugininstall file:///home/apps/marvel-agent-2.3.3.zip
    
    -> Installing fromfile:/home/apps/marvel-agent-2.3.3.zip...
    
    Tryingfile:/home/apps/marvel-agent-2.3.3.zip ...
    
    Downloading ..DONE
    
    Verifyingfile:/home/apps/marvel-agent-2.3.3.zip checksums if available ...
    
    NOTE: Unable to verify checksum fordownloaded plugin (unable to find .sha1 or .md5 file to verify)
    
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    
    @    WARNING: plugin requires additional permissions     @
    
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    
    * java.lang.RuntimePermission setFactory
    
    * javax.net.ssl.SSLPermission setHostnameVerifier
    
    Seehttp://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
    
    for descriptions of what these permissionsallow and the associated risks.
    
     
    
    Continue with installation? [y/N]y
    
    Installed marvel-agent into/usr/local/elasticsearch/plugins/marvel-agent
    
     

    重启es服务

    在浏览器中输入http://192.168.1.105:9200/_plugin/head/,出现如图【ELK&kafka2】所示的画面。

    wKiom1fhNw3S7fCHAADOLUTELAQ596.png

    ELK&kafka2

    5.4、配置kibana

    /home/apps # tar -zxvf kibana-4.5.1-linux-x64.tar.gz
    
    /home/apps # mv kibana-4.5.1-linux-x64/usr/local/kibana             
    
     
    
    编辑kibana配置文件
    
    /home/apps # cd /usr/local/kibana
    
    /usr/local/kibana # vi config/kibana.ym
    
    server.port: 5601
    
    server.host: "192.168.1.105"
    
    elasticsearch.url:"http://192.168.1.105:9200"                                                                                      
    
    启动kibana
    
    # ./bin/kibana &


    在浏览器中输入192.168.1.105:5601,可以【ELK&kafka3】所示的画面。

    wKioL1fhN8PDn0njAAJ51XfdYbg009.png

    ELK&kafka3

    在Kibana中把marvel插件安装完成(安装过程需要一些时间)

    /home/apps # cd /usr/local/kibana/
    
    /usr/local/kibana # ./bin/kibana plugin--install marvel --url file:///home/apps/marvel-2.3.3.tar.gz
    
    Installing marvel
    
    Attempting to transfer from file:///home/apps/marvel-2.3.3.tar.gz
    
    Transferring 1597693bytes....................
    
    Transfer complete
    
    Extracting plugin archive
    
    Extraction complete
    
    Optimizing and caching browser bundles...
    
    Plugin installation complete

    重启kibana后,访问kibana,可以【ELK&kafka4】所示的画面。

    wKiom1fhOD6BuzTKAAKo_0liO0k593.png

    ELK&kafka4

    6、Node4日志生产端配置

    6.1、 node4节点安装配置nginx 

    # tar -zxf pcre-8.21.tar.gz -C /usr/local
    
    # tar -zxf nginx-1.2.7.tar.gz -C /usr/local
    
    # cd pcre-8.21/
    
    # ./configure
    
    # make && make install
    
     
    
    # cd nginx-1.2.7/
    
    # ./configure --with-http_stub_status_module --prefix=/usr/local/nginx
    
    # make && make install
    
     
    
    在nginx配置文件中的http {}段添加下面的内容:
    
    log_format  main  '$remote_addr - $remote_user [$time_local] '
    
                               '"$request" $status $body_bytes_sent '
    
                               '"$http_referer" "$http_user_agent" ';
    
     
    
    /usr/local/nginx/sbin # ./nginx -s reload


    6.2、logstash配置

    # tar -zxvf logstash-2.3.3.tar.gz
    
    # mv logstash-2.3.3 /usr/local/logstash
    
     
    
    配置logstash生产端文件
    
    /usr/local # cd logstash/
    
     
    
    /usr/local/logstash # mkdir logs etc
    
     
    
    /usr/local/logstash # vi etc/logstash_nginx_shipper.conf 
    
     
    
    input {
    
       file {
    
           type => "nginx-access"
    
           path => "/usr/local/nginx/logs/access.log"
    
       }
    
    }
    
     
    
    output {
    
    stdout { codec => rubydebug }
    
    kafka {
    
    bootstrap_servers => "192.168.1.101:9092,192.168.1.102:9092,192.168.1.103:9092"
    
    topic_id => "nginx-messages"
    
    compression_type => "snappy"
    
    }
    
    }
    
     

    说明:

    配置文件中的stdout { codec => rubydebug }参数是为了在标准输出显示信息

    通过这个文件的配置node4节点可以把nginx产生的日志信息发送到kafka集群

    6.3、node3节点生产端的配置

    因为node3本身就是一个nginx web服务器,所以只需要一个logstash配置文件就可以了,依照node4节点产生一个相同的文件。

    日志消费端配置

    依照node4的logstash配置,只不过配置文件不同,node6的配置文件如下所示:

    /usr/local/logstash # vi etc/logstash_nginx_indexer.conf 
    
    input {
    
    kafka {
    
    zk_connect =>"192.168.1.101:2181,192.168.1.102:2181,192.168.1.103:2181"
    
    topic_id => "nginx-messages"
    
    codec => plain
    
    reset_beginning => false
    
    consumer_threads => 5
    
    decorate_events => true
    
    }
    
    }
    
    output {
    
    #stdout {
    
    #       debug => true
    
    #       debug_format => json
    
    #   }
    
    stdout { codec => rubydebug }
    
    elasticsearch {
    
    hosts => "192.168.1.105:9200"
    
    index =>"nginx-messages-%{+YYYY-MM}"
    
    }
    
    }

    7、验证

    启动服务加载文件

    日志生产端Node4:

    /usr/local/logstash # ./bin/logstash -f etc/logstash_nginx_shipper.conf

    日志消费端node6:

    /usr/local/logstash # ./bin/logstash -f etc/logstash_nginx_indexer.conf

    往node4的nginx日志文件中插入数据,可从图【ELK&kafka5】和【ELK&kafka6】看到多了nginx的索引,es中出现数据。

    wKioL1fhOYPDy0MSAAMW9zNtNjs148.png

    ELK&kafka5

    wKioL1fhOd-x_yx_AAFBYbUk-x4577.png

    ELK&kafka6

    日志生产端Node3:

    /usr/local/logstash # ./bin/logstash -f etc/logstash_nginx_shipper.conf  

    往node3的nginx日志文件中插入数据,可从图【ELK&kafka7】看到es中出现的数据。

    wKioL1fhOkXQEQanAAElLaRLI2A858.png

    ELK&kafka7

    在kibana的访问页面首先做配置,建立一个和es里展示的索引相对应的索引名“nginx-mes

    sages-*”,如图【ELK&kafka8】否则的话不能创建索引。

    wKiom1fhOufxdqqeAAJJ_6hze8c014.png

    ELK&kafka8

    可从图【ELK&kafka9】看到kibana中出现的数据。

    wKiom1fhO1Cgf18_AAMRu1LqYfE862.png

    ELK&kafka9

    8、  拓展

    接下来还有很多的工作要做,例如环境架构的适用性和高可用、日志的格式化和过滤、kibana图表的分析、索引的清理、ELK系统的优化等等。

    9、参考文章

    http://lx.wxqrcode.com/index.php/post/101.html

    http://blog.csdn.net/dabokele/article/details/51765136

    http://blog.csdn.net/ubuntu64fan/article/details/26683941



    本文出自 “xiaoxiaozhou” 博客,请务必保留此出处http://xiaoxiaozhou.blog.51cto.com/4681537/1854684

  • 相关阅读:
    Codeforces Round #383 D
    [HNOI2010]弹飞绵羊
    多项式幂函数(加强版)
    「ZJOI2015」地震后的幻想乡
    [AHOI2013]作业
    MVC3+EF4.1学习系列(九)-----EF4.1其他的一些技巧的使用
    MVC3+EF4.1学习系列(八)-----利用Repository and Unit of Work重构项目
    MVC3+EF4.1学习系列(七)-----EF并发的处理
    MVC3+EF4.1学习系列(六)-----导航属性数据更新的处理
    MVC3+EF4.1学习系列(五)----- EF查找导航属性的几种方式
  • 原文地址:https://www.cnblogs.com/paul8339/p/7274819.html
Copyright © 2020-2023  润新知