1. 程式人生 > >使用 Filebeat 收集日誌

使用 Filebeat 收集日誌

上一篇文章介紹了使用 kafka + logstash + elasticsearch 進行日誌收集並展示,在本篇文章中,將介紹使用 filebeat 代替 kafka 進行日誌收集。

安裝 Filebeat

此處只介紹 Windows 下面的安裝,至於其他系統, 請參考: 官方文件

下載並解壓後,有兩種方式執行,一種是註冊為 Windows 服務,另一種是直接通過命令列執行;下面分別介紹兩種方式。

註冊為 Windows 服務

前提:系統必須有 PowerShell,因為官方安裝包中提供的指令碼只能在 PowerShell 中執行,若是 win10 系統,可忽略,因為它已經自帶了 PowerShell

, 否則請下載 PowerShell 並安裝。

  1. 下載安裝包 點我下載.
  2. 解壓到以下目錄: C:\Program Files
  3. 重新命名 filebeat-<version>-windowsFilebeat
  4. 管理員 身份執行 PowerShell
  5. 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 的更多高階功能將在後續文章中一一介紹。

如果你想檢視原始碼,請點這裡