问题描述
我的应用程序的服务是通过 docker-compose 部署的。目前,我还在同一个 docker-compose 网络中部署了 Grafana、Loki 和 Promtail。
按照入门指南,收集并显示来自 /var/log
的日志文件和配置
- job_name: system
entry_parser: raw
static_configs:
- targets:
- localhost
labels:
job: varlogs
__path__: /var/log/*log
工作正常。
但是,我的后端将 (nestJS) 记录到存储在 docker 卷中的日志文件中。 示例日志条目:
{"message":"Mapped {/api/drink,POST} route","context":"RouterExplorer","level":"info","timestamp":"2021-03-23T17:08:16.334Z"}
日志的路径是
/var/lib/docker/volumes/my_volume/_data/general.log
当我将以下配置添加到 Promtail 时
- job_name: backend
pipeline_stages:
- json:
expressions:
level: level
message: message
timestamp: timestamp
context: context
static_configs:
- targets:
- localhost
labels:
job: backend
__path__: /var/lib/docker/volumes/my_volume/_data/general.log
并在 Grafana 中使用查询 {job="backend"}
,不显示任何内容。
此外,promtail 容器的日志没有给出任何信息。
我错过了什么?
先谢谢你!
解决方法
在您的管道阶段,您需要存储提取的值:
pipeline_stages:
- json:
expressions:
level: level
message: message
timestamp: timestamp
context: context
- timestamp
source: timestamp
- labels
level:
context:
- output
source: message
这将设置时间戳,标签 context
和 level
以及 message
将是日志行。
文档可以在 here