Domolo Docker 容器监控日志解决方案技术分析
一、概述
1. 项目简介
Domolo 是一个专为 Docker 主机和容器设计的监控与日志解决方案,集成了 Prometheus、Grafana、Loki、cAdvisor、NodeExporter 和 AlertManager 等开源工具,提供完整的一站式监控平台。
A. 核心问题
Docker 容器环境的可观测性面临以下挑战:
- 容器动态性强,传统监控难以适应
- 主机资源与容器资源需要分层监控
- 日志分散在各个容器中,难以集中管理
- 需要统一的可视化界面展示监控数据
- 异常情况需要及时告警通知
B. 解决方案
Domolo 通过以下方式解决上述问题:
- 使用 Prometheus 采集和存储时序指标数据
- 使用 Loki 构建高效的日志聚合系统
- 使用 Grafana 提供统一的数据可视化界面
- 使用 AlertManager 实现灵活的告警规则管理
- 使用 cAdvisor 和 NodeExporter 分别采集容器和主机指标
2. 核心组件
A. 指标采集组件
- NodeExporter:采集主机级别的 CPU、内存、磁盘、网络等指标
- cAdvisor:采集容器级别的资源使用情况
- Prometheus Pushgateway:接收短期任务和批处理任务的指标推送
B. 数据存储组件
- Prometheus:时序数据库,存储所有指标数据
- Loki:日志聚合系统,类似 Prometheus 但专注于日志
C. 可视化与告警组件
- Grafana:数据可视化平台,预配置多个仪表板
- AlertManager:告警管理和分发,支持多种告警路由
D. 日志采集组件
- Promtail:日志采集代理,负责收集日志并发送到 Loki
E. 反向代理组件
- Caddy:提供反向代理和基础认证功能
二、系统架构
1. 整体架构
graph TB
subgraph "数据采集层"
NE[NodeExporter<br/>主机指标]
CA[cAdvisor<br/>容器指标]
PT[Promtail<br/>日志采集]
end
subgraph "数据存储与处理层"
PM[Prometheus<br/>指标存储]
LK[Loki<br/>日志存储]
PG[Pushgateway<br/>临时指标]
end
subgraph "可视化与告警层"
GF[Grafana<br/>数据可视化]
AM[AlertManager<br/>告警管理]
end
subgraph "反向代理层"
CD[Caddy<br/>反向代理+认证]
end
NE -->|指标| PM
CA -->|指标| PM
PG -->|推送| PM
PT -->|日志| LK
PM -->|查询| GF
LK -->|查询| GF
PM -->|告警| AM
CD -->|代理| PM
CD -->|代理| AM
2. 数据流向分析
A. 指标数据流
- NodeExporter 定期采集主机指标,暴露 HTTP 端点供 Prometheus 抓取
- cAdvisor 采集容器指标,同样通过 HTTP 端点暴露
- Prometheus 按照配置的抓取间隔定期从各目标获取指标
- 短期任务可通过 Pushgateway 主动推送指标
- Grafana 从 Prometheus 查询数据并渲染图表
B. 日志数据流
- Promtail 通过 Docker Socket API 监听容器日志
- Promtail 根据配置规则对日志添加标签
- 标记后的日志发送到 Loki 存储
- Grafana 通过 Loki API 查询日志,支持按标签过滤
C. 告警数据流
- Prometheus 根据告警规则评估指标
- 触发的告警发送到 AlertManager
- AlertManager 根据路由规则分发告警
- 支持邮件、Webhook 等多种通知方式
三、部署方式
1. 快速部署
A. 基础部署
使用 Docker Compose 一键部署所有组件:
git clone https://github.com/ductnn/domolo.git
cd domolo
docker-compose up -dB. 各组件访问地址
部署完成后,各组件可通过以下地址访问:
| 组件 | 地址 | 说明 |
|---|---|---|
| Prometheus | http://host-ip:9090 | 指标查询和告警管理 |
| Pushgateway | http://host-ip:9091 | 临时指标接收 |
| AlertManager | http://host-ip:9093 | 告警管理界面 |
| Grafana | http://host-ip:3000 | 数据可视化仪表板 |
| Loki | http://host-ip:3100 | 日志查询 API |
2. Grafana 配置
A. 修改管理员凭据
在配置文件中修改 Grafana 默认凭据:
GF_SECURITY_ADMIN_USER=admin
GF_SECURITY_ADMIN_PASSWORD=changeme
GF_USERS_ALLOW_SIGN_UP=falseB. 数据源配置
Grafana 已预配置 Prometheus 和 Loki 作为数据源:
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
access: proxy
orgId: 1
url: http://prometheus:9090
basicAuth: false
isDefault: true
editable: true
- name: Loki
type: loki
access: proxy
jsonData:
maxLines: 1000
basicAuth: false
url: http://loki:3100
isDefault: false
editable: true四、扩展配置
1. 监控远程主机
A. 部署监控代理
在需要监控的远程服务器上部署代理组件:
docker-compose -f docker-compose.agents.yml up -d该命令会在远程服务器上部署三个代理:
- NodeExporter:主机指标采集
- cAdvisor:容器指标采集
- Promtail:日志采集
B. 配置 Prometheus 抓取
在 Prometheus 配置中添加远程服务器的抓取任务:
external_labels:
monitor: 'docker-host-alpha'
scrape_configs:
- job_name: 'ApiExporter'
scrape_interval: 5s
static_configs:
- targets: ['<远程服务器IP>:端口']2. 日志采集配置
A. 容器日志采集
配置 Promtail 采集容器日志:
- job_name: container_logs
docker_sd_configs:
- host: unix:///var/run/docker.sock
refresh_interval: 5s
relabel_configs:
- source_labels: ['__meta_docker_container_name']
regex: '/(.*)'
target_label: 'container'B. 系统日志采集
配置 Promtail 采集系统日志:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: varlogs
__path__: /var/log/*log五、预配置仪表板
Domolo 预配置了多个 Grafana 仪表板,覆盖常见的监控场景。
1. Node Exporter 仪表板
展示主机级别的资源使用情况,包括:
- CPU 使用率、负载、中断数
- 内存使用量、缓存、交换区
- 磁盘 I/O、文件系统使用率
- 网络流量、连接数
2. 监控服务仪表板
展示各监控组件的运行状态,包括:
- Prometheus 抓取目标状态
- 各组件的健康状态
- 告警规则执行情况
3. Docker Host 仪表板
展示容器和主机的综合监控数据,包括:
- 容器资源使用排名
- 容器网络 I/O 统计
- 容器文件系统使用情况
六、日志查询与分析
1. Grafana Explore 功能
Grafana 的 Explore 功能提供强大的日志查询能力:
A. 按标签过滤
通过标签快速定位目标日志:
- 按容器名称过滤
- 按主机名称过滤
- 按日志级别过滤
B. 日志搜索
支持全文搜索和正则表达式匹配,快速定位问题日志
C. 关联分析
可将指标数据和日志数据关联分析,快速定位问题根因
七、测试与验证
1. 生成测试日志
项目提供了 fake-logs 工具用于生成测试日志:
cd fake-logs
chmod +x entrypoint.sh
./entrypoint.sh2. 启动测试容器
将 fake-logs 添加到 docker-compose.yml 或使用预配置的 docker-compose.with-flogs.yml:
docker-compose -f docker-compose.with-flogs.yml up -d3. 验证日志采集
在 Grafana 中打开 Explore,选择 Loki 数据源,查看是否能看到 fake-logs 容器的日志输出
八、技术特点
1. 组件协同
- 指标和日志分离存储,提高查询效率
- 统一的可视化界面,降低使用门槛
- 灵活的告警路由,支持复杂的通知场景
2. 轻量级部署
- 基于 Docker Compose,部署简单
- 所有组件容器化,资源占用可控
- 支持横向扩展,适应不同规模
3. 开箱即用
- 预配置的仪表板覆盖常见场景
- 数据源自动配置,无需手动设置
- 完整的示例和文档
九、应用场景
1. 开发测试环境
快速搭建开发环境的监控平台,及时发现问题
2. 生产环境监控
对生产环境的 Docker 容器进行全面监控,保障服务稳定性
3. 多主机监控
通过部署监控代理,实现多主机的统一监控
4. 故障排查
结合指标和日志,快速定位故障根因
十、总结
Domolo 通过整合多个优秀的开源监控工具,提供了一个功能完备、部署简单的 Docker 监控解决方案。其核心价值在于:
- 统一平台:将指标监控、日志聚合、数据可视化、告警管理整合到统一平台
- 开箱即用:预配置的仪表板和数据源,降低使用门槛
- 灵活扩展:支持监控远程主机,适应不同规模的部署需求
- 云原生设计:基于 Docker 部署,天然适应云原生环境
对于需要快速搭建 Docker 监控平台的团队来说,Domolo 是一个值得考虑的选择。