ELK日志分析系统的搭建

一、ELK简介

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

二、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、Kibana的配置

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:\programdata\elasticsearch\logs\*
    - D:\Work\log4net\WebApplication1\WebApplication1\Logs\*

设置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图形化的展示出来,流程图如下:

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

posted @ 2019-09-16 20:57  独钓寒江到酒家  阅读(1345)  评论(1编辑  收藏  举报