通过 Helm Chart 部署在本地 minikube 集群上的 Promtail 不应用 value.yaml 文件的配置部分中定义的自定义管道阶段。
我有一个简单的 loki 堆栈设置(loki + promtail + grafana),用于监控部署在本地 minikube 集群上。我通过每个组件的独立 helm 图表(loki + promtail + grafana)而不是通过专用的 locki-stack 图表来做到这一点,但我认为这对我的问题并不重要。
我有几个 .NET API 在同一个 minikube 集群中的不同 pod 中运行,这些 API 通过 Serilog 实现结构化日志记录,我想使用 Promtail 进行抓取,存储在 Loki 中,并在 Grafana 中进行可视化。以下是通过运行
kubectl logs <pod>
..net logs 在容器级别查看我的日志的方式
基本设置正在运行,Promtail 成功获取了我的日志,我可以在 Grafana grafana 中的日志 中看到它们。
这里的问题是 Promtail 没有正确解析日志,并且它没有从我的结构化日志格式(应用程序名称、环境等)中获取任何文件,正如您从 Grafana 屏幕截图中看到的那样。
我尝试通过覆盖 Promtail 图表的values.yaml 文件中的默认配置部分来添加一些自定义管道阶段来解析日志,但由于某种原因,我的尝试都没有改变任何内容,因为我的 json 阶段似乎没有被选中或由 Promtail 应用。这是我的 promtail 配置 yaml 文件:
config:
snippets:
pipelineStages:
- json:
expressions:
log:
streamTest: stream
timeTest: time
- json:
expressions:
Environment:
source: log
正如您从grafana屏幕截图中看到的那样,甚至连 streamTest 或 timeTest 字段都没有被应用,尽管它们对我来说似乎是最容易解析的,因为流和时间字段甚至没有嵌套在发送的初始 json 对象中到格拉法纳。我已经在 pipelineStages: 部分测试了多个阶段,但似乎没有一个被应用,还尝试在 -json 阶段之前添加一个 -cri: 阶段,但它也没有任何效果。
我能够通过 Grafana 中的 LogQL 查询解析日志来获得我需要的结果:通过 LogQl 解析日志,但我真的很想学习和理解我在 Promtail 配置中做错了什么以及为什么我的自定义管道阶段不会被应用。 我很感谢所有的帮助和提示,因为我刚刚开始探索 Grafana 产品,而且我几乎是一个新手:)
您在 GUI 中的“Fields”下看到的实际上是管道配置中称为标签的东西(这是它自己的阶段)。您还需要 cri 阶段。我相信以下内容会满足您的要求:
config:
snippets:
pipelineStages:
- cri: {}
- json:
expressions:
log:
streamTest: stream
timeTest: time
- json:
expressions:
Environment:
source: log
- labels:
streamTest:
timeTest:
Environment: