filebeat學習&理解

注:本篇基於filebeat7.5.2

 

filebeat是什麼?

       Filebeat是用於轉發和集中日誌數據的輕量級傳送程序。作爲服務器上的代理安裝,Filebeat監視您指定的日誌文件或位置,收集日誌事件,並將它們轉發到Elasticsearch或 Logstash等進行索引。

 

filebeat工作方式

      Filebeat的工作方式如下:啓動Filebeat時,它將啓動一個或多個輸入,這些輸入將在爲日誌數據指定的位置中查找。對於Filebeat所找到的每個日誌,Filebeat都會啓動harvester。每個harvester都讀取單個日誌以獲取新內容,並將新日誌數據發送到libbeatlibbeat將聚集事件,並將聚集的數據發送到爲Filebeat配置的輸出。

      input:負責管理harvester並查找所有可讀取的資源。Input包括多種類型。Log,syslog,kafka,redis,tcp,s3 等等、

      Tips: Filebeat保留每個文件的狀態,並經常將狀態刷新到註冊表文件中的磁盤。該狀態用於記住harvester正在讀取的最後一個偏移量。

 

filebeat常見命令&參數

export 將配置或索引模板導出到stdout。

help 顯示任何命令的幫助。

keystore 管理祕密密鑰庫。

modules 管理配置的模塊。

run 運行Filebeat。如果在未指定命令的情況下啓動Filebeat,則默認使用此命令。

setup 設置初始環境,包括索引模板,Kibana儀表板和機器學習作業

test 測試配置。

version 顯示有關當前版本的信息

-E  覆蓋配置文件中的配置。   

filebeat -E  "output.elasticsearch.hosts=["http://myhost:9200"]"

-M 覆蓋filebeat模塊的配置

filebeat -modules=nginx -M "nginx.access.var.paths=[/var/log/nginx/access.log*]"

-c  c 指定配置文件的路徑。

-e 記錄到stderr並禁用syslog /文件輸出。

filebeat test config -c filebeat.yml  測試配置文件正確與否

 

filebeat輸入

filebeat輸入最主要的就是區分什麼樣的數據作爲一行數據進行接下來的操作。

filebeat  modules list 查看啓停的模塊。  

filebeat  modules disable/enable  mysql  關閉或啓動模塊。對應 modules.d/xxx.yml會被啓用

inputs配置輸入,指定要輸入的文件類型以及文件的路徑,harvest會去收集

在處理文件行時,可能多行文件是一個日誌,這時需要配置multiline特殊處理

multiline.pattern: '^\['

multiline.negate: true

multiline.match: after

Negatematch 設置的是行組合方式

Tips: 自定義設置,需要配置相關日誌文件的解析方式,如何識別數據成爲一個doc

 

filebeat輸出

如下的配置可以收集paths 下的文件,並以message爲字段傳給es

filebeat.inputs:

- type: log

  enabled: true

#指定一個要讀取數據的文件路徑

  paths:

    - /var/log/nginx/*.log      

setup.kibana:

  host: “127.0.0.1:5601"

output.elasticsearch:

  hosts: [“127.0.0.1:9200"]

processors:  #處理器、用來過濾要導出的數據

  - add_host_metadata: ~

 

nohup filebeat &    後臺執行

一會去檢查es的索引存在, curl  -XGET  localhost:9200/filbeat*’ 有輸出

 

filebeat輸出通過ingest進行拆分字段

將下面的管道在es中建立。

PUT  _ingest/pipeline/pipeline-nginx-access
{
  "description" : "nginx access log",
  "processors": [
    {
      "grok": {
        "field": "message",
        "patterns": ["%{IP:clientip} - %{DATA:userid} %{DATA:username} - %{DATA:location} %{DATA:sex} at %{DATA:timestamp} \"%{DATA:useragent}\" end"]
      }
    },{
      "geoip":{
        "field": "clientip",
        "target_field": "geoip"
      }
    },{
      "user_agent": {
        "field": "useragent",
        "target_field": "useragent"
      }
    },{
      "date": {
        "field": "timestamp",
        "formats": ["yyyy-MM-dd HH:mm:ss"],
        "target_field": "timestamp"
      }
    }
  ]
}

在/var/log/nginx/access.log中替換成如下內容

10.95.110.123 - 82304918473 zhangsan - beijing male at 2020-03-14 14:41:58 "TimeHut/5.3.3 (iPhone8,2; iOS 9.3.5; Scale/3.00) (SOURCE/App Store, VERSION_CODE/533)" end
10.95.110.123 - 82304918474 zhangsan - beijing male at 2020-03-14 14:41:58 "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36" end

修改filebeat.yml配置文件爲

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log
  fields:
    type: "access-log"
setup.template.name: "ignore-this"
setup.template.pattern: "ignore-this"
output.elasticsearch:
  hosts: ["localhost:9200"]
  indices:
    - index: "filebeat-nginx-access-%{+yyy.MM.dd}"
      when.equals:
        fields.type: "access-log"
  pipelines:
    - pipeline: "pipeline-nginx-access"
      when.equals:
        fields.type: "access-log"

然後   nohup  filebeat  &    後臺運行

去logs 下面查 filebeat的日誌。

 

參考:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章