使用 Filebeat 收集日誌
上一篇文章介紹了使用
kafka + logstash + elasticsearch
進行日誌收集並展示,在本篇文章中,將介紹使用filebeat
代替 kafka 進行日誌收集。
安裝 Filebeat
此處只介紹 Windows 下面的安裝,至於其他系統, 請參考: 官方文件
下載並解壓後,有兩種方式執行,一種是註冊為 Windows 服務,另一種是直接通過命令列執行;下面分別介紹兩種方式。
註冊為 Windows 服務
前提:系統必須有 PowerShell
,因為官方安裝包中提供的指令碼只能在 PowerShell
中執行,若是 win10 系統,可忽略,因為它已經自帶了 PowerShell
PowerShell
並安裝。
- 下載安裝包 點我下載.
- 解壓到以下目錄:
C:\Program Files
。 - 重新命名
filebeat-<version>-windows
為Filebeat
。 - 以 管理員 身份執行
PowerShell
。 - 在
PowerShell
中執行以下命令:
cd 'C:\Program Files\Filebeat'
C:\Program Files\Filebeat> .\install-service-filebeat.ps1
注:
如果此處提示你沒有許可權,請執行以下的命令註冊
Filebeat
服務 :
PowerShell.exe -ExecutionPolicy UnRestricted -File .\install-service-filebeat.ps1
到這,已經將 Filebeat
成功註冊為系統服務,當下一次開機時它會自動啟動,當然你也可以手動通過服務控制面板啟動它。
通過命令列執行 Filebeat
通過命令列執行 Filebeat
非常簡單,只需將 Filebeat
檔案解壓到某個目錄後,通過以下命令執行:
filebeat -e -c filebeat.yml
配置 Filebeat
日誌輸入配置
Filebeat
使用了安裝目錄下的 filebeat.yml
filebeat.prospectors:
- type: log
# 此處需特別注意,官方預設配置為 false,需要修改為 true
enabled: true
paths:
# 此處配置的是需要收集的日誌所在的位置,可使用萬用字元進行配置
- D:/logs/*.log
日誌輸出配置
因為我們使用的是 logstash
收集日誌,所以得註釋掉預設的 elasticsearch
配置,並取消 logstash
的註釋,最終的效果為:
#output.elasticsearch:
# Array of hosts to connect to.
#hosts: ["localhost:9200"]
# Optional protocol and basic auth credentials.
#protocol: "https"
#username: "elastic"
#password: "changeme"
output.logstash:
# The Logstash hosts
hosts: ["localhost:5044"]
# Optional SSL. By default is off.
# List of root certificates for HTTPS server verifications
#ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]
# Certificate for SSL client authentication
#ssl.certificate: "/etc/pki/client/cert.pem"
# Client Certificate Key
#ssl.key: "/etc/pki/client/cert.key"
此處僅介紹了最基礎的配置,如需檢視更多高階配置,請檢視:官方文件
關於 Filebeat
的配置已經介紹完畢,下面我介紹 log4j2
的配置。
配置 Log4j2
因為我們使用的是 Filebeat
進行日誌收集,所以我們只需要簡單的將日誌輸出到本地檔案中即可,這裡我將使用 RollingFile
進行相關配置:
log4j-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Properties>
<Property name="pattern" value="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="${pattern}"/>
</Console>
<RollingFile name="RollingFile" fileName="D:/logs/app.log"
filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout pattern="${pattern}"/>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="250 MB"/>
</Policies>
</RollingFile>
<Async name="AsyncRollingFile">
<AppenderRef ref="RollingFile"/>
</Async>
</Appenders>
<Loggers>
<Root level="DEBUG">
<AppenderRef ref="Console"/>
<AppenderRef ref="AsyncRollingFile"/>
</Root>
</Loggers>
</Configuration>
配置 logstash
這裡我們只需要在加入以下的配置即可:
input {
beats {
port => 5044
}
}
此處的埠需要和 Filebeat
中配置的埠一致。
好了,所有的配置都已經完成,這裡就不再重複 kibana 和 elasticsearch 的配置了,如有需要,請檢視 上一篇 文章。
執行效果
我們啟動其它服務並登陸 kibana 後,就可以看到以下的結果了:
檢視原始碼
關於 Filebeat
的介紹就到此結束了,關於 logstash 的更多高階功能將在後續文章中一一介紹。
如果你想檢視原始碼,請點這裡。