Z.S.K.'s Records

Grafana学习(Loki踩坑记)

grafana出品的loki日志框架完美地与kubernetes的label理念结合,相对于EFK来说更加轻量级,非常适合不需要日志聚合的场景.目前新上集群考虑都彩loki做为基础工具, 直接在grafana中展示

在这里记录下使用Loki踩过的坑, 不定期更新

LOKI启动时提示 panic: invalid page type: 11: 10

原因: 对应的index table文件已经损坏

解决: 删除相应的index文件即可解决

日志的label不对

原因: promtail中的scrape_config存在问题.

参考: https://izsk.me/2022/05/15/Loki-log-with-wrong-labels/

grafana中开启实时日志时提示Query error

原因: 官方的解释是Note that live tailing relies on two websocket connections: one between the browser and the Grafana server, and another between the Grafana server and the Loki server. If you run any reverse proxies, please configure them accordingly.

也就是说,如果在web与grafana,grafana与loki之间存在如nginx类的proxy,则需要开启websocket特性,洽洽作者的grafana是在nginx后的

解决: nginx添加websocket配置,详见

参考: https://github.com/grafana/grafana/blob/b5d8cb25e18fc73f37b3546246363464c9298684/docs/sources/features/datasources/loki.md

Loki: file size too small\nerror creating index client

解决: 删除loki的持久化目录下的boltdb-shipper-active/index_18xxx目录

参考: https://github.com/grafana/loki/issues/3219

protail: context deadline exceeded

原因: promtail无法连接loki所致

promtail cpu使用过高

原因: 由于集群中存在大量的job类pod,这会对loki的服务发现会有很大的压力,需要调整promtail的配置,查看官方的issue,后续可能会将ds由promtail转到服务端来做,promtail需要调整的配置主要为

1
2
3
4
5
target_config:
sync_period: 30s
positions:
filename: /run/promtail/positions.yaml
sync_period: 30s

将 sync_period由默认的10s换成30s

可以使用以下的命令获取到pprof文件分析性能

1
curl localhost:3100/debug/pprof/profile\?seconds\=20

参考: https://github.com/grafana/loki/issues/1315

Maximum active stream limit exceeded

原因: 同下,需要调整limit config中的max_streams_per_user, 设置为0即可

server returned HTTP status 429 Too Many Requests

原因: limit config中的参数: ingestion_burst_size 默认值太小,调整即可

参考: https://github.com/grafana/loki/issues/1923

Please verify permissions

原因: 这条其实是warn,不影响promtail的正常工作,如果调整过日志的路径的话要确认promtail挂载的路径是否正常

loki: invalid schema config

原因: loki的配置文件格式错误.

promtail: too many open files

原因: /var/log/pods下面的文件数量太多,导致超过内核参数(fs.inotify.max_user_instances)设置配置.

解决:

1
2
3
4
5
6
7
8
# 先查看当前机器设置的配置
cat /proc/sys/fs/inotify/max_user_instances
# 再查看promtail启动时watch的文件数
cat /run/promtail/positions.yaml | wc -l
# 如果这个值比max_user_instances要大,则会出现上面的错误,可以通过修改内核参数进行调整
sysctl -w fs.inotify.max_user_instances=1024
# 生效
sysctl -p

参考: https://github.com/grafana/loki/issues/1153

promtail: no such file ro directory

原因: promtail daemonset启动时会自动挂载好几个hostpath,如果docker containers的配置调整过,则需要volume跟volumemount都需要对应上.

未完待续

参考文章:

转载请注明原作者: 周淑科(https://izsk.me)

 wechat
Scan Me To Read on Phone
I know you won't do this,but what if you did?