Configuration

logstash 管道中指令的範圍是什麼?

  • August 11, 2015

我正在設置一個通用的 Elasticsearch-Logstash-Kibana 堆棧以部署到我的一些客戶。我正在嘗試對一些管道進行模板化,以便我們只需要根據每個客戶端的需要部署配置/管道。

Logstash 將input{...}, filter{...}, 和output{...}稱為部分,將它們的內容稱為外掛,將它們的聚合稱為處理管道,每個管道包含的文件作為配置文件

考慮到這一點,是否有部分和管道的範圍?也就是說,特定配置文件中定義的部分是否由該配置文件中的管道使用?

如果我有 2 個配置文件和 2 個管道:

# my_apache_pipeline.config
input {
   tcp {
      port 5000
   }
}
filter {
   if [application == "httpd"] {
      ...
   }
}
output {
   elasticsearch {
      ...
   }
}

#my_nginx_pipeline.config
input {
   tcp {
       codec => "json"
       port => 6000
   }
}
filter {
    if [application == "nginx"] {
        ...
    }
}
output {
   elasticsearch {
      ...
   }
}        

上面的這兩個配置文件是否創建與下面的單個配置文件相同的 2 個管道?

#my_merged_pipeline.config
input {
   tcp {
       codec => "json"
       port => 6000
   }
   tcp {
      port 5000
   }
}
filter {
    if [application == "nginx"] {
        ...
    }
    if [application == "httpd"] {
        ...
    }
}
output {
    elasticsearch {
      ...
   }
}

也就是說,一組外掛/部分在哪個配置文件中獲取管道是否重要?還是input {...}在特定配置文件中定義的僅適用於該配置文件中的filter {...}and output {...}

據我了解它的工作方式,配置範圍是全域的,給定部分(input, filter, output)的內容基本上都在“最終”配置中連接在一起。

所以在你的例子中,是的,上面的兩個管道將等同於下面的簡化配置,唯一的區別是你有兩個 elasticsearch輸出,而不僅僅是一個。我不認為 LS 聰明到知道他們是一樣的。

我的建議是根據部分、函式和日誌類型創建命名良好的文件:

#inputs
00-input-lumberjack.conf
01-input-syslog.conf
02-input-syslog_vmware.conf

#filters
11-filter-haproxy.conf
12-filter-lighttpd.conf
13-filter-syslog.conf
14-filter-proftpd.conf
15-filter-httpd.conf
17-filter-cron.conf
18-filter-yum.conf
88-filter-checksum.conf
89-filter-cleanup.conf

#outputs
97-output-kafka.conf
98-output-redis.conf
99-output-elasticsearch.conf

然後,您將使用-f指向包含上述所有文件的文件夾的開關執行 LS。

這將確保它們以特定順序載入並且您沒有重複。

在我的例子中,過濾器和輸出用 ’s 包圍,if以檢查類型/主機/文件/等。以確保給定部分僅適用於某些事件。

這也允許一些額外的東西。

  1. inactive通過將文件移動到子文件夾並重新啟動 LS來快速啟動/停用部分;它不會遞歸載入配置文件
  2. 在帶外處理新的日誌類型,然後將新的配置文件複製到目錄並重新啟動 LS

引用自:https://serverfault.com/questions/713279