第十三章:故障排查
掌握 Loki 常见问题的诊断和解决方法。
最后更新: 2024-01-27
页面目录
Loki 故障排查
本章节介绍 Loki 常见问题的诊断和解决方法。
常用诊断命令
检查服务状态
# 检查 Loki API
curl http://localhost:3100/ready
# 检查配置
curl http://localhost:3100/config
# 查看版本
curl http://localhost:3100/loki/api/v1/version
# 查看集群状态
curl http://localhost:3100/cluster/memberlist
检查日志
# Docker
docker logs loki
# Systemd
journalctl -u loki -f
# Kubernetes
kubectl logs -n loki -l app=loki -f
连接问题
Promtail 无法连接 Loki
症状:
level=error msg="send error" status=500
排查:
# 1. 检查 Loki 是否运行
curl http://loki:3100/ready
# 2. 检查网络连通性
nc -zv loki 3100
# 3. 检查防火墙
firewall-cmd --list-ports
解决方案:
# Promtail 配置
client:
url: http://loki:3100/loki/api/v1/push
timeout: 30s
backoff_config:
min_period: 500ms
max_period: 5m
max_retries: 10
认证失败
症状:
HTTP 401 Unauthorized
排查:
# 检查认证配置
curl -u admin:password http://loki:3100/ready
# 检查用户文件
cat /etc/loki/users.txt
解决方案:
# 启用认证
auth_enabled: true
# 或禁用认证(测试环境)
auth_enabled: false
存储问题
无法写入存储
症状:
level=error msg="failed to flush chunks" err="store put chunk"
排查:
# 1. 检查存储配置
curl http://loki:3100/config | grep -A 10 storage
# 2. 测试存储连接
aws s3 ls s3://loki-bucket/
# 3. 检查权限
aws s3api get-bucket-policy --bucket loki-bucket
解决方案:
storage_config:
aws:
bucketnames: loki-chunks
region: us-east-1
access_key_id: ${AWS_ACCESS_KEY_ID}
secret_access_key: ${AWS_SECRET_ACCESS_KEY}
磁盘空间不足
症状:
level=error msg="failed to write: no space left on device"
排查:
# 检查磁盘空间
df -h
# 检查大文件
du -sh /data/loki/*
解决方案:
# 清理旧数据
kubectl exec -n loki loki-compactor-0 -- \
rm -rf /var/loki/boltdb-shipper/*
# 或增加存储
kubectl patch pvc -n loki data-loki-0 \
--patch '{"spec":{"resources":{"requests":{"storage":"100Gi"}}}}'
查询问题
查询超时
症状:
timeout exceeded (500ms)
排查:
# 检查查询延迟
curl -G "http://loki:3100/loki/api/v1/query_range" \
--data-urlencode 'query={job="nginx"}' \
--data-urlencode 'limit=10'
解决方案:
# 增加超时时间
limits_config:
query_timeout: 300s
querier:
query_timeout: 300s
engine:
timeout: 300s
慢查询
排查:
# 启用查询日志
loki -logql.analyze=true
# 查看慢查询
curl http://loki:3100/query_engine
解决方案:
# 优化查询
limits_config:
max_entries_limit_per_query: 5000
max_query_parallelism: 32
性能问题
Ingester 内存高
症状:
level=warn msg="memory usage too high"
排查:
# 查看内存使用
curl http://loki:3100/ingester/memory
解决方案:
ingester:
chunk_target_size: 1048576 # 减小
max_chunk_age: 30m # 减少保留时间
chunk_retain_period: 30s
查询队列满
症状:
level=warn msg="query queue full"
排查:
# 查看队列状态
curl http://loki:3100/query_scheduler/queue
解决方案:
query_scheduler:
max_outstanding_per_tenant: 4096
frontend:
max_outstanding_per_tenant: 4096
数据问题
日志丢失
排查:
# 1. 检查 WAL
ls -la /var/loki/wal/
# 2. 检查 Promtail 位置文件
cat /var/lib/promtail/positions.yaml
解决方案:
# 启用 WAL
ingester:
wal:
enabled: true
dir: /var/loki/wal
flush_on_shutdown: true
重复日志
排查:
# 检查 Promtail 位置
cat /var/lib/promtail/positions.yaml
# 查看日志偏移量
grep -A5 "nginx" /var/lib/promtail/positions.yaml
解决方案:
# 重置位置文件
rm /var/lib/promtail/positions.yaml
# 或删除特定文件条目
集群问题
Memberlist 故障
症状:
level=error msg="failed to join memberlist"
排查:
# 查看 memberlist 状态
curl http://loki:3100/cluster/memberlist
解决方案:
memberlist:
join_members:
- loki-0.loki-headless:7946
- loki-1.loki-headless:7946
- loki-2.loki-headless:7946
分片不均衡
排查:
# 查看 ingester 状态
curl http://loki:3100/ingester/ring
解决方案:
# 重置不均衡的 ingester
kubectl exec -n loki loki-ingester-0 -- \
ingester-utility -actor=shutdown
日志分析
启用调试日志
# 命令行启用
loki -log.level=debug
# 配置文件
log_level: debug
日志格式
log_format: json
log_level: info
常用调试 API
| API | 说明 |
|---|---|
/ready |
健康检查 |
/config |
查看配置 |
/metrics |
Prometheus 指标 |
/ingester/ring |
Ingestion 状态 |
/cluster/memberlist |
Memberlist 状态 |
/query_scheduler/queue |
查询队列 |
获取帮助
社区支持
- GitHub Issues:https://github.com/grafana/loki/issues
- Grafana Community:https://community.grafana.com/
- Slack:#loki channel
日志级别
| 级别 | 说明 |
|---|---|
debug |
详细调试信息 |
info |
一般信息 |
warn |
警告信息 |
error |
错误信息 |
下一步
恭喜你完成了 Loki 权威教程的所有章节!
👉 返回目录