Docker
與自定義欄位的子字元串匹配的 Logstash 問題
我有以下 Logstash 設置。
日誌通過logspout-logstash適配器從 Logspout 管道傳輸到 Logstash,該適配器在日誌消息中添加了一些欄位,即
docker.image
欄位。我能夠攝取日誌,但無法解析它們。我想根據 Docker 圖像欄位製作一些過濾器,下面我試圖解析和匹配
nginx
完整 Docker 圖像中的一部分,類似於dockerhubuser/nginx:tag
.我的配置有問題,因為標籤看起來不像正在創建,並且消息欄位看起來也沒有被解析。
到目前為止,這是我的配置中的內容:
input { # Logspout UDP input udp { port => 5000 type => logspout codec => json } } filter { # Nginx access logs if [docker.image] =~ /nginx/ { grok { match => [ "message", "%{IPORHOST:clientip} - - \[%{HTTPDATE:timestamp}\] %{QS:request} %{INT:status} %{INT:body_bytes_sent} %{QS:http_referer} %{QS:agent}" ] add_tag => [ "nginx" ] } } }
正則表達式不匹配嗎?有沒有辦法檢查日誌是否擊中我的過濾器?
我找到了解決方案。要訪問 logstash 配置中的嵌套欄位,我必須使用
[docker][image]
. 所以固定配置看起來像這樣:if [docker][image] =~ /nginx/ { grok { match => [ "message", "%{IPORHOST:clientip} - - \[%{HTTPDATE:timestamp}\] %{QS:request} %{INT:status} %{INT:body_bytes_sent} %{QS:http_referer} %{QS:agent}" ] add_tag => [ "nginx" ] } }