Loading... # 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. 整体架构 ```mermaid 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. 指标数据流 1. NodeExporter 定期采集主机指标,暴露 HTTP 端点供 Prometheus 抓取 2. cAdvisor 采集容器指标,同样通过 HTTP 端点暴露 3. Prometheus 按照配置的抓取间隔定期从各目标获取指标 4. 短期任务可通过 Pushgateway 主动推送指标 5. Grafana 从 Prometheus 查询数据并渲染图表 ### B. 日志数据流 1. Promtail 通过 Docker Socket API 监听容器日志 2. Promtail 根据配置规则对日志添加标签 3. 标记后的日志发送到 Loki 存储 4. Grafana 通过 Loki API 查询日志,支持按标签过滤 ### C. 告警数据流 1. Prometheus 根据告警规则评估指标 2. 触发的告警发送到 AlertManager 3. AlertManager 根据路由规则分发告警 4. 支持邮件、Webhook 等多种通知方式 # 三、部署方式 ## 1. 快速部署 ### A. 基础部署 使用 Docker Compose 一键部署所有组件: ```bash git clone https://github.com/ductnn/domolo.git cd domolo docker-compose up -d ``` ### B. 各组件访问地址 部署完成后,各组件可通过以下地址访问: | 组件 | 地址 | 说明 | |------|------|------| | 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 默认凭据: ```bash GF_SECURITY_ADMIN_USER=admin GF_SECURITY_ADMIN_PASSWORD=changeme GF_USERS_ALLOW_SIGN_UP=false ``` ### B. 数据源配置 Grafana 已预配置 Prometheus 和 Loki 作为数据源: ```yaml 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. 部署监控代理 在需要监控的远程服务器上部署代理组件: ```bash docker-compose -f docker-compose.agents.yml up -d ``` 该命令会在远程服务器上部署三个代理: - NodeExporter:主机指标采集 - cAdvisor:容器指标采集 - Promtail:日志采集 ### B. 配置 Prometheus 抓取 在 Prometheus 配置中添加远程服务器的抓取任务: ```yaml external_labels: monitor: 'docker-host-alpha' scrape_configs: - job_name: 'ApiExporter' scrape_interval: 5s static_configs: - targets: ['<远程服务器IP>:端口'] ``` ## 2. 日志采集配置 ### A. 容器日志采集 配置 Promtail 采集容器日志: ```yaml - 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 采集系统日志: ```yaml - 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 工具用于生成测试日志: ```bash cd fake-logs chmod +x entrypoint.sh ./entrypoint.sh ``` ## 2. 启动测试容器 将 fake-logs 添加到 docker-compose.yml 或使用预配置的 docker-compose.with-flogs.yml: ```bash docker-compose -f docker-compose.with-flogs.yml up -d ``` ## 3. 验证日志采集 在 Grafana 中打开 Explore,选择 Loki 数据源,查看是否能看到 fake-logs 容器的日志输出 # 八、技术特点 ## 1. 组件协同 - 指标和日志分离存储,提高查询效率 - 统一的可视化界面,降低使用门槛 - 灵活的告警路由,支持复杂的通知场景 ## 2. 轻量级部署 - 基于 Docker Compose,部署简单 - 所有组件容器化,资源占用可控 - 支持横向扩展,适应不同规模 ## 3. 开箱即用 - 预配置的仪表板覆盖常见场景 - 数据源自动配置,无需手动设置 - 完整的示例和文档 # 九、应用场景 ## 1. 开发测试环境 快速搭建开发环境的监控平台,及时发现问题 ## 2. 生产环境监控 对生产环境的 Docker 容器进行全面监控,保障服务稳定性 ## 3. 多主机监控 通过部署监控代理,实现多主机的统一监控 ## 4. 故障排查 结合指标和日志,快速定位故障根因 # 十、总结 Domolo 通过整合多个优秀的开源监控工具,提供了一个功能完备、部署简单的 Docker 监控解决方案。其核心价值在于: 1. 统一平台:将指标监控、日志聚合、数据可视化、告警管理整合到统一平台 2. 开箱即用:预配置的仪表板和数据源,降低使用门槛 3. 灵活扩展:支持监控远程主机,适应不同规模的部署需求 4. 云原生设计:基于 Docker 部署,天然适应云原生环境 对于需要快速搭建 Docker 监控平台的团队来说,Domolo 是一个值得考虑的选择。 *** ## 参考资料 1. [Domolo GitHub 项目](https://github.com/ductnn/domolo/) 最后修改:2026 年 01 月 15 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