Files
FunctionalScaffold/docs/loki-implementation-summary.md
Roog (顾新培) 9e0ba8e74f main:删除 Grafana 仪表板配置文件
更新内容:
- 移除 `dashboard.json` 文件,清理不再需要的 Grafana 仪表板配置。
- 简化项目目录结构,删除多余的监控配置以优化维护。
2026-02-02 18:40:16 +08:00

5.7 KiB
Raw Blame History

Loki 日志收集系统集成 - 实施总结

实施完成

已成功集成 Grafana Loki 日志收集系统到 FunctionalScaffold 项目。

新增文件

1. 监控配置文件

文件 说明
monitoring/loki.yaml Loki 服务配置7天保留期10MB/s速率限制
monitoring/promtail.yaml Promtail 日志采集配置(支持 Docker stdio 和文件两种模式)

2. Grafana Provisioning

文件 说明
monitoring/grafana/datasources/prometheus.yaml Prometheus 数据源自动配置
monitoring/grafana/datasources/loki.yaml Loki 数据源自动配置
monitoring/grafana/dashboards/provider.yaml Dashboard 自动加载配置
monitoring/grafana/dashboards/logs-dashboard.json 日志监控仪表板
monitoring/grafana/dashboards/dashboard.json 原有监控仪表板(已移动)

3. 文档和脚本

文件 说明
docs/loki-integration.md Loki 使用完整文档(包含查询示例、故障排查等)
scripts/verify_loki.sh Loki 集成验证脚本

修改文件

1. Docker Compose 配置

文件: deployment/docker-compose.yml

变更:

  • 添加 loki 服务(端口 3100
  • 添加 promtail 服务(端口 9080
  • 更新 app 服务:
    • 添加日志文件配置环境变量
    • 添加 app_logs 卷挂载
    • 添加 Promtail 标签
  • 更新 grafana 服务:
    • 修改 provisioning 卷挂载结构
    • 添加对 Loki 的依赖
  • 添加 loki_dataapp_logs

2. 应用代码

文件: src/functional_scaffold/core/logging.py

变更:

  • 添加 file_path 参数支持
  • 实现 RotatingFileHandler100MB5个备份
  • 支持同时输出到控制台和文件

文件: src/functional_scaffold/config.py

变更:

  • 添加 log_file_enabled 配置(默认 False
  • 添加 log_file_path 配置(默认 /var/log/app/app.log

文件: src/functional_scaffold/main.py

变更:

  • 更新 setup_logging() 调用,传入文件路径参数

架构特点

1. 双模式日志收集

模式 1: Docker stdio 收集(默认)

  • 无需修改应用代码
  • 自动收集容器标准输出
  • 性能影响极小
  • 推荐用于生产环境

模式 2: 文件收集(备用)

  • 日志持久化到文件
  • 支持日志轮转
  • 适合需要本地日志的场景
  • ⚙️ 需要设置 LOG_FILE_ENABLED=true

2. 自动化配置

  • Grafana 数据源自动加载
  • Dashboard 自动加载
  • 无需手动配置

3. 结构化日志

  • JSON 格式日志
  • 自动提取字段level, logger, request_id 等)
  • 支持 LogQL 查询

使用方式

快速启动

cd deployment
docker-compose up -d

访问服务

查看日志

方式 1: Grafana 日志仪表板

  1. 访问 http://localhost:3000
  2. 进入 "日志监控" 仪表板

方式 2: Grafana Explore

  1. 访问 http://localhost:3000/explore
  2. 选择 Loki 数据源
  3. 输入查询: {job="functional-scaffold-app"}

验证集成

./scripts/verify_loki.sh

LogQL 查询示例

# 查询所有日志
{job="functional-scaffold-app"}

# 查询错误日志
{job="functional-scaffold-app", level="ERROR"}

# 按 request_id 过滤
{job="functional-scaffold-app"} | json | request_id = "abc123"

# 统计日志量
sum by (level) (count_over_time({job="functional-scaffold-app"}[5m]))

配置说明

日志保留期

默认 7 天,可在 monitoring/loki.yaml 中修改:

limits_config:
  retention_period: 168h  # 7 天

日志文件模式

deployment/docker-compose.yml 中启用:

environment:
  - LOG_FILE_ENABLED=true
  - LOG_FILE_PATH=/var/log/app/app.log

日志级别

deployment/docker-compose.yml 中调整:

environment:
  - LOG_LEVEL=INFO  # DEBUG, INFO, WARNING, ERROR, CRITICAL

监控指标

Loki 集成后,可以在 Grafana 中查看:

  • 日志流: 实时日志流
  • 日志量趋势: 按时间和级别统计
  • 日志级别分布: INFO/WARNING/ERROR 分布
  • 错误日志: 只显示 ERROR 级别

故障排查

看不到日志

  1. 检查服务状态: docker-compose ps
  2. 查看 Promtail 日志: docker-compose logs promtail
  3. 验证容器标签: docker inspect <container> | grep Labels
  4. 查询 Loki API: curl http://localhost:3100/loki/api/v1/label/job/values

Docker socket 权限问题

sudo chmod 666 /var/run/docker.sock

日志量过大

  1. 调整保留期为 3 天
  2. 降低摄入速率限制
  3. 添加日志过滤规则

详细故障排查请参考 docs/loki-integration.md

性能影响

  • CPU: < 5% 额外开销
  • 内存: Loki ~200MB, Promtail ~50MB
  • 磁盘: 取决于日志量7天约 1-5GB
  • 网络: 本地通信,影响极小

下一步

可选的增强功能:

  1. 告警规则: 配置基于日志的告警
  2. 日志导出: 定期导出日志到对象存储
  3. 多租户: 配置 Loki 多租户模式
  4. 长期存储: 配置 S3/OSS 作为后端存储

参考文档

总结

完成: Loki 日志收集系统已成功集成 测试: 可通过 ./scripts/verify_loki.sh 验证 文档: 提供完整的使用和故障排查文档 生产就绪: 支持双模式收集,配置灵活

集成已完成,可以开始使用 Loki 进行日志收集和分析!