我已经用grafana/loki-stack
安装了Grafana、Loki、Promtail和Prometheus。
我也设置了Nginx和Nginx掌舵图表。
Promtail正在将原木摄入Loki中,但我想定制我的原木外观。具体来说,我想删除日志的一部分,因为它在尝试使用logfmt
或json
(分别为Error: LogfmtParserErr
和Error: JsonParserErr
(解析日志时会产生错误。
日志如下所示:
2022-02-21T13:41:53.155640208Z stdout F timestamp=2022-02-21T13:41:53+00:00 http_request_method=POST http_response_status_code=200 http_response_time=0.001 http_version=HTTP/2.0 http_request_body_bytes=0 http_request_bytes=63
我想删除上面写着stdout F
的部分,这样日志就会看起来像这样:
2022-02-21T13:41:53.155640208Z timestamp=2022-02-21T13:41:53+00:00 http_request_method=POST http_response_status_code=200 http_response_time=0.001 http_version=HTTP/2.0 http_request_body_bytes=0 http_request_bytes=63
我已经发现,在摄入方面,这可能是Promtail的问题,但是否也可以在Loki中进行LogQL查询来替换该字符串?如何为想要的行为设置Promtail配置?
根据文档,更好的方法是启用cri管道阶段,而不是docker阶段。假设您正在从最近使用CRI的kubernetes安装中获取日志。
https://grafana.com/docs/loki/latest/clients/promtail/configuration/#cri
Promtail应该配置为用replace
阶段替换字符串。
下面是一个示例配置,它删除了来自命名空间ingress的所有日志的stdout F
部分。
promtail:
enabled: true
pipelineStages:
- docker: {}
- match:
selector: '{namespace="ingress"}'
stages:
- replace:
expression: "(stdout F)"
replace: ""
具体来说,此示例适用于grafana/loki-stack
图表。