【发布时间】:2023-01-17 04:08:57
【问题描述】:
设置: 我正在使用 python-logging-loki 库手动检测我的日志代码。我有一个正在运行的 Loki 实例(未使用 promtail,我直接推送到 loki)。 在 Grafana 上,我启动并运行了 Jaeger 和 Loki 作为数据源。对于 Traces,我正在使用 opentelemetry python 库(也手动检测代码)。
我正在尝试使用 Opentelemetry Logging Instrumentation 库在将跟踪数据发送到 Loki 之前自动将跟踪数据注入到我的日志中。 我的问题是,当我运行我的测试应用程序时,我可以看到在我的控制台上打印出注入的数据,但在 grafana 上,注入的数据没有显示出来。
我为派生字段配置了 Loki,以使用正则表达式提取 trace_id,并且内部链接指向 jaeger。
# auto inject trace data into logs (Opentelemetry Logging Instrumentation library)
LoggingInstrumentor().instrument(set_logging_format=True, log_level=logging.DEBUG)
# manual instrumentation of traces
with tracer.start_as_current_span(name="random-name") as span:
# using python-logging-loki library to construct the logs
logger.info(msg="testing loki logger", extra={"tags": {"product_number": "ABCD123"}})
在 Grafana 上,尽管在 Grafana 上的 Loki 中设置了派生字段值,但日志已成功导出但跟踪数据未出现
然而,在我的控制台上,当我运行我的测试应用程序时,我可以看到日志消息的打印输出,其中注入了跟踪数据
2022-04-08 15:17:15,476 DEBUG [urllib3.connectionpool] [connectionpool.py:228] [trace_id=e4fb8555337a28cc639955a36d994ed1 span_id=86425d0bc3cc088c resource.service.name=] - Starting new HTTP connection (1): localhost:3100
2022-04-08 15:17:15,498 DEBUG [urllib3.connectionpool] [connectionpool.py:456] [trace_id=e4fb8555337a28cc639955a36d994ed1 span_id=86425d0bc3cc088c resource.service.name=] - http://localhost:3100 "POST /loki/api/v1/push HTTP/1.1" 204 0
2022-04-08 15:17:15,469 INFO [otlp_handler] [main.py:39] [trace_id=e4fb8555337a28cc639955a36d994ed1 span_id=86425d0bc3cc088c resource.service.name=] - testing loki logger
我不确定我在这里做错了什么! 只有当我明确地将 trace_id 写入日志消息时,grafana 才会导出这些值。所以如果我这样写日志:
logger.info(msg="[ trace_id=d4ea420b4fa4e20e7fbb579c80fa4e88 span_id=856ca68d4b52bbd4 ] - testing loki logger", extra={"tags": {"product_number": "ABCD123"}})
然后在 grafana loki 上,我可以看到记录中的派生字段并且它正确链接到 jaeger 上的跟踪
我究竟做错了什么? .. 这是 otel 使用此日志记录工具的正确方法吗? ..
【问题讨论】:
-
你有没有想过这个?我有一个类似的问题。
标签: logging open-telemetry grafana-loki distributed-tracing loki