ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

使用Docker Compose部署Prometheus与Grafana监控系统

使用Docker Compose部署Prometheus与Grafana监控系统

1. 项目概述

监控系统是现代IT基础设施中不可或缺的一部分,而Prometheus和Grafana的组合已经成为监控领域的黄金标准。这套方案不仅适用于大型分布式系统,也能完美服务于中小型应用。我曾在多个生产环境中部署过这套监控栈,它的灵活性和强大功能总能给我带来惊喜。

Prometheus作为时序数据库和告警引擎,负责数据的采集和存储;Grafana则提供可视化仪表板,让枯燥的监控数据变得直观易懂。两者配合使用,可以构建从基础设施到应用层的全方位监控体系。特别是在容器化环境中,这套方案的优势更加明显。

2. 环境准备

2.1 系统要求

推荐使用Linux系统进行部署,Ubuntu 20.04 LTS或CentOS 7/8都是不错的选择。硬件配置方面:

  • 至少2核CPU
  • 4GB内存(生产环境建议8GB以上)
  • 50GB存储空间(根据监控指标数量调整)

注意:Prometheus对磁盘I/O要求较高,建议使用SSD存储。如果监控目标超过100个,应考虑单独部署Prometheus服务器。

2.2 依赖安装

首先确保系统已安装最新版的Docker和Docker Compose:

# Ubuntu/Debian sudo apt-get update sudo apt-get install -y docker.io docker-compose # CentOS/RHEL sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install -y docker-ce docker-ce-cli containerd.io sudo systemctl start docker sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose

验证安装是否成功:

docker --version docker-compose --version

3. Docker Compose部署

3.1 编写docker-compose.yml

创建一个项目目录,然后编写docker-compose.yml文件:

version: '3' services: prometheus: image: prom/prometheus:latest container_name: prometheus restart: unless-stopped volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml - prometheus_data:/prometheus ports: - "9090:9090" command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.console.templates=/etc/prometheus/consoles' - '--web.console.libraries=/etc/prometheus/console_libraries' - '--storage.tsdb.retention.time=30d' networks: - monitor-net grafana: image: grafana/grafana:latest container_name: grafana restart: unless-stopped volumes: - grafana_data:/var/lib/grafana ports: - "3000:3000" networks: - monitor-net volumes: prometheus_data: grafana_data: networks: monitor-net: driver: bridge

3.2 配置Prometheus

创建prometheus.yml配置文件:

global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'node_exporter' static_configs: - targets: ['node_exporter:9100']

3.3 启动服务

在项目目录下执行:

docker-compose up -d

等待约1分钟后,可以通过以下URL访问:

  • Prometheus: http://服务器IP:9090
  • Grafana: http://服务器IP:3000

4. 基础配置与使用

4.1 Prometheus初始配置

访问Prometheus Web界面后,可以:

  1. 在"Status > Targets"查看监控目标状态
  2. 在"Graph"页面输入PromQL查询表达式
  3. 在"Alerts"页面配置告警规则

建议先添加node_exporter监控主机基础指标:

docker run -d --name node_exporter --net host \ -v "/proc:/host/proc:ro" \ -v "/sys:/host/sys:ro" \ -v "/:/rootfs:ro" \ prom/node-exporter:latest \ --path.procfs=/host/proc \ --path.sysfs=/host/sys \ --collector.filesystem.ignored-mount-points="^/(sys|proc|dev|host|etc)($|/)"

然后在prometheus.yml中添加这个target。

4.2 Grafana初始配置

首次访问Grafana时,默认用户名密码是admin/admin。登录后需要:

  1. 添加数据源:Configuration > Data Sources > Add data source
  2. 选择Prometheus类型
  3. URL填写http://prometheus:9090(因为使用Docker网络)
  4. 点击Save & Test验证连接

导入官方仪表板:

  1. 点击"+" > Import
  2. 输入仪表板ID 1860(Node Exporter Full)
  3. 选择Prometheus数据源
  4. 点击Import

5. 高级配置与优化

5.1 Prometheus存储优化

对于生产环境,建议调整以下参数:

  • --storage.tsdb.retention.time: 数据保留时间(默认15天)
  • --storage.tsdb.retention.size: 数据保留大小
  • --storage.tsdb.wal-compression: 启用WAL压缩

示例docker-compose.yml修改:

command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--storage.tsdb.retention.time=90d' - '--storage.tsdb.retention.size=100GB' - '--storage.tsdb.wal-compression'

5.2 Grafana插件安装

Grafana支持丰富的插件生态系统。以安装Pie Chart插件为例:

docker exec -it grafana grafana-cli plugins install grafana-piechart-panel docker-compose restart grafana

对于离线环境,可以下载插件包后挂载到容器中:

volumes: - ./plugins:/var/lib/grafana/plugins

5.3 告警配置

Prometheus支持Alertmanager实现告警通知。添加Alertmanager服务:

alertmanager: image: prom/alertmanager:latest container_name: alertmanager restart: unless-stopped volumes: - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml ports: - "9093:9093" networks: - monitor-net

然后在prometheus.yml中添加配置:

alerting: alertmanagers: - static_configs: - targets: ['alertmanager:9093']

6. 常见问题排查

6.1 Prometheus无法采集数据

检查步骤:

  1. 确认target状态是否为UP
  2. 检查网络连通性:docker exec -it prometheus curl target:port
  3. 查看Prometheus日志:docker logs prometheus
  4. 验证scrape配置是否正确

6.2 Grafana无法连接Prometheus

排查方法:

  1. 在Grafana容器内测试连接:docker exec -it grafana curl http://prometheus:9090
  2. 检查数据源配置中的URL
  3. 确认网络配置,确保在同一个Docker网络

6.3 性能问题优化

如果出现性能瓶颈:

  1. 增加Prometheus资源限制:
deploy: resources: limits: cpus: '2' memory: 4G
  1. 优化scrape间隔,非关键指标可以设置为30s或60s
  2. 使用recording rules预计算常用查询

7. 生产环境建议

经过多个项目的实践,我总结出以下经验:

  1. 对于大规模部署,考虑使用Prometheus联邦或Thanos架构
  2. 重要监控指标应设置适当的告警阈值
  3. 定期备份Grafana仪表板配置(导出JSON)
  4. 使用Grafana的Provisioning功能自动化配置
  5. 为不同团队创建单独的Grafana组织和文件夹

监控系统的维护同样重要:

  • 定期检查存储空间使用情况
  • 监控Prometheus自身指标(scrape失败率、内存使用等)
  • 更新到稳定版本,避免使用过旧的镜像

这套监控方案我已经在多个生产环境中稳定运行超过两年,从未让我失望。特别是在容器化环境中,它的自动服务发现功能大大简化了配置工作。根据我的经验,合理配置的Prometheus+Grafana可以满足90%以上的监控需求。

返回列表