У меня есть следующая настройка 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" ]
}
}