zoukankan      html  css  js  c++  java
  • ELK日志分析系统的搭建

    一、ELK简介

    ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心组件。
    Elasticsearch是数据存储、搜索、分析引擎,功能非常强大;Logstash是日志的收集、过滤工具;而Kibana是一个web图形展示引擎,可以展示采集到的数据。
    本文旨在通过使用

    二、Elasticsearch的配置

    2.1 软件下载

    我们可以到官方网站下载,我这里下载的是7.3.1的版本,分别是Elasticsearch、Logstash、Kibana、Filebeat等四个压缩包,如下图所示:

    2.2 Elasticsearch的安装

    把压缩包解压出来,然后修改config文件夹下的配置文件elasticsearch.yml
    我这里只开启了允许跨域访问,大家还可以修改端口、ip、集群名称等:

    http.cors.enabled: true
    http.cors.allow-origin: "*"
    

    然后进入通过cmd命令行进入到bin文件夹下,运行elasticsearch,如图:

    运行成功后,访问默认的9200端口,访问成功,如图:

    此时,我们的Elasticsearch已经配置完毕。如果需要做成服务的可以配合nssm,做成windows服务运行。

    三、Logstash、Kibina的配置

    3.1 配置logstash

    解压文件,进入到bin目录下,新建一个配置文件logstash.conf,如下:

    input {
        stdin {
        }
    }
    output {
        elasticsearch {
            hosts => ["127.0.0.1:9200"]
            index => "logstash-%{+YYYY.MM.dd}"
        }
        stdout {
            codec => json_lines
        }
    }
    

    这个文件input表示标准的输入,输出到elasticsearch 和命令行;
    然后运行logstash -f logstash.conf,如下:

    3.2 配置Kibina

    Kibana的配置也很简单,只需要指定elasticsearch的运行端口就可以,修改config文件夹下的kibana.yml文件:
    elasticsearch.hosts: ["http://localhost:9200"]
    然后使用cmd命令进入到bin文件夹下,运行kibana.bat即可,我们可以看到服务成功启动,并运行在5601端口,打开验证:

    3.3 生成日志,并在kibana里查看

    在logstash的控制台里,模拟输入日志内容:
    我们可以在命令行里进行输入,查看产生的日志:

    到kibana验证我们刚输入的内容,是否被收集到,并存储在elasticsearch中,打开kibana,进入可以看到,已经成功收集:

    至此,我们的核心ELK平台已经搭建完毕,并可以通过logstash产生日志,并查看。

    四、通过Filebeat传数据到Logstash,并收集log4net日志

    4.1 Filebeat介绍

    Filebeat是本地文件的日志数据采集器。 安装在服务器上后,Filebeat监视日志目录或特定日志文件,tail file,并将它们转发给Elasticsearch或Logstash、kafka 等。

    4.2 Filebeat 的配置

    设置filebeat采集的来源

    filebeat.inputs:
    
    # Each - is an input. Most options can be set at the input level, so
    # you can use different inputs for various configurations.
    # Below are the input specific configurations.
    
    - type: log
    
      # Change to true to enable this input configuration.
      enabled: true
    
      # Paths that should be crawled and fetched. Glob based paths.
      paths:
        #- /var/log/*.log
        #- c:programdataelasticsearchlogs*
        - D:Worklog4netWebApplication1WebApplication1Logs*
    

    设置filebeat的输出到logstash

    output.logstash:
      # The Logstash hosts
      hosts: ["localhost:5044"]
    

    4.3 配置log4net产生日志,并使用Filebeat采集传输
    此步需要我们引用log4net组件产生本地日志,我的配置文件如下

    <?xml version="1.0" encoding="utf-8" ?>
    <log4net>   
      <root>
        <level value="ALL" />
          <appender-ref ref="rollingFile" />
          <appender-ref ref="ErrorRollingFile" />
      </root>
      <appender name="rollingFile" type="log4net.Appender.RollingFileAppender,log4net">
        <filter type="log4net.Filter.LevelRangeFilter">
          <levelMin value="DEBUG" />
          <levelMax value="WARN" />
        </filter>
        <!--日志的路径-->
        <param name="File" type="" value="Logs" />
        <param name="Encoding" value="UTF-8"/>
        <!--是否覆盖,默认是追加true-->
        <param name="AppendToFile" value="true" />
        <param name="RollingStyle" value="Date" />
        <!--文件名称-->
        <param name="DatePattern" value="yyyy-MM-dd'.Debug.log'" />
        <!--设置无限备份=-1 ,最大备份数为1000-->
        <param name="MaxSizeRollBackups" value="1000" />
        <!--每个文件的大小-->
        <param name="MaximumFileSize" value="102400KB" />
        <!--名称是否可以更改为false为可以更改-->
        <param name="StaticLogFileName" value="false" />
        <layout type="log4net.Layout.PatternLayout,log4net">
          <!--输出格式-->
          <param name="ConversionPattern" value="AppID | %F | %date | %-5level | | | %X{ip} | %X{UserIP} | %X{ServerIP} | %X{ServerPort} | %t | %thread | %l | [ %message%exception]%n" />
        </layout>
      </appender>
      <appender name="ErrorRollingFile" type="log4net.Appender.RollingFileAppender,log4net">
        <filter type="log4net.Filter.LevelRangeFilter">
          <levelMin value="ERROR" />
          <levelMax value="FATAL" />
        </filter>
        <!--日志的路径-->
        <param name="File" type="" value="Logs" />
        <param name="Encoding" value="UTF-8"/>
        <!--是否覆盖,默认是追加true-->
        <param name="AppendToFile" value="true" />
        <param name="RollingStyle" value="Date" />
        <!--文件名称-->
        <param name="DatePattern" value="yyyy-MM-dd'.Error.log'" />
        <!--设置无限备份=-1 ,最大备份数为1000-->
        <param name="MaxSizeRollBackups" value="1000" />
        <!--每个文件的大小-->
        <param name="MaximumFileSize" value="102400KB" />
        <!--名称是否可以更改为false为可以更改-->
        <param name="StaticLogFileName" value="false" />
        <layout type="log4net.Layout.PatternLayout,log4net">
          <!--输出格式-->
          <param name="ConversionPattern" value="AppID | %F | %date | %-5level | | | %X{ip} | %X{UserIP} | %X{ServerIP} | %X{ServerPort} | %t | %thread | %l | [ %message%exception]%n"/>
        </layout>
      </appender>
    </log4net>
    

    启用配置文件

    log4net.Config.XmlConfigurator.Configure();
    

    纪录日志

      log4net.ILog log = log4net.LogManager.GetLogger("rollingFile");//获取一个日志记录器
      log4net.MDC.Set("ip", "192.168.0.1");
      log.Info( "login success");//写入一条新log
    

    查看产生的日志文件:

    4.4 开启filebeat,验证本机产生的日志,收集到ELK平台展示
    打开kibana可以看到,日志已经收集成功:

    到此,我们的ELK平台已经搭建完毕。

    五、小结

    本文主要是通过filebeat收集程序产生的日志,然后通过logstash清洗,elasticsearch存储,最后通过kibana图形化的展示出来,流程图如下:

    通过此文,我们在本机搭建起了一个单机版的日志采集、传输、存储、图形华展示的日志系统。

  • 相关阅读:
    [NOI2014]起床困难综合症(贪心+位运算)(暑假ACM1 A)
    BZOJ 2456 mode(找众数)(暑假ACM1 F)
    [POI2000]病毒(补全AC自动机)
    [NOI2005]聪聪与可可
    BZOJ4500矩阵
    网络编程物理层
    当列表推导式遇到lambda(匿名函数)
    写学生管理系统后的一些感想
    深入学习python内存管理
    python基础详解
  • 原文地址:https://www.cnblogs.com/zqllove/p/11436249.html
Copyright © 2011-2022 走看看