Logstash Добавить поле из фильтра Грок - PullRequest
0 голосов
/ 19 декабря 2018

Можно ли сопоставить сообщение новому полю в logstash, используя grok и mutate?

Пример журнала:

"<30>Dec 19 11:37:56 7f87c507df2a[20103]: [INFO] 2018-12-19 16:37:56 _internal (MainThread): 192.168.0.6 - - [19/Dec/2018 16:37:56] \"\u001b[37mGET / HTTP/1.1\u001b[0m\" 200 -\r"

Я пытаюсь создать новое значение ключа, в котором я сопоставляю container_id с 7f87c507df2a.

filter {
  grok {
    match => [ "message", "%{SYSLOG5424PRI}%{NONNEGINT:ver} +(?:%{TIMESTAMP_ISO8601:ts}|-) +(?:%{HOSTNAME:service}|-) +(?:%{NOTSPACE:containerName}|-) +(?:%{NOTSPACE:proc}|-) +(?:%{WORD:msgid}|-) +(?:%{SYSLOG5424SD:sd}|-|) +%{GREEDYDATA:msg}" ]
  }
  mutate {
    add_field => { "container_id" => "%{containerName}"}
  }
}

Результирующий лог-файл рендерит это, где значение containerName не ссылается на grok, это просто строковый литерал:

"container_id": "%{containerName}" 

Я пытаюсь получитьconf create:

"container_id": "7f87c507df2a"

Очевидно, что значение containerName не связано с grok.Возможно ли то, что я хочу сделать?

1 Ответ

0 голосов
/ 19 декабря 2018

Как объяснено в комментариях, мой шаблон grok был неверным.Для любого, кто может побродить по этому посту, которому нужна помощь с grok, зайдите сюда , чтобы сделать построение вашего шаблона менее трудоемким.

Вот рабочий снимок:

filter {
  grok {
    match => [ "message", "\A%{SYSLOG5424PRI}%{SYSLOGTIMESTAMP}%{SPACE}%{BASE16NUM:docker_id}%{SYSLOG5424SD}%{GREEDYDATA:python_log_message}" ]
    add_field => { "container_id" => "%{docker_id}" }    
  }  
}
...