在我们的Symfony2应用程序中,我们查询外部API以获取我们提供的特定服务。这个API(我们称之为Acme API
)有时会抛出我们通过Monolog和Gelf转发给Graylog2的错误消息,以跟踪中断。使用error
$logger->err()
级别记录每个错误。
消息显示在普通消息池中,但收集这些API错误消息的自定义流根本不显示任何消息。
所以我的主要问题是:为什么Graylog拒绝在流中显示消息,我们可以做些什么来改变这种行为?
配置
目前共有35个流(这是因为我们的服务器上有很多应用程序)。
给Monolog的每条消息都有相同的模式:
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.*
,但这些都不起作用)
monolog配置如下:
// 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
// ...
答案 0 :(得分:0)
Graylog2本身存在问题,在将Graylog更新到最新版本并重新创建流后,流开始正常工作。