1. 程式人生 > >ELK(實時日誌分析平臺)搭建必備基礎知識-------filebeat

ELK(實時日誌分析平臺)搭建必備基礎知識-------filebeat

預熱:基礎知識 

      Beats是elastic公司的一款輕量級資料採集產品,它包含了幾個子產品:

  • packetbeat(用於監控網路流量)、
  • filebeat(用於監聽日誌資料,可以替代logstash-input-file)、
  • topbeat(用於蒐集程序的資訊、負載、記憶體、磁碟等資料)、
  • winlogbeat(用於蒐集windows事件日誌)

      Filebeat是一個日誌檔案託運工具,在你的伺服器上安裝客戶端後,filebeat會監控日誌目錄或者指定的日誌檔案,追蹤讀取這些檔案(追蹤檔案的變化,不停的讀),並且轉發這些資訊到elasticsearch或者logstarsh中存放。 以下是filebeat的工作流程:當你開啟filebeat程式的時候,它會啟動一個或多個探測器(prospectors)去檢測你指定的日誌目錄或檔案,對於探測器找出的每一個日誌檔案,filebeat啟動收割程序(harvester),每一個收割程序讀取一個日誌檔案的新內容,併發送這些新的日誌資料到處理程式(spooler),處理程式會集合這些事件,最後filebeat會發送集合的資料到你指定的地點。

Harvester(收割機):負責讀取單個檔案內容。每個檔案會啟動一個Harvester,每個Harvester會逐行讀取各個檔案,並將檔案內容傳送到制定輸出中。Harvester負責開啟和關閉檔案,意味在Harvester執行的時候,檔案描述符處於開啟狀態,如果檔案在收集中被重新命名或者被刪除,Filebeat會繼續讀取此檔案。所以在Harvester關閉之前,磁碟不會被釋放。預設情況filebeat會保持檔案開啟的狀態,直到達到close_inactive(如果此選項開啟,filebeat會在指定時間內將不再更新的檔案控制代碼關閉,時間從harvester讀取最後一行的時間開始計時。若檔案控制代碼被關閉後,檔案發生變化,則會啟動一個新的harvester。關閉檔案控制代碼的時間不取決於檔案的修改時間,若此引數配置不當,則可能發生日誌不實時的情況,由scan_frequency引數決定,預設10s。Harvester使用內部時間戳來記錄檔案最後被收集的時間。例如:設定5m,則在Harvester讀取檔案的最後一行之後,開始倒計時5分鐘,若5分鐘內檔案無變化,則關閉檔案控制代碼。預設5m)。

Prospector(勘測者):負責管理Harvester並找到所有讀取源。

Prospector會找到/apps/logs/*目錄下的所有info.log檔案,併為每個檔案啟動一個Harvester。Prospector會檢查每個檔案,看Harvester是否已經啟動,是否需要啟動,或者檔案是否可以忽略。若Harvester關閉,只有在檔案大小發生變化的時候Prospector才會執行檢查。只能檢測本地的檔案。

Filebeat如何記錄檔案狀態:

將檔案狀態記錄在檔案中(預設在 /你的安裝路徑/filebeat-6.5.3-linux-x86_64/data/registry)。此狀態可以記住Harvester收集檔案的偏移量。若連線不上輸出裝置,如ES等,filebeat會記錄傳送前的最後一行,並再可以連線的時候繼續傳送。Filebeat在執行的時候,Prospector狀態會被記錄在記憶體中。Filebeat重啟的時候,利用registry記錄的狀態來進行重建,用來還原到重啟之前的狀態。每個Prospector會為每個找到的檔案記錄一個狀態,對於每個檔案,Filebeat儲存唯一識別符號以檢測檔案是否先前被收集。

registry內容如下:offset日誌檔案讀取偏移量,看到這些資訊你是不是大概明白了呢

[{"source":"/usr/local/logs/catalina-test.out","offset":4214960,"timestamp":"2018-12-20T20:06:26.992531352+08:00","ttl":-1,"type":"log","meta":null,"FileStateOS":{"inode":675369,"device":64769}},
{"source":"/usr/local/logs/catalina.out","offset":4215010,"timestamp":"2018-12-20T20:16:15.464056254+08:00","ttl":-1,"type":"log","meta":null,"FileStateOS":{"inode":675345,"device":64769}}]

Filebeat如何保證事件至少被輸出一次:

Filebeat之所以能保證事件至少被傳遞到配置的輸出一次,沒有資料丟失,是因為filebeat將每個事件的傳遞狀態儲存在檔案中。在未得到輸出方確認時,filebeat會嘗試一直髮送,直到得到迴應。若filebeat在傳輸過程中被關閉,則不會再關閉之前確認所有時事件。任何在filebeat關閉之前為確認的時間,都會在filebeat重啟之後重新發送。這可確保至少傳送一次,但有可能會重複。可通過設定shutdown_timeout 引數來設定關閉之前的等待事件迴應的時間(預設禁用)。

1,安裝

 下載:

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.5.3-linux-x86_64.tar.gz

解壓:

tar -zxvf filebeat-6.5.3-linux-x86_64.tar.gz

2,配置

     這裡有一個簡單的filebeat的配置檔案filebeat.yml的樣本,filebeat會使用很多預設的選項。

  如果你想使用自己的輸入配置,請一定要修改 enable: false 為 enable: true

基本配置步驟一:設定log path 

paths:
    - /usr/local/logs/*.out  #爬取/usr/local/logs下面所有的 .out檔案
    - /usr/local/*/*.out  #爬取/usr/local/下面的子資料夾的所有的 .out檔案,不包括/usr/local下面
    # 的*.out檔案

  注意:在預定義級別的子目錄中獲取所有檔案,可以使用這個配置:/var/log/*/*.log,這會找到/var/log下所有子目錄中所有的  以.log結尾的檔案。但它並不會找到/var/log資料夾下的以.log結尾的檔案。現在它還不能遞迴的在所有子目錄中獲取所有的日誌檔案。

基本配置步驟二:配置輸出

filebeat支援多種輸出,常見的有logstash,elasticsearch,kibana,kafaka。其中最常用的是到logstash做過濾與清洗,但中間層也可以新增kafaka做訊息佇列,是為了防止資訊丟失,所以放在kafaka裡面,redis 亦可

#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch:
  # Array of hosts to connect to.
  #hosts: ["localhost:9200"]

  # Optional protocol and basic auth credentials.
  #protocol: "https"
  #username: "elastic"
  #password: "changeme"

#----------------------------- Logstash output --------------------------------
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"

 如果指定輸出為logstash,則在logstash的配置檔案  logstash.conf 中需要配置

input {
  beats {
    port => 5044 # 此埠需要與 filebeat.yml 中的埠相同
  }
}

更多配置步驟:https://www.elastic.co/guide/en/beats/filebeat/current/configuring-howto-filebeat.html

3,啟動

./filebeat -c filebeat.yml -e  #指定配置檔案路徑啟動

更多filebeat操作見:https://www.elastic.co/guide/en/beats/filebeat/6.5/index.html