Синтаксический анализ сообщений об ошибках из журнала nginx в stackdriver с помощью google-fluend

#nginx #google-cloud-platform #fluentd #stackdriver

# #nginx #google-облачная платформа #fluentd #stackdriver

Вопрос:

Мы пытаемся настроить оповещение, анализируя ошибку nginx, и нам нужны только сообщения с уровнем [ошибка]. ( [error] 27720#27720: *29765923 access forbidden by rule, client: blalbablab ). Основная цель — не отправлять в gcp журналы stackdriver, которые нам не нужны (уменьшить использование пространства для хранения журналов). Итак, я создал google-fluend с потоковой передачей журналов, но я застрял с анализом сообщений об ошибках. Вот моя конфигурация.

 <source>
  @type tail
  tag nginx-error
  path /var/log/nginx/error.log
  format multiline
  format_firstline /^d{4}/d{2}/d{2} d{2}:d{2}:d{2} [w ] (?<pid>d ).(?<tid>d ): /
  format1 /^(?<time>d{4}/d{2}/d{2} d{2}:d{2}:d{2}) [(?<log_level>w )] (?<pid>d ).(?<tid>d ): (?<message>$      multiline_flush_interval 3s
  #<parse>
    #@type regexp
    #expression (s[error ])
    #time_key name
    #types id:integer
  #</parse>
</source>
 

Правильно ли это использовать parse с правилами регулярных выражений в этом случае? Пожалуйста, помогите мне с этим.

Комментарии:

1. Каков ваш полный вариант использования? Вы продолжаете обрабатывать журналы или просто передаете их какой-либо выходной цели? Если целью является просто передача [error] журналов, вы можете просто использовать grep filter для этого. Но, как вы упомянули о синтаксическом анализе, похоже, что это еще не все. Кроме того, пожалуйста, добавьте пару полных примеров журналов.

Ответ №1:

После некоторого тестирования я получил рабочую версию.

  <source>
  @type tail
  format /^(?<message>.*[error].*)$/
  path /var/log/nginx/error.log
  pos_file /var/lib/google-fluentd/pos/nginx-error.pos
  read_from_head true
  tag nginx-error
</source>