Configuration
logstash 管道中指令的範圍是什麼?
我正在設置一個通用的 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 {...}
andoutput {...}
?
據我了解它的工作方式,配置範圍是全域的,給定部分(
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
以檢查類型/主機/文件/等。以確保給定部分僅適用於某些事件。這也允許一些額外的東西。
inactive
通過將文件移動到子文件夾並重新啟動 LS來快速啟動/停用部分;它不會遞歸載入配置文件- 在帶外處理新的日誌類型,然後將新的配置文件複製到目錄並重新啟動 LS