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

mermaid

Domolo 系统架构图

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 一键部署所有组件:

git clone https://github.com/ductnn/domolo.git
cd domolo
docker-compose up -d

B. 各组件访问地址

部署完成后,各组件可通过以下地址访问:

组件地址说明
Prometheushttp://host-ip:9090指标查询和告警管理
Pushgatewayhttp://host-ip:9091临时指标接收
AlertManagerhttp://host-ip:9093告警管理界面
Grafanahttp://host-ip:3000数据可视化仪表板
Lokihttp://host-ip:3100日志查询 API

2. Grafana 配置

A. 修改管理员凭据

在配置文件中修改 Grafana 默认凭据:

GF_SECURITY_ADMIN_USER=admin
GF_SECURITY_ADMIN_PASSWORD=changeme
GF_USERS_ALLOW_SIGN_UP=false

B. 数据源配置

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.sh

2. 启动测试容器

将 fake-logs 添加到 docker-compose.yml 或使用预配置的 docker-compose.with-flogs.yml:

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 项目
最后修改:2026 年 01 月 15 日
如果觉得我的文章对你有用,请随意赞赏