我在
promtail-config.yaml
文件中使用此代码部分来过滤包含单词 INFO
的日志行。
pipeline_stages:
- match:
selector: '{env="myenv"}'
stages:
- json:
expressions:
msg: log
- match:
selector: '{status="info"} !~ ".*INFO.*"'
action: drop
- output:
source: msg
但问题是,当我使用这种方法来过滤日志时,它会导致删除
stack trace
日志中的 INFO
,因为 stack trace
由几行单独的行组成,Promtail 将其视为单独的日志行,并且该日志该行在过滤过程中被删除,因为该行中不包含单词 INFO
。
进行此过滤过程时如何保留堆栈跟踪?
任何帮助将不胜感激。
我通过在管道阶段使用
multiline
解决了这个问题。
pipeline_stages:
- multiline:
firstline: '^\[\d{4}-\d{2}-\d{2} \d{1,2}:\d{2}:\d{2}\]'
max_wait_time: 3s
这使得整个堆栈跟踪成为一行,从而解决了问题。
有关更多详细信息,您可以参考grafana文档。 此外,我强烈鼓励每个对如何正确配置
promtail
有问题的人参考 有关 promtail 查询的 grafana 文档。