Назад | Перейти на главную страницу

Ошибка Logstash при сопоставлении подстроки настраиваемого поля

У меня есть следующая настройка Logstash.

Журналы передаются в Logstash из Logspout через 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" ]
    }
  }