用途
Grafana Loki 是一个受 Prometheus 启发的日志聚合与查询系统。本技能用于配置 Loki 进行日志聚合与分析,适合以下场景:
- 实现高性价比的日志聚合
- 为 Kubernetes 环境构建日志系统
- 将日志与 Grafana 仪表盘集成
- 使用基于标签的过滤方式查询日志
- 寻找比 ELK 更轻量的替代方案
前置条件
- Docker 或 Kubernetes
- Grafana(用于可视化)
- Promtail 或其他日志采集器
架构概览
应用日志经 Promtail 采集后推送至 Loki,再由 Grafana 进行查询与展示。
主要能力
Docker 部署
通过 docker-compose 同时启动 loki、promtail 和 grafana 三个服务,并挂载各自的配置文件与数据卷。
Loki 配置
loki-config.yaml 中可配置监听端口、存储路径、schema、索引、查询限制、数据保留策略等。示例中启用了 reject_old_samples、max_query_series、max_query_parallelism 等限制,并设置 168 小时(7 天)的保留期。
Promtail 配置
promtail-config.yaml 支持采集系统日志、Docker 容器日志以及应用日志。可通过 pipeline_stages 对日志进行 JSON 解析、正则提取、标签添加、时间戳修改等处理。
Kubernetes 部署
可使用 Helm 安装 loki-stack,并启用 grafana 与 promtail。Promtail 以 DaemonSet 形式部署,挂载 /var/log 与 /var/lib/docker/containers 等路径。
LogQL 查询
支持基础查询(按标签过滤、正则匹配)、日志管道(内容过滤、JSON 解析、line_format)、指标查询(count_over_time、rate、sum by、topk)以及聚合(avg_over_time、quantile_over_time、错误百分比计算)。
管道阶段
Promtail 的 pipeline_stages 支持 json、regex、labels、timestamp、match、static_labels、template 等阶段,用于在采集时解析和加工日志。
Grafana 集成
可通过 provisioning 配置 Loki 数据源,并在仪表盘中添加日志面板。
记录规则与告警
支持定义 recording rules 与 alerting rules,例如按 job 统计错误率、当错误率超过阈值时触发告警。
常见问题
- 内存占用过高:减少 max_query_series,限制查询时间范围
- 日志未出现:检查 positions 文件、文件路径与标签配置
- 查询超时:增加更具体的标签过滤,缩小时间范围
- 摄入速率限制:调整 limits_config 中的 per_stream_rate_limit
最佳实践
- 使用有意义的标签,避免高基数
- 先按标签过滤,再按日志内容过滤
- 在采集时用 Promtail 解析日志
- 设置合适的保留期
- 对常用查询使用记录规则
- 大型部署实现多租户
- 监控 Loki 自身指标
- 使用 chunk 缓存提升性能
限制
- 相关指导会在真实环境中执行:应用任何操作前请确认目标、影响范围与回滚方案。
- 未经明确批准,切勿部署到生产环境。
- 本文档为纯文档导入,上游脚本与模板未随附。