MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL

Posted 悦专栏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL相关的知识,希望对你有一定的参考价值。

作者简介

马听,多年 DBA 实战经验,对 mysql、 Redis、ClickHouse 等数据库有一定了解,专栏《一线数据库工程师带你深入理解 MySQL》、《Redis 运维实战》作者。


这一节内容来聊聊通过 Prometheus 获取 MySQL 的监控数据,并通过 Grafana 展示的过程。首先来看整体架构图:

1 架构图

MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL
如上图,通过 mysql_exporter 获取 MySQL 的监控数据,通过 node_exporter 获得 Linux 服务器的监控数据。将获得的监控数据传到 Prometheus 中,最终通过 Grafana 展示出来,效果如下图:
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL
除了展示监控数据,在文章的最后也会增加邮件告警的配置。

2 实验环境介绍

实验环境大致如下:
  • 被监控的 MySQL 机器:192.168.150.123(MySQL 版本:8.0.22);

  • Prometheus 服务器:192.168.150.253(Prometheus 版本:2.25.2);

  • Grafana 服务器:192.168.21.126(Grafana 版本:7.4.5);

  • 服务器版本均为:CentOS 7.4;

  • 防火墙、Selinux 均关闭。


3 部署 Prometheus

https://prometheus.io/download/ 中下载对应的版本。
解压 Prometheus 安装包
 
   
   
 
‍‍‍‍‍‍‍‍
tar zxvf prometheus-2.25.2.linux-amd64.tar.gz -C /opt

创建软链接
ln -s /opt/prometheus-2.25.2.linux-amd64/ /opt/prometheus

修改配置文件 /opt/prometheus/prometheus.yml
# my global configglobal: scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. # scrape_timeout is set to the global default (10s).
# Alertmanager configurationalerting: alertmanagers: - static_configs: - targets: # - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.rule_files: # - "first_rules.yml" # - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:# Here it's Prometheus itself.scrape_configs: # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. - job_name: 'prometheus'
# metrics_path defaults to '/metrics' # scheme defaults to 'http'.
static_configs: - targets: ['192.168.150.253:9090']
这里只对 scrape_configs(被监控机器的配置) 中的 static_configs 进行了修改,targets 中的内容改成了 prometheus 所在机器的 IP 加端口。 也就是暂时配置只监控本机。



启动 Prometheus
nohup /opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml &
访问 Prometheus 页面: http://192.168.150.253:9090/
可以看到如下界面:
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL

点击 Status --> Targets,可以看到被监控的目标机器,如下:
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL
点击对应的 Endpoint,则可获得监控数据,如下图:
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL
到这里,Prometheus 已经部署完成。

4 部署 node_exporter 组件

node_exporter 是 Prometheus 用户获取 Linux 指标的插件。Github 地址:https://github.com/prometheus/node_exporter。这里聊聊它的部署。
首先在 https://prometheus.io/download/ 中找到对应的 node_exporter 版本。
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL
将 node_exporter 传到需要监控的 MySQL 机器上,进行解压:
 
   
   
 

tar zxvf node_exporter-1.1.2.linux-amd64.tar.gz -C /opt/


创建软链接:

ln -s /opt/node_exporter-1.1.2.linux-amd64/ /opt/node_exporter
启动
nohup /opt/node_exporter/node_exporter &

浏览器输入:http://192.168.150.123:9100/metrics,如果有类似如下数据,则表示 node_exporter 部署完成。
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL


5 部署 mysqld_exporter 组件

mysqld_exporter 是 Prometheus 的 MySQL 指标导出插件。Github 地址:https://github.com/prometheus/mysqld_exporter。这里来聊聊它的部署。
首先在 https://github.com/prometheus/mysqld_exporter/releases 中找到对应的 mysqld_exporter 版本。
将 mysqld_exporter 传到需要监控的 MySQL 机器上,进行解压:
tar zxvf mysqld_exporter-0.12.1.linux-amd64.tar.gz -C /opt

创建软链接
ln -s /opt/mysqld_exporter-0.12.1.linux-amd64/ /opt/mysqld_exporter

在 MySQL 上创建监控用户
create user 'exporter'@'localhost'  IDENTIFIED BY 'eXpIHB666QWE!';
GRANT SELECT, PROCESS, SUPER, REPLICATION CLIENT, RELOAD ON *.* TO 'exporter'@'localhost';

新建一个配置文件:
vim /opt/mysqld_exporter/mysqld_exporter.cnf
配置 MySQL 监控用户信息:
[client]user=exporterpassword=eXpIHB666QWE!
启动 mysqld_exporter

nohup /opt/mysqld_exporter/mysqld_exporter --config.my-cnf=/opt/mysqld_exporter/mysqld_exporter.cnf &

浏览器输入:http://192.168.150.123:9104/metrics,可获得 MySQL 监控数据,如下图(部分数据):
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL


6 配置 Prometheus 获取监控数据

在 prometheus 的机器上,修改 prometheus 的配置文件 /opt/prometheus/prometheus.yml,增加 node_exporter 和 mysqld_exporter 的配置:

# my global configglobal: scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. # scrape_timeout is set to the global default (10s).
# Alertmanager configurationalerting: alertmanagers: - static_configs: - targets: # - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.rule_files: # - "first_rules.yml" # - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:# Here it's Prometheus itself.scrape_configs: # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. - job_name: 'prometheus'
# metrics_path defaults to '/metrics' # scheme defaults to 'http'.
static_configs: - targets: ['192.168.150.253:9090'] - job_name: 'mysql-123' static_configs: - targets: ['192.168.150.123:9104'] - job_name: 'node-123' static_configs: - targets: ['192.168.150.123:9100']
重启 prometheus
pkill prometheusnohup /opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml &

