一、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圖形化的展示出來,流程圖如下:
通過此文,我們在本機搭建起了一個單機版的日志采集、傳輸、存儲、圖形華展示的日志系統。