1
  1. 这是 som java 日志
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 !非常感谢!

4

2 回答 2

0

如果您使用 Logback 作为您的日志框架,请考虑切换到直接写入 Loki 的附加程序:https ://github.com/loki4j/loki-logback-appender (披露:我是它的作者)。

与 promtail 不同,它适用于原始 Logback 的日志事件,不需要解析任何内容。所以多行字符串、自定义标签等没有问题。

于 2020-11-13T11:05:43.237 回答
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 仍然可以解析。

于 2021-03-18T07:54:48.837 回答