访问 Prometheus 页面:http://192.168.150.253:9090/,点击 Status --> Targets,可以看到新增加的被监控节点。
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL

回到主界面,搜索 MySQL 相关参数,比如:innodb_buffer_pool_size:
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL

选择对应的参数,则可看到监控图,如下:
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL


7 部署 Grafana

Grafana 的 Github 地址:https://github.com/grafana/grafana
可以在 https://grafana.com/grafana/download 中选择适合自己操作系统的包。然后下载对应的包,如下:
wget https://dl.grafana.com/oss/release/grafana-7.4.5-1.x86_64.rpmyum install grafana-7.4.5-1.x86_64.rpm -y

启动 Grafana
systemctl start grafana-server.service

登录 Grafana  WEB 界面:http://192.168.21.126:3000/,显示如下:
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL

用户名密码都是 admin。登录后,会让我们修改密码,则按提示操作即可,当然也可以点击跳过。

这里就可以看到 Grafana 的主界面了:

MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL


8 为 Grafana 配置 Prometheus 数据源

按下图进入数据源添加界面:
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL
点击 “Add data source”

如下图,选择“Prometheus”数据源:
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL
如下图,增加 Prometheus 的 URL 即可:
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL
点击最下方的 Save & Test,显示“Data source is working”,则表示数据源配置正常:
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL


9 Grafana 展示 Linux 的监控数据

按照下图的方式进入模板导入界面:
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL
在 “Import via grafana.com” 下方输入:11074
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL
点击 Load 会出现如下界面:
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL
将 Name 改成你希望定义的名字,在 VictoriaMetrics 位置选择之前创建的 Prometheus 数据源,如下图:
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL
点击 “Import”,会自动跳转到如下界面:
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL
到这里,完成了 Grafana 展示 Prometheus 中 Linux 操作系统的监控数据。

10 Grafana 展示 MySQL 的监控数据

按照下图的方式进入模板导入界面:
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL
在 “Import via grafana.com” 下方输入 7362:
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL
或者在 https://grafana.com/grafana/dashboards/7362 页面下载 JSON 模板,然后点击 “Upload JSON file” 导入,然后会显示如下信息(目前还有其他一些模板,比如 https://github.com/percona/grafana-dashboards,有兴趣的可以尝试一下):
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL
在 prometheus 选项选择之前创建的 Prometheus 数据源,点击 “Import”,会自动跳转到如下界面:
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL
到这里,完成了 Grafana 展示 Prometheus 中 MySQL 的监控数据。

11 告警配置

对 Prometheus 中获取的数据进行告警配置,目前有很多方式,比如:

  • 通过 Grafana 配置邮件告警

  • 等等

本节内容就拿 Grafana 配置邮件告警来举例,PrometheusAlert 在后面的内容中再跟朋友们介绍。编辑 Grafana 配置文件 /etc/grafana/grafana.ini,按下图修改 [smtp] 部分配置:
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL
重启 Grafana
systemctl start grafana-server.service

按如下方式进入通知渠道创建界面
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL

填写好收件人,点击 “Test”,如果能正常收到邮件,则说明配置正常。
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL
如果测试正常,则点击“Save”保存配置。

12 告警测试

在前面导入的 MySQL Overview 中,选择一个监控项,点击 More-->Duplicate 再复制一个图出来:
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL
对复制出来的图点击 Edit,如下图:
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL
则进入下图:
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL
将里面的变量都改为常量,如下图:
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL
进入 Alert,再点击 Create Alert,进入如下界面:
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL
这里解释一下 query(A,5m,now) IS ABOVE 5:
  • A 对 A 类(A 是 Query 中定义的)指标;
  • 5m,now 表示从 5 分钟前到现在;
  • IS ABOVE 5 定义阈值的类型和阈值。
更多内容可参考:https://grafana.com/docs/grafana/latest/alerting/create-alerts/
并填下好下方的收件人和 Message:
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL
其中,收件人“dba”就是我们在 12.3.11 步骤配置的收件人。
配置好之后,点击下面的 “Test rule”,如果出现以下界面,则表示触发器配置正常:
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL
因为上面我们是对 mysql_global_status_threads_connected 设置的阈值,所以我们可以在测试的 MySQL 中,构造超过 5 个连接,测试是否可以邮件告警。
如下图,就是告警效果:
MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL
到这里,通过 Prometheus + Grafana 监控 MySQL 的内容就讲完了。


如果阅读本篇文章有遇到任何疑问
欢迎加入 “MySQL 提升” 交流社群
群内会有作者和其他 MySQL 大牛一起解答
群内也会分享工作经验、面试技巧、其他 MySQL 干货等
入群请添加群秘微信,备注“MySQL提升



LIKECOLUMN

悦专栏



悦专栏 ,从小白到大神的起点




以上是关于MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL的主要内容,如果未能解决你的问题,请参考以下文章

prometheus监控之Mysql监控

Prometheus+Grafana监控MySQL浅析

Prometheus+Grafana可视化监控MySQL

Prometheus+Grafana可视化监控MySQL

Prometheus 监控云Mysql和自建Mysql(多实例)

如何使用 Prometheus 查询不同的 mySQL 数据库进行业务监控