В нашем приложении Symfony2 мы запрашиваем внешний API для определенной услуги, которую мы предоставляем. Этот API (назовем его Acme API
) иногда выдает сообщения об ошибках, которые мы отправляем Graylog2 через Monolog и Gelf для отслеживания сбоев. Каждая ошибка регистрируется на уровне error
с $logger->err()
.Graylog2, не отображающий сообщений в определенном потоке
Сообщения отображаются в пуле обычных сообщений, но пользовательский поток, который собирает эти сообщения об ошибках API, вообще не показывает никакого сообщения.
Итак, мой главный вопрос: почему Graylog отказывается показывать сообщения в потоке и что мы можем сделать, чтобы изменить это поведение?
Конфигурация
Там в общей сложности 35 потоков в данный момент (это потому, что у нас есть куча приложений на наших серверах).
Каждое сообщение, которое дается Монолог имеет ту же закономерность:
Acme API Error on "{user action}": {error description}. Additional information: "{more information provided from the API}" on server "{web server name}" and domain "{domain}" for user "{session ID}"
Правилами потока Graylog заключаются в следующем:
Host (regex): ^((?!mycompany-staging).)*$ // Needed to show only logs from the live servers
Facility: app
Full Message (regex): Acme API.*
(Мы также попытались установить Full Message regex
в .*Acme API.*
и Acme API Error.*
, но ни одна из них не была обработана)
Конфигурация монолога следующая:
// config_prod.yml
// ...
monolog:
handlers:
main:
type: fingers_crossed
action_level: error
handler: nested
level: debug
nested:
type: stream
path: %kernel.logs_dir%/%kernel.environment%.log
level: debug
graylog:
type: gelf
level: warning
publisher:
hostname: mycompany-monitoring.mycompany.ch
// ...