快速搭建企业级监控系统:Prometheus + Grafana 全攻略
一站式掌握云原生监控体系搭建,从零到一构建生产级监控平台
引言
在微服务和云原生时代,系统监控已成为保障业务稳定运行的基石。今天我们将手把手教你如何基于 Prometheus 和 Grafana 构建一套功能完备的企业级监控系统,涵盖Linux服务器、MySQL、Redis、Docker容器和JVM微服务等核心组件的监控。
一、监控系统架构概述
核心组件介绍
Prometheus:开源的监控解决方案,采用 Pull 模式采集指标,内置时序数据库,支持强大的 PromQL 查询语言。用于监控主服务器,负责数据采集和存储;
Grafana:功能强大的数据可视化工具,支持多种数据源,可创建丰富的监控仪表盘。
Exporters:数据采集代理,负责暴露各组件监控指标:
- node_exporter:收集Host硬件和操作系统信息
- mysqld_exporter:MySQL 数据库监控
- redis_exporter:Redis 监控
- cadvisor:Docker容器监控
- jmx_exporter:JVM 应用监控
核心组件页面展示
Prometheus:

Grafana:



二、环境准备与部署
1. 部署 Prometheus Server
# 创建配置目录
mkdir -p /home/dockerdata/prometheus/
# 启动Prometheus
docker run -d --name prometheus --net=host -p 9090:9090 \
-v /home/dockerdata/prometheus/:/etc/prometheus/ \
prom/prometheus
2. 部署 Grafana
# 创建数据目录
mkdir -p /home/dockerdata/grafana/{conf,data,log,plugins}
# 启动Grafana
# 考虑到一旦docker容器停止,其存储的数据就会丢失,因此还需要进行数据的持久化工作
# 需要把容器内的 /etc/grafana、/var/lib/grafana、/var/log/grafana 三个目录挂载到宿主机上,以确保数据不随容器的停止而消失
docker run -d --name grafana -p 3000:3000 \
-v /home/dockerdata/grafana/conf:/etc/grafana \
-v /home/dockerdata/grafana/data:/var/lib/grafana \
-v /home/dockerdata/grafana/log:/var/log/grafana \
-v /home/dockerdata/grafana/plugins:/var/lib/grafana/plugins \
grafana/grafana
# 复制默认配置
docker cp grafana:/etc/grafana/. /home/dockerdata/grafana/conf
docker cp grafana:/var/lib/grafana/. /home/dockerdata/grafana/data
docker cp grafana:/var/log/grafana/. /home/dockerdata/grafana/log
# 修改宿主机新建目录的所有者为 grafana
# 新增用户grafana
useradd grafana
# 修改uid为472
vi /etc/passwd
...
grafana:x:472:472::/home/grafana:/bin/bash
# 修改gid为0
vi /etc/group
...
grafana:x:0:
# 修改 grafana 目录所有者为 grafana
chown -R grafana:grafana grafana
关键点:必须创建 grafana 用户并正确设置目录权限,否则会出现权限错误。
三、各类监控组件部署
1. 主机监控 - node_exporter
# 二进制部署(推荐用于主机监控)
nohup ./node_exporter --web.listen-address=":9100" &
2. MySQL 监控 - mysqld_exporter
# 创建systemd服务
vim /usr/lib/systemd/system/mysqld_exporter.service
# 输入服务内容:
./mysqld_exporter --web.listen-address=:9038 --config.my-cnf=./my.cnf &
PS:mysqld_exporter用docker安装会报my.cnf文件找不到错误,应该是启动命令需要指定挂载my.cnf文件;
3. Redis 监控 - redis_exporter
docker run -d --name redis_exporter -p 9121:9121 \
oliver006/redis_exporter \
--redis.addr redis://your-redis-host:6379 \
--redis.password 'your-password'
4. 容器监控 - cadvisor
docker run --name=cadvisor \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:rw \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--detach=true \
google/cadvisor
5. JVM 监控 - jmx_exporter
# 下载JMX exporter
wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.15.0/jmx_prometheus_javaagent-0.15.0.jar
# 启动Java应用时添加javaagent参数
java -javaagent:/path/to/jmx_prometheus_javaagent-0.15.0.jar=9041:/path/to/jmx_exporter.yml \
-jar your-application.jar
四、配置整合
1. Prometheus 配置
编辑 /home/dockerdata/prometheus/prometheus.yml:
global:
scrape_interval: 15s
evaluation_interval: 15s
rule_files:
# - "first_rules.yml"
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_exporter'
static_configs:
- targets: ['your-host-ip:9100']
scrape_interval: 10s
- job_name: 'mysql'
static_configs:
- targets: ['your-host-ip:9104']
- job_name: 'redis'
static_configs:
- targets: ['your-host-ip:9121']
- job_name: 'cadvisor'
static_configs:
- targets: ['your-host-ip:8080']
- job_name: 'jvm'
static_configs:
- targets: ['your-app-ip:9041']
2. 重启 Prometheus 使配置生效
docker restart prometheus
五、Grafana 配置与仪表盘
1. 数据源配置
- 访问
http://your-host-ip:3000登录 Grafana(初始账号/密码:admin/admin) - 添加 Prometheus 数据源
- 配置 URL:
http://your-prometheus-host:9090
2. 导入监控仪表盘
推荐使用的 Dashboard ID:
|
监控类型 |
Dashboard ID |
特点 |
|
Linux主机 |
8919 |
Node Exporter 中文版,监控全面 |
|
MySQL |
7362 |
专业的数据库性能监控 |
|
Redis |
763 |
Redis 关键指标监控 |
|
Docker容器 |
11277 |
容器资源使用情况 |
|
JVM |
4701 |
按服务名显示,推荐使用 |
|
JVM |
9568 |
按IP端口显示,简洁明了 |
|
Spring Boot |
10280 |
应用级监控,含日志变化 |
导入方法:左侧菜单 → Dashboards → Import → 输入 ID → 选择数据源 → Import
六、告警配置
1. 配置邮件告警
编辑 Grafana 配置文件 grafana.ini:
[smtp]
enabled = true
host = smtp.qq.com:465
user = your-email@qq.com
password = your-smtp-password
from_address = your-email@qq.com
from_name = Grafana
[alerting]
enabled = true
2. 配置告警规则
在 Dashboard 面板中配置告警:
- 进入需要告警的面板
- 点击面板标题 → Edit
- 选择 Alert 标签页 → Create Alert
- 设置告警条件、评估时间等
- 配置通知渠道
七、常见问题排查
1. Grafana 权限错误
# 错误信息:
logger=migrator level=error msg="alert migration failure" error="failed to check table existence: unable to open database file: permission denied"
# 解决方案:
执行上述新增用户grafana命令
2. 时间同步问题
# 第一种方法:启动时进行映射
docker run -d -p 8080:80 -v /etc/localtime:/etc/localtime nginx
# 第二种:复制时区信息到容器
# 如果本机时区正确直接:
docker cp /etc/localtime nginx:/etc/localtime
docker cp /etc/localtime [容器ID或名字]:/etc/localtime
# 如果本机时区不正确:
docker cp /usr/share/zoneinfo/Asia/Shanghai nginx:/etc/localtime
3. 磁盘空间影响
现象:磁盘占满后,监控数据出现断层,服务健康检查失败
解决:及时清理磁盘空间,监控系统会自动恢复


八、生产环境建议
- 数据持久化:所有组件都要配置数据持久化,防止容器重启数据丢失
- 资源限制:为容器设置合理的 CPU、内存限制
- 监控告警:设置磁盘使用率、容器状态等基础告警
- 备份策略:定期备份 Grafana 仪表盘配置和 Prometheus 数据
- 版本管理:保持组件版本兼容性,定期升级
结语
通过本文的详细讲解,相信你已经能够搭建一套完整的监控系统。监控体系的建设不是一蹴而就的,需要在实际使用中不断优化调整。建议先从核心业务指标开始,逐步完善监控覆盖范围,让监控真正成为保障系统稳定性的"眼睛"。
实用提示:
- 所有组件启动后,通过 Prometheus 的 Targets 页面(Status → Targets)检查采集状态
- Grafana 图表配置时注意使用正确的字段(如 ES 数据源使用
@timestamp而非timestamp) - 告警配置后要进行测试,确保通知渠道畅通
希望这份全攻略能帮助你快速构建可靠的监控体系!

浙公网安备 33010602011771号