Docker

與自定義欄位的子字元串匹配的 Logstash 問題

  • June 10, 2016

我有以下 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" ]
   }
 }

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