2020-08-21 19:55:44-[audit]-INFO[http-nio-8001-exec-10]BeetlsqlDebugInterceptor.println(20) |
┏━━━━━ Debug [conclusionOperator.selectConclusionOperator] ━━━
┣ SQL: select id,create_time,update_time from conclusion_operator where id=?
┣ PARAMETERS: [751]
┣ POSITION: org.aaaa.audit.controller.MailController.getElecMail(MailController.java:584)
┣ TIME: 3ms
┣ RESULT: [2]
┗━━━━━ Debug [conclusionOperator.selectConclusionOperator] ━━━
这8行实际上是一个日志事件,如何配置Promtail以将此行作为一个日志事件报废?更喜欢您的pipeline_stages!非常感谢!
答案 0 :(得分:0)
如果您使用Logback作为日志记录框架,请考虑切换到直接写入Loki的附加程序:https://github.com/loki4j/loki-logback-appender(披露:我是它的作者)。
与Promtail不同,它与原始Logback的日志事件一起使用,不需要解析任何内容。因此,多行字符串,自定义标签等都没有问题。
答案 1 :(得分:0)
使用 Promtail <= 2.1 时不可能。您要么使用像@nehaev 这样直接发布到 loki 的框架,要么必须升级到 Loki 2.2
Loki < 2.2 的解决方法是在 json 或 logfmt 中编码您的多行日志语句(最好是后者,因为它在不解析的情况下可读性更好)。在这些编码中,新行由 \n
转义,对于 Promtail,它仍然是一行。
然后你会有一个像
这样的日志行time="2020-08-21 19:55:44" msg="line1\nline2\nline3" level=INFO logger=audit ...
然后您可以使用以下查询找到并解析它
{app="someApp"} |= "..." | logfmt
Grafand 将解析日志行中的所有字段,如 level=INFO
另外它将消息转义为
line1
line2
line3
这种方法的好处是您可以添加元信息,例如关联 ID、交易 ID、租户/客户 ID,这些信息很容易找到,但仍可被 Grafana 解析。