Prometheus+Grafana 监控 MySQL

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

1 架构图

Prometheus+Grafana 监控 MySQL_第1张图片

如上图,通过 mysql_exporter 获取 MySQL 的监控数据,通过 node_exporter 获得 Linux 服务器的监控数据。将获得的监控数据传到 Prometheus 中,最终通过 Grafana 展示出来,效果如下图:

Prometheus+Grafana 监控 MySQL_第2张图片

除了展示监控数据,在文章的最后也会增加邮件告警的配置。

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=` 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/

可以看到如下界面:

Prometheus+Grafana 监控 MySQL_第3张图片

点击 Status --> Targets,可以看到被监控的目标机器,如下:

Prometheus+Grafana 监控 MySQL_第4张图片

点击对应的 Endpoint,则可获得监控数据,如下图:

Prometheus+Grafana 监控 MySQL_第5张图片

到这里,Prometheus 已经部署完成。

4 部署 node_exporter 组件

node_exporter 是 Prometheus 用户获取 Linux 指标的插件。Github 地址:https://github.com/prometheus/node_exporter。这里聊聊它的部署。

首先在 https://prometheus.io/download/ 中找到对应的 node_exporter 版本。

Prometheus+Grafana 监控 MySQL_第6张图片

将 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 部署完成。

Prometheus+Grafana 监控 MySQL_第7张图片

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 监控数据,如下图(部分数据):

Prometheus+Grafana 监控 MySQL_第8张图片

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=` 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,可以看到新增加的被监控节点。

Prometheus+Grafana 监控 MySQL_第9张图片

回到主界面,搜索 MySQL 相关参数,比如:innodb_buffer_pool_size:

Prometheus+Grafana 监控 MySQL_第10张图片

选择对应的参数,则可看到监控图,如下:

Prometheus+Grafana 监控 MySQL_第11张图片

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/,显示如下:

Prometheus+Grafana 监控 MySQL_第12张图片

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

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

Prometheus+Grafana 监控 MySQL_第13张图片

8 为 Grafana 配置 Prometheus 数据源

按下图进入数据源添加界面:

Prometheus+Grafana 监控 MySQL_第14张图片

点击 “Add data source”

如下图,选择“Prometheus”数据源:

Prometheus+Grafana 监控 MySQL_第15张图片

如下图,增加 Prometheus 的 URL 即可:

Prometheus+Grafana 监控 MySQL_第16张图片

点击最下方的 Save & Test,显示“Data source is working”,则表示数据源配置正常:

Prometheus+Grafana 监控 MySQL_第17张图片

9 Grafana 展示 Linux 的监控数据

按照下图的方式进入模板导入界面:

Prometheus+Grafana 监控 MySQL_第18张图片

在 “Import via grafana.com” 下方输入:11074

Prometheus+Grafana 监控 MySQL_第19张图片

点击 Load 会出现如下界面:

Prometheus+Grafana 监控 MySQL_第20张图片

将 Name 改成你希望定义的名字,在 VictoriaMetrics 位置选择之前创建的 Prometheus 数据源,如下图:

Prometheus+Grafana 监控 MySQL_第21张图片

点击 “Import”,会自动跳转到如下界面:

Prometheus+Grafana 监控 MySQL_第22张图片

到这里,完成了 Grafana 展示 Prometheus 中 Linux 操作系统的监控数据。

10 Grafana 展示 MySQL 的监控数据

按照下图的方式进入模板导入界面:

Prometheus+Grafana 监控 MySQL_第23张图片

在 “Import via grafana.com” 下方输入 7362:

Prometheus+Grafana 监控 MySQL_第24张图片

或者在 https://grafana.com/grafana/dashboards/7362 页面下载 JSON 模板,然后点击 “Upload JSON file” 导入,然后会显示如下信息(目前还有其他一些模板,比如 https://github.com/percona/grafana-dashboards,有兴趣的可以尝试一下):

Prometheus+Grafana 监控 MySQL_第25张图片

在 prometheus 选项选择之前创建的 Prometheus 数据源,点击 “Import”,会自动跳转到如下界面:

Prometheus+Grafana 监控 MySQL_第26张图片

到这里,完成了 Grafana 展示 Prometheus 中 MySQL 的监控数据。

11 告警配置

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

  • 通过 Grafana 配置邮件告警

  • 通过开源的运维告警中心消息转发系统:PrometheusAlert,Github 地址:https://github.com/pandorasongs/PrometheusAlert。

  • 等等

本节内容就拿 Grafana 配置邮件告警来举例,PrometheusAlert 在后面的内容中再跟朋友们介绍。编辑 Grafana 配置文件 /etc/grafana/grafana.ini,按下图修改 [smtp] 部分配置:

Prometheus+Grafana 监控 MySQL_第27张图片

重启 Grafana

systemctl start grafana-server.service

按如下方式进入通知渠道创建界面

Prometheus+Grafana 监控 MySQL_第28张图片

填写好收件人,点击 “Test”,如果能正常收到邮件,则说明配置正常。

Prometheus+Grafana 监控 MySQL_第29张图片

如果测试正常,则点击“Save”保存配置。

12 告警测试

在前面导入的 MySQL Overview 中,选择一个监控项,点击 More-->Duplicate 再复制一个图出来:

Prometheus+Grafana 监控 MySQL_第30张图片

对复制出来的图点击 Edit,如下图:

Prometheus+Grafana 监控 MySQL_第31张图片

则进入下图:

Prometheus+Grafana 监控 MySQL_第32张图片

将里面的变量都改为常量,如下图:

Prometheus+Grafana 监控 MySQL_第33张图片

进入 Alert,再点击 Create Alert,进入如下界面:

Prometheus+Grafana 监控 MySQL_第34张图片

这里解释一下 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:

Prometheus+Grafana 监控 MySQL_第35张图片

其中,收件人“dba”就是我们在 12.3.11 步骤配置的收件人。

配置好之后,点击下面的 “Test rule”,如果出现以下界面,则表示触发器配置正常:

Prometheus+Grafana 监控 MySQL_第36张图片

因为上面我们是对 mysql_global_status_threads_connected 设置的阈值,所以我们可以在测试的 MySQL 中,构造超过 5 个连接,测试是否可以邮件告警。

如下图,就是告警效果:

Prometheus+Grafana 监控 MySQL_第37张图片

到这里,通过 Prometheus + Grafana 监控 MySQL 的内容就讲完了。

你可能感兴趣的:(linux,linux,centos,mysql)