# Monitoring 目录说明 本目录包含所有监控和日志收集相关的配置文件。 ## 目录结构 ``` monitoring/ ├── alerts/ # Prometheus 告警规则 │ └── rules.yaml # 告警规则配置 ├── grafana/ # Grafana 配置 │ ├── datasources/ # 数据源自动配置 │ │ ├── prometheus.yaml # Prometheus 数据源 │ │ └── loki.yaml # Loki 数据源 │ └── dashboards/ # 仪表板自动加载 │ ├── provider.yaml # Dashboard provider 配置 │ ├── dashboard.json # 指标监控仪表板 │ └── logs-dashboard.json # 日志监控仪表板 ├── loki.yaml # Loki 日志存储配置 ├── promtail.yaml # Promtail 日志采集配置 └── prometheus.yml # Prometheus 指标收集配置 ``` ## 配置文件说明 ### Prometheus 配置 **文件**: `prometheus.yml` Prometheus 指标收集配置,包括: - 抓取间隔: 5 秒 - 目标: app 服务的 `/metrics` 端点 - 告警规则: 从 `alerts/` 目录加载 ### Loki 配置 **文件**: `loki.yaml` Loki 日志存储配置,包括: - 存储方式: 本地文件系统 - 日志保留期: 7 天 - 摄入速率限制: 10MB/s - 自动压缩和清理 **关键配置**: ```yaml limits_config: retention_period: 168h # 7 天 ingestion_rate_mb: 10 # 10MB/s ``` ### Promtail 配置 **文件**: `promtail.yaml` Promtail 日志采集配置,支持两种模式: **模式 1: Docker stdio 收集(默认)** - 通过 Docker API 自动发现容器 - 过滤带有 `logging=promtail` 标签的容器 - 自动解析 JSON 日志 **模式 2: 文件收集(备用)** - 从 `/var/log/app/*.log` 读取日志文件 - 支持日志轮转 - 需要设置 `LOG_FILE_ENABLED=true` ### Grafana Provisioning **数据源** (`grafana/datasources/`) 自动配置 Grafana 数据源: - `prometheus.yaml`: Prometheus 数据源(默认) - `loki.yaml`: Loki 数据源 **仪表板** (`grafana/dashboards/`) 自动加载 Grafana 仪表板: - `provider.yaml`: Dashboard provider 配置 - `dashboard.json`: 指标监控仪表板(HTTP 请求、算法执行等) - `logs-dashboard.json`: 日志监控仪表板(日志流、错误日志等) ### 告警规则 **文件**: `alerts/rules.yaml` Prometheus 告警规则,包括: - 高错误率告警 - 高延迟告警 - 服务不可用告警 ## 修改配置 ### 调整日志保留期 编辑 `loki.yaml`: ```yaml limits_config: retention_period: 72h # 改为 3 天 ``` 重启 Loki: ```bash cd deployment docker-compose restart loki ``` ### 调整指标抓取间隔 编辑 `prometheus.yml`: ```yaml global: scrape_interval: 10s # 改为 10 秒 ``` 重启 Prometheus: ```bash cd deployment docker-compose restart prometheus ``` ### 添加新的告警规则 编辑 `alerts/rules.yaml`,添加新规则: ```yaml groups: - name: my_alerts rules: - alert: MyAlert expr: my_metric > 100 for: 5m labels: severity: warning annotations: summary: "我的告警" ``` 重启 Prometheus: ```bash cd deployment docker-compose restart prometheus ``` ### 添加新的仪表板 1. 在 Grafana UI 中创建仪表板 2. 导出为 JSON 3. 保存到 `grafana/dashboards/my-dashboard.json` 4. 重启 Grafana(或等待自动重载) ```bash cd deployment docker-compose restart grafana ``` ## 验证配置 ### 检查 Prometheus 配置 ```bash # 访问 Prometheus UI open http://localhost:9090 # 检查目标状态 open http://localhost:9090/targets # 检查告警规则 open http://localhost:9090/alerts ``` ### 检查 Loki 配置 ```bash # 检查 Loki 健康状态 curl http://localhost:3100/ready # 查询标签 curl -s "http://localhost:3100/loki/api/v1/label/job/values" | jq ``` ### 检查 Grafana 配置 ```bash # 访问 Grafana UI open http://localhost:3000 # 检查数据源 curl -s -u admin:admin http://localhost:3000/api/datasources | jq # 检查仪表板 curl -s -u admin:admin http://localhost:3000/api/search | jq ``` ## 故障排查 ### Prometheus 无法抓取指标 1. 检查 app 服务是否运行: `docker-compose ps app` 2. 检查 metrics 端点: `curl http://localhost:8111/metrics` 3. 查看 Prometheus 日志: `docker-compose logs prometheus` ### Loki 无法接收日志 1. 检查 Promtail 是否运行: `docker-compose ps promtail` 2. 查看 Promtail 日志: `docker-compose logs promtail` 3. 检查容器标签: `docker inspect | grep Labels` ### Grafana 数据源未加载 1. 检查 provisioning 目录挂载: `docker-compose config | grep grafana -A 10` 2. 查看 Grafana 日志: `docker-compose logs grafana` 3. 手动重启 Grafana: `docker-compose restart grafana` ## 相关文档 - [Loki 集成文档](../docs/loki-integration.md) - 完整的 Loki 使用文档 - [Loki 快速参考](../docs/loki-quick-reference.md) - 常用命令和查询 - [Loki 实施总结](../docs/loki-implementation-summary.md) - 实施细节和架构说明 - [Prometheus 官方文档](https://prometheus.io/docs/) - [Loki 官方文档](https://grafana.com/docs/loki/latest/) - [Grafana 官方文档](https://grafana.com/docs/grafana/latest/) ## 性能建议 ### 日志量控制 - 调整日志级别为 WARNING 或 ERROR - 过滤掉不必要的日志(如健康检查) - 减少日志保留期 ### 指标优化 - 增加抓取间隔(如 15s 或 30s) - 减少指标基数(避免高基数标签) - 定期清理旧数据 ### 存储优化 - 监控磁盘使用: `docker-compose exec loki du -sh /loki` - 定期备份重要数据 - 考虑使用对象存储(S3/OSS)作为后端 ## 总结 本目录包含完整的监控和日志收集配置: ✅ **Prometheus** - 指标收集和告警 ✅ **Loki** - 日志存储和查询 ✅ **Promtail** - 日志采集 ✅ **Grafana** - 可视化和仪表板 所有配置都支持自动加载,无需手动配置。