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 --version3. 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: bridge3.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界面后,可以:
- 在"Status > Targets"查看监控目标状态
- 在"Graph"页面输入PromQL查询表达式
- 在"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。登录后需要:
- 添加数据源:Configuration > Data Sources > Add data source
- 选择Prometheus类型
- URL填写http://prometheus:9090(因为使用Docker网络)
- 点击Save & Test验证连接
导入官方仪表板:
- 点击"+" > Import
- 输入仪表板ID 1860(Node Exporter Full)
- 选择Prometheus数据源
- 点击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/plugins5.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无法采集数据
检查步骤:
- 确认target状态是否为UP
- 检查网络连通性:
docker exec -it prometheus curl target:port - 查看Prometheus日志:
docker logs prometheus - 验证scrape配置是否正确
6.2 Grafana无法连接Prometheus
排查方法:
- 在Grafana容器内测试连接:
docker exec -it grafana curl http://prometheus:9090 - 检查数据源配置中的URL
- 确认网络配置,确保在同一个Docker网络
6.3 性能问题优化
如果出现性能瓶颈:
- 增加Prometheus资源限制:
deploy: resources: limits: cpus: '2' memory: 4G- 优化scrape间隔,非关键指标可以设置为30s或60s
- 使用recording rules预计算常用查询
7. 生产环境建议
经过多个项目的实践,我总结出以下经验:
- 对于大规模部署,考虑使用Prometheus联邦或Thanos架构
- 重要监控指标应设置适当的告警阈值
- 定期备份Grafana仪表板配置(导出JSON)
- 使用Grafana的Provisioning功能自动化配置
- 为不同团队创建单独的Grafana组织和文件夹
监控系统的维护同样重要:
- 定期检查存储空间使用情况
- 监控Prometheus自身指标(scrape失败率、内存使用等)
- 更新到稳定版本,避免使用过旧的镜像
这套监控方案我已经在多个生产环境中稳定运行超过两年,从未让我失望。特别是在容器化环境中,它的自动服务发现功能大大简化了配置工作。根据我的经验,合理配置的Prometheus+Grafana可以满足90%以上的监控需求。