鱼弦:公众号【红尘灯塔】,CSDN博客专家、内容合伙人、新星导师、全栈领域优质创作者 、51CTO(Top红人+专家博主) 、github开源爱好者(go-zero源码二次开发、游戏后端架构 https://github.com/Peakchen)
“loki:网关故障。502”
当 Loki 添加为数据源时,Grafana 中会出现此错误,表明 Grafana 无法连接到 Loki。可能存在以下根本原因:
- 如果 Loki 使用 Docker 部署,并且 Grafana 和 Loki 不在同一节点运行,请检查防火墙以确保节点可以连接。
- 如果 Loki 与 Kubernetes 一起部署:
- 如果 Grafana 和 Loki 位于同一命名空间中,请将 Loki URL 设置为
http://$LOKI_SERVICE_NAME:$LOKI_PORT
- 否则,将 Loki URL 设置为
http://$LOKI_SERVICE_NAME.$LOKI_NAMESPACE:$LOKI_PORT
- 如果 Grafana 和 Loki 位于同一命名空间中,请将 Loki URL 设置为
“数据源已连接,但未收到标签。请验证 Loki 和 Promtail 是否配置正确。”
当 Loki 作为数据源添加时,Grafana 中可能会出现此错误,表明尽管 Grafana 已连接到 Loki,但 Loki 尚未收到来自 Promtail 的任何日志。可能存在以下根本原因之一:
- Promtail 正在运行并收集日志,但无法连接到 Loki 发送日志。检查 Promtail 的输出。
- Promtail 在 Loki 准备就绪之前就开始向 Loki 发送日志。这种情况可能发生在测试环境中,因为 Promtail 已经读取了所有日志并将其发送出去。您可以执行以下操作:
- 在 Loki 之后启动 Promtail,例如 60 秒后。
- 要强制 Promtail 重新发送日志消息,请删除位置文件(默认位置
/tmp/positions.yaml
)。
- 由于配置问题,Promtail 正在忽略目标并且没有读取任何日志。
- 可以通过打开 Promtail 中的调试日志并查找消息来检测到这
dropping target, no labels
一点ignoring target
。
- 可以通过打开 Promtail 中的调试日志并查找消息来检测到这
- Promtail 找不到您的日志文件的位置。请检查是否
scrape_configs
包含用于查找工作节点上的日志的有效路径设置。 - 您的 pod 运行时所用的标签与 Promtail 配置读取的标签不同。请检查
scrape_configs
以验证。
故障排除目标
Promtail 公开了两个网页,可用于了解其服务发现的工作原理。
服务发现页面(/service-discovery
)显示所有已发现的目标及其重新标记前后的标签以及目标被删除的原因。
目标页面(/targets
)仅显示正在主动抓取的目标及其各自的标签、文件和位置。
在 Kubernetes 上,你可以通过本地端口转发 Promtailport(9080
或者3101
使用 Helm)来访问这两个页面:
$ kubectl port-forward loki-promtail-jrfg7 9080
# Then, in a web browser, visit http://localhost:9080/service-discovery
调试输出
loki
和都promtail
支持命令行上的日志级别标志:
$ loki —log.level=debug
$ promtail -log.level=debug
无法创建目标,ioutil.ReadDir: readdirent: not a directory
Promtail 配置包含__path__
Promtail 无法找到的目录条目。
连接到 Promtail pod 进行故障排除
首先检查上面的故障排除目标部分。如果这不能帮助回答您的问题,您可以连接到 Promtail pod 进行进一步调查。
如果你在集群中将 Promtail 作为 DaemonSet 运行,则每个节点上都会有一个 Promtail pod,因此请先确定你需要调试哪个 Promtail:
$ kubectl get pods --all-namespaces -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
...
nginx-7b6fb56fb8-cw2cm 1/1 Running 0 41d 10.56.4.12 node-ckgc <none>
...
promtail-bth9q 1/1 Running 0 3h 10.56.4.217 node-ckgc <none>
该输出被截断以仅突出显示我们感兴趣的两个 pod,您可以通过标志查看-o wide
它们正在运行的 NODE。
您需要将您感兴趣的 pod 的节点(在此示例中为 NGINX)与在同一节点上运行的 Promtail 进行匹配。
要进行调试,您可以连接到 Promtail pod:
kubectl exec -it promtail-bth9q -- /bin/sh
一旦连接,请验证配置中/etc/promtail/promtail.yml
是否有您期望的内容。
还要检查/var/log/positions.yaml
(/run/promtail/positions.yaml
由 Helm 部署时或为其指定的任何值positions.file
)并确保 Promtail 正在跟踪您期望的日志。
/var/log/containers
您可以通过查看Promtail 容器日志来检查Promtail 日志。
启用 Loki 追踪
可以通过将环境变量设置为运行 Loki 的主机名和端口来使用Jaeger来跟踪 Loki 。JAEGER_AGENT_HOST
如果使用 Helm 部署,请使用以下命令:
$ helm upgrade --install loki loki/loki --set "loki.tracing.jaegerAgentHost=YOUR_JAEGER_AGENT_HOST"