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:\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圖形化的展示出來,流程圖如下:

通過此文,我們在本機搭建起了一個單機版的日志采集、傳輸、存儲、圖形華展示的日志系統。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM