目录
一、环境介绍
二、注意事项
三、安装Prometheus
3.1 下载
3.2 安装
3.3 配置systemd启动方式
3.4 设置开机自启动
3.5 验证是否成功
四、安装Grafana
4.1 下载
4.2 安装
4.3 验证服务的使用
五、安装服务器监控node_exporter
5.1 下载
5.2 安装
5.3 配置systemd服务
5.4 设置开机自启
5.5 验证服务是否成功
5.6 配置Prometheus
5.6.1 添加node_exporter的绑定
5.6.2 重启prometheus
5.7 在Grafana中添加数据源
5.7.1 添加数据源
5.7.2 填写prometheus地址
5.7.3 选择适合的仪表盘
5.7.4 查看仪表盘
5.7.5 查看Prometheus
六、安装MySQL监控mysqld_exporter
6.1 下载
6.2 安装
6.3 配置系统服务
6.4 启动服务
6.5 配置Prometheus
6.6 配置grafana
6.6.1 创建Dashboard
6.6.2 查看展示效果
6.7 查看Prometheus
七、一些小知识
7.1 整体架构图
7.2 各个组件的作用
7.2.1 node exporter(端口9100)
7.2.2 mysqld_exporter(端口9104)
7.2.3 Prometheus(端口9090)
7.2.4 Grafana(端口3000)
7.2.5 Alertmanager(通常端口9093)
7.3 数据流向详解
7.3.1 正常监控数据流
7.3.2 告警数据流
7.4 dashboard模板
7.3.1 MySQL Overview(ID:7362)
7.3.2 MySQL Prometheus(ID:11323)
7.3.3 Node Exporter Server Metrics(ID:11074)
7.3.4 MySQL Replication(ID:12587)
7.3.5 MySQL InnoDB Metrics(ID:4215)
7.3.6 MySQL Database Performance(ID:13083)
7.3.7 MySQL by Zabbix(ID:10993)
时间同步是必做:
#master
# 安装ntp服务(用于提供时间同步源)
yum install -y ntp
# 编辑ntp配置文件,设置本地为时钟源
vim /etc/ntp.conf
# 在文件末尾添加以下两行(按i进入编辑模式,添加后按esc,输入:wq保存退出)
# server 127.127.157.0 # 本地时钟源,157对应网段192.168.157.x
# fudge 127.127.157.0 stratum 8 # 时间层级设为8(范围1-15,层级越低越优先)
# 启动ntp服务并设置开机自启
systemctl start ntpd
systemctl enable ntpd # 确保重启后服务自动运行
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#slave
# 安装ntp和ntpdate(ntpdate用于主动同步时间)
yum install -y ntp ntpdate
# 启动ntp服务并设置开机自启
systemctl start ntpd
systemctl enable ntpd
# 手动同步主库时间(立即执行一次,确保当前时间对齐)
/usr/sbin/ntpdate 192.168.157.80 # 同步主库80的时间
# 设置定时任务,每30分钟自动同步一次主库时间
crontab -e # 编辑定时任务(按i进入编辑模式,添加后按esc,输入:wq保存退出)
# 添加以下内容:
# */30 * * * * /usr/sbin/ntpdate 192.168.157.80 # 每30分钟执行一次时间同步
https://prometheus.io/download/

tar -zxvf prometheus-3.7.2.linux-amd64.tar.gz
cp -R prometheus-3.7.2.linux-amd64 /usr/local/prometheus
vim /usr/lib/systemd/system/prometheus.service
[Unit]
Description=Prometheus
Documentation=https://prometheus.io/
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/usr/local/prometheus
ExecStart=/usr/local/prometheus/prometheus
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable prometheus.service
systemctl start prometheus.service
在浏览器中输入192.168.157.82:9090

https://grafana.com/grafana/download
下载地址:https://dl.grafana.com/enterprise/release/grafana-enterprise-11.0.0-1.x86_64.rpm
yum install -y grafana-enterprise-11.0.0-1.x86_64.rpm
# 开机启动
systemctl enable grafana-server
# 启动
systemctl start grafana-server
地址:http://192.168.157.82:3000/
默认密码:admin/admin
登录后要求修改原始密码

Download | Prometheus

tar -zxvf node_exporter-1.10.2.linux-amd64.tar.gz
cp -R node_exporter-1.10.2.linux-amd64 /usr/local/node_exporter
vim /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable node_exporter.service
systemctl start node_exporter.service
# 查看服务状态
systemctl status node_exporter.service
在浏览器输入IP:9100
注:node_exporter在三台服务器上均安装了,所以均需验证


global:
scrape_interval: 15s # 全局默认拉取间隔,job级配置会覆盖此值
evaluation_interval: 15s
scrape_configs:
# MySQL主从节点的MySQL指标(MySQL Exporter,端口9104)
- job_name: 'mysql-master-slave'
scrape_interval: 5s # 5秒一次高频采集MySQL指标
static_configs:
- targets: ['192.168.157.80:9104', '192.168.157.81:9104', '192.168.157.82:9104'] # 主+2从
# 自动标记主从角色(方便Grafana筛选)
relabel_configs:
- source_labels: [__address__]
regex: '192.168.157.80:9104' # 匹配主库IP
target_label: 'mysql_role'
replacement: 'master' # 标记为主库
- source_labels: [__address__]
regex: '192.168.157.81:9104|192.168.157.82:9104' # 匹配两个从库
target_label: 'mysql_role'
replacement: 'slave' # 标记为从库
# 服务器基础指标(Node Exporter,端口9100)
- job_name: 'nodes'
scrape_interval: 5s # 5秒一次采集服务器指标
static_configs:
- targets: ['192.168.157.80:9100', '192.168.157.81:9100', '192.168.157.82:9100'] # 主+2从
# 自动标记服务器对应的MySQL角色
relabel_configs:
- source_labels: [__address__]
regex: '192.168.157.80:9100'
target_label: 'mysql_role'
replacement: 'master'
- source_labels: [__address__]
regex: '192.168.157.81:9100|192.168.157.82:9100'
target_label: 'mysql_role'
replacement: 'slave'
systemctl restart prometheus


这里填写http://localhost:9090
√ 可以填写localhost的情况:
场景
说明
架构图
1. Grafana和Prometheus在同一台服务器
最常用的场景,所有组件部署在一台机器
[Grafana] ←→ [Prometheus] (同一台服务器)
2. 使用Docker Compose部署
在docker网络内使用服务名访问
[Grafana容器] ←→ [prometheus:9090]
3. 开发测试环境
本地开发时简化配置
本地环境
× 不可以填写localhost的情况:
场景
问题
正确写法
Grafana和Prometheus在不同服务器
localhost指向Grafana自身,找不到Prometheus
http://192.168.157.XXX:9090
使用容器且未配置网络
容器内的localhost是容器自己
http://宿主机IP:9090 或服务名
生产环境多实例部署
需要明确的网络可达性
使用内部域名或IP




当然我们可以选择合适的仪表盘展示数据


可以看见nodes全是up,但在此之前,应该都是down


Download | Prometheus

tar -zxvf mysqld_exporter-0.18.0.linux-amd64.tar.gz
mv mysqld_exporter-0.18.0.linux-amd64 /usr/local/mysql_exporter
cd /usr/local/mysql_exporter
#配置数据库的信息
vim /usr/local/mysql_exporter/my-exporter.cnf
[client]
user=root
password=xxxx #填写自己的密码
host=localhost
port=3306
vim /etc/systemd/system/mysqld_exporter.service
[Unit]
Description=mysqld_exporter
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/mysql_exporter/mysqld_exporter --config.my-cnf=/usr/local/mysql_exporter/my-exporter.cnf
Restart=on-failure
[Install]
WantedBy=multi-user.target
# 重新加载系统配置
systemctl daemon-reload
# 开机启动
systemctl enable mysqld_exporter.service
# 启动服务
systemctl start mysqld_exporter
# 查看状态
systemctl status mysqld_exporter

vim /usr/local/prometheus/prometheus.yml
- job_name: 'mysql_exporter'
static_configs:
- labels:
instance: master:3306
targets:
- 192.168.157.80:9104 # 主库MySQL Exporter地址
- labels:
instance: slave1:3306
targets:
- 192.168.157.81:9104 # 从库81 MySQL Exporter地址
- labels:
instance: slave2:3306
targets:
- 192.168.157.82:9104 # 从库82 MySQL Exporter地址


此时可以看见,mysql-master-slave已经是up


作用:操作系统指标采集器
关键监控指标:
作用:MySQL数据库指标采集器
关键监控指标:
作用:监控数据中枢-收集,存储,查询
作用:数据可视化平台-监控仪表盘
典型仪表板:
作用:告警管理中枢-去重,分组,路由通知


最适合初学者的MySQL监控模板
现代化监控模板
简洁版系统监控
专注主从复制监控
存储引擎深度监控
数据库性能分析专家
从Zabbix迁移用户的友好选择