快速搭建企业级监控系统: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:

image

 Grafana

image

imageimage

二、环境准备与部署

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. 数据源配置

  1. 访问 http://your-host-ip:3000 登录 Grafana(初始账号/密码:admin/admin)
  2. 添加 Prometheus 数据源
  3. 配置 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 面板中配置告警:

  1. 进入需要告警的面板
  2. 点击面板标题 → Edit
  3. 选择 Alert 标签页 → Create Alert
  4. 设置告警条件、评估时间等
  5. 配置通知渠道

七、常见问题排查

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. 磁盘空间影响

现象:磁盘占满后,监控数据出现断层,服务健康检查失败
解决:及时清理磁盘空间,监控系统会自动恢复

image

image

八、生产环境建议

  1. 数据持久化:所有组件都要配置数据持久化,防止容器重启数据丢失
  2. 资源限制:为容器设置合理的 CPU、内存限制
  3. 监控告警:设置磁盘使用率、容器状态等基础告警
  4. 备份策略:定期备份 Grafana 仪表盘配置和 Prometheus 数据
  5. 版本管理:保持组件版本兼容性,定期升级

结语

通过本文的详细讲解,相信你已经能够搭建一套完整的监控系统。监控体系的建设不是一蹴而就的,需要在实际使用中不断优化调整。建议先从核心业务指标开始,逐步完善监控覆盖范围,让监控真正成为保障系统稳定性的"眼睛"。


实用提示

  • 所有组件启动后,通过 Prometheus 的 Targets 页面(Status → Targets)检查采集状态
  • Grafana 图表配置时注意使用正确的字段(如 ES 数据源使用 @timestamp 而非 timestamp
  • 告警配置后要进行测试,确保通知渠道畅通

希望这份全攻略能帮助你快速构建可靠的监控体系!

 

posted @ 2025-10-20 21:21  暹罗软件开发  阅读(35)  评论(0)    收藏  举报