#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>