SuperAPI AI 工具集

loki-logging

部署与运维

查看项目

更新于 10-15 09:00

技能介绍

用途

Grafana Loki 是一个受 Prometheus 启发的日志聚合与查询系统。本技能用于配置 Loki 进行日志聚合与分析,设置 Promtail 采集日志,编写 LogQL 查询,并与 Grafana 集成实现可视化。

适用场景包括:

  • 实现高性价比的日志聚合
  • 为 Kubernetes 环境构建日志系统
  • 将日志与 Grafana 仪表盘集成
  • 使用基于标签的过滤查询日志
  • 采用比 ELK 更轻量的替代方案

前置条件

  • Docker 或 Kubernetes
  • Grafana 用于可视化
  • Promtail 或其他日志采集器

架构概览

应用日志经 Promtail 采集后推送至 Loki,再由 Grafana 进行查询与可视化。

主要能力

Docker 部署

通过 docker-compose 同时启动 loki、promtail 和 grafana 三个服务。Loki 监听 3100 端口,Grafana 监听 3000 端口,Promtail 挂载宿主机日志目录与 Docker 容器日志目录。

Loki 配置

loki-config.yaml 中可配置:关闭认证、HTTP 监听端口、文件系统存储、schema 配置、boltdb-shipper 索引、查询限制(如拒绝过期样本、最大查询序列数、最大查询并行度)、数据保留策略等。

Promtail 配置

promtail-config.yaml 中可配置:HTTP 监听端口、positions 文件位置、Loki 推送地址,以及多种 scrape_configs,包括系统日志、Docker 容器日志(通过 docker_sd_configs 自动发现)和应用日志(带 JSON 解析管道)。

Kubernetes 部署

可使用 Helm 安装 loki-stack,或通过 DaemonSet 部署 Promtail,挂载 /var/log 和 /var/lib/docker/containers 目录。

LogQL 查询

  • 基础查询:按 job、level、namespace、container 等标签过滤,支持正则匹配
  • 日志管道:按内容过滤(|=、!=、|~)、JSON 解析、line_format 格式化
  • 指标查询:count_over_time、rate、sum by、topk 等
  • 聚合:avg_over_time、quantile_over_time、错误百分比计算

管道阶段

Promtail 管道阶段支持:JSON 解析、正则提取、从解析字段添加标签、修改时间戳、过滤日志(match + drop)、添加静态标签、模板修改日志行。

Grafana 集成

可通过 provisioning 配置 Loki 数据源,在仪表盘中添加日志类型面板,设置 showTime、showLabels、wrapLogMessage 等选项。

记录规则与告警

可定义 recording rules 预计算常用查询,以及 alerting rules 在错误率超阈值时触发告警。

常见问题

  • 内存占用过高:减少 max_query_series,限制查询时间范围
  • 日志未出现:检查 positions 文件、文件路径、标签配置
  • 查询超时:增加更具体的标签过滤,缩小时间范围
  • 摄入速率限制:提高 limits_config 中的 per_stream_rate_limit

最佳实践

  • 使用有意义的标签(避免高基数)
  • 先按标签过滤再按日志内容过滤
  • 在采集时用 Promtail 解析日志
  • 设置合理的保留周期
  • 为常用查询使用记录规则
  • 大型部署实现多租户
  • 监控 Loki 自身指标
  • 使用 chunk 缓存提升性能

相关技能

  • prometheus-grafana:指标监控
  • elk-stack:替代日志方案
  • alerting-oncall:告警管理