logstash中output{}的另類寫法


日志傳輸路徑如下:
filebeat->redis->logstash->es

在filebeat配置文件中,收集日志的時候配置的有如下參數:

  fields:
    log_source: messages

表示的是會把log_source作為fields的二級字段

若是配置如下,表示的是會把log_source作為頂級字段:

  fields:
    log_source: messages
  fields_under_root: true

使用這個字段來作為區分不同應用日志的來源;

在logstash中從redis讀取后,output給es的時候,根據上述不同的字段來創建不同的應用日志索引。
常見的寫法是多使用if條件進行區分,如下所示:

  if [fields][log_source] == 'test_custom' {
    elasticsearch {
      hosts => ["http://172.17.107.187:9203", "http://172.17.107.187:9201","http://172.17.107.187:9202"]
      index => "filebeat_test_custom-%{+YYYY.MM.dd}"
      user => "elastic"
      password => "escluter123456"
    }
  }

  if [fields][log_source] == "test_user" {
    elasticsearch {
      hosts => ["http://172.17.107.187:9203","http://172.17.107.187:9201","http://172.17.107.187:9202"]
      index => "filebeat_test_user-%{+YYYY.MM.dd}"
      user => "elastic"
      password => "escluter123456"
    }
  }

這樣寫也能使用,但是考慮到假設這個區分字段比較多的話,那這得寫多少個if條件呀,所以可以使用如下的用法:
在創建索引的時候使用上這個區分用的字段,具體如下:

elasticsearch {
    hosts => ["http://172.17.107.187:9203","http://172.17.107.187:9201","http://172.17.107.187:9202"]
    index => "filebeat_%{[fields][log_source]}-%{+YYYY.MM.dd}"
    user => "elastic"
    password => "escluter123456"
}

說明:%{[fields][log_source]}表示的是獲取區分字段的值

若是頂級字段則是這樣的用法:%{[log_source]}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM