从零搭建 Prometheus 监控 MySQL:含二进制安装、授权、exporter 配置全流程

1、部署数据库

这里使用目前MySQL8.0.32版本,采用MySQL官方发布的二进制版本进行安装,下载后的二进制版本名称大致为mysql-8.0.32-linux-glibc2.12-x86_64.tar.xz,下面是在mysqldb主机(almalinux9)上安装MySQL的过程:

复制代码
[root@mysqldb ~]# xz -d mysql-8.0.32-linux-glibc2.12-x86_64.tar.xz
[root@mysqldb ~]# tar xvf mysql-8.0.32-linux-glibc2.12-x86_64.tar  -C /usr/local
[root@mysqldb ~]# cd /usr/local/
[root@mysqldb ~]# mv mysql-8.0.32-linux-glibc2.12-x86_64 mysql
[root@mysqldb ~]# cd mysql
[root@mysqldb mysql]# useradd mysql
[root@mysqldb mysql]# mkdir etc logs data
[root@mysqldb mysql]# more /usr/local/mysql/etc/my.cnf 
[mysqld]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
log-error=/usr/local/mysql/logs/mysqld.log
pid-file=/usr/local/mysql/logs/mysqld.pid
[root@mysqldb mysql]# chown -R mysql:mysql   /usr/local/mysql
[root@mysqldb mysql]# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
[root@mysqldb mysql]# /usr/local/mysql/support-files/mysql.server start

当在命令行登录mysql的时候,由于二进制版本发布环境的不同,在almalinux9/rhel9环境下,可能会出现依赖库文件问题,下面是错误信息:

复制代码
[root@mysqldb mysql]# /usr/local/mysql/bin/mysql -uroot -p
bin/mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory

这就是二进制文件编译环境不同导致的,解决方法如下:

复制代码
[root@mysqldb mysql]# ll /usr/lib64/libtinfo.so.6
lrwxrwxrwx. 1 root root 15  2月 10  2022 /usr/lib64/libtinfo.so.6 -> libtinfo.so.6.2
[root@mysqldb mysql]# ln -s /usr/lib64/libtinfo.so.6.2  /usr/lib64/libtinfo.so.5
[root@mysqldb mysql]# ll /usr/lib64/libtinfo.so.5
lrwxrwxrwx 1 root root 26  3月 14 15:02 /usr/lib64/libtinfo.so.5 -> /usr/lib64/libtinfo.so.6.2

做完软连接之后,就可以顺利登陆mysql命令行了。

Mysql启动成功后,需要重置root密码,临时密码在上面定义的mysql日志文件/usr/local/mysql/logs/mysqld.log中可以查到。登录mysql命令行,并重置密码,执行如下SQL命令:

复制代码
[root@mysqldb mysql]#  /usr/local/mysql/bin/mysql -uroot -p
Enter password:  #输入临时密码
mysql> alter user 'root'@'localhost' identified by 'abc123456';
mysql>  quit

至此,MySQL部署完成。

2、在数据库上创建用户

紧接着上面的操作,在数据库上创建一个监控用户,并做授权:

复制代码
SQL> CREATE USER 'mysqld_exporter'@'localhost' IDENTIFIED BY 'mysqld123456' WITH MAX_USER_CONNECTIONS 3;
SQL> GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysqld_exporter'@'localhost';

注意:在创建用户的时候,推荐执行 MAX_USER_CONNECTIONS参数,避免我们监控使用过多的数据库连接数,导致数据库压力过大。

3、部署mysqld_exporter监控程序

下载mysqld_exporter监控程序,然后将mysqld_exporter放到/usr/local目录下,执行如下操作:

复制代码
[root@mysqldb local]# tar zxvf mysqld_exporter-0.15.0.linux-amd64.tar.gz -C /usr/local
[root@mysqldb local]# cd /usr/local
[root@mysqldb prometheus]# mv mysqld_exporter-0.15.0.linux-amd64  mysqld_exporter
[root@mysqldb prometheus]# cd mysqld_exporter
[root@mysqldb prometheus]# vi .my.cnf
[client]
user=mysqld_exporter
password=mysqld123456
host = 127.0.0.1
port = 3306
[root@mysqldb prometheus]# chown -R mysql:mysql /usr/local/mysqld_exporter

4、编写启动mysqld_exporter服务脚本

用于启动mysqld_exporter的脚本内容如下:

复制代码
[root@mysqldb local]# vim /usr/lib/systemd/system/mysqld_exporter.service
[Unit]
Description=mysqld_exporter
After=network.target
[Service]
Type=simple
User=mysql
ExecStart=/usr/local/mysqld_exporter/mysqld_exporter --web.listen-address=0.0.0.0:9104 --config.my-cnf=/usr/local/mysqld_exporter/.my
.cnf \
    --collect.global_status \
    --collect.auto_increment.columns \
    --collect.info_schema.processlist \
    --collect.binlog_size \
    --collect.info_schema.tablestats \
    --collect.global_variables \
    --collect.info_schema.innodb_metrics \
    --collect.info_schema.query_response_time \
    --collect.info_schema.userstats \
    --collect.info_schema.tables \
    --collect.perf_schema.tablelocks \
    --collect.perf_schema.file_events \
    --collect.perf_schema.eventswaits \
    --collect.perf_schema.indexiowaits \
    --collect.perf_schema.tableiowaits \
    --collect.slave_status \
    --collect.info_schema.innodb_tablespaces \
    --collect.info_schema.innodb_cmp \
    --collect.info_schema.innodb_cmpmem
Restart=on-failure
[Install]
WantedBy=multi-user.target

几个重要参数,含义如下:

  • --config.config.my-cnf 指定export连接数据库配置文件的路径
  • --web.listen-address 指定监听的地址,端口
  • --log.level 指定日志级别
  • --collect.*:表示启用对应模块指标收集

接着,启动mysqld_exporter服务即可:

复制代码
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl start mysqld_exporter

mysqld_exporter服务启动之后,就可以通过http://ip:9104/metrics 访问到mysqld_exporter收集到的mysql状态数据。

最后,还要将数据对接到prometheus server,打开prometheus.yml添加以下内容:

复制代码
- job_name: 'mysql'
  static_configs:
    - targets: ['192.168.38.148:9104']
      labels:
        instance: mysqld-exporter

执行prometheus配置刷新:

复制代码
curl -XPOST localhost:9090/-/reload

5、监控mysql几个重要的指标

  • 延迟监控

主要是慢查询,关注慢查询数量。

  • 流量

统计 SELECT、UPDATE、DELETE、INSERT 等语句执行的数量。

  • 错误

错误量这类指标有多个应用场景,比如客户端连接 MySQL 失败了,或者语句发给MySQL,执行的时候失败了,都需要有失败计数。另外就是最大连接数的监控。

MySQL 指标(直接可用)

复制代码
mysql_up                 # MySQL 是否存活
mysql_global_status_slow_queries  # 慢查询数
mysql_global_status_connections   # 连接数
mysql_global_status_max_used_connections  # 最大连接使用数
mysql_global_status_select_count    # SELECT 总数
mysql_global_status_insert_count    # INSERT
mysql_global_status_update_count    # UPDATE
mysql_global_status_delete_count    # DELETE
mysql_global_status_errors_count    # 错误数

6.Grafana + Prometheus 可视化

Dashboard中import导入mysql(7860)监控大屏模板

相关推荐
KaMeidebaby1 小时前
卡梅德生物技术快报|噬菌体筛选全流程技术方案:弧菌抑菌菌株筛选、特性鉴定与效果测试
前端·数据库·其他·百度·新浪微博
yubin12855709231 小时前
mysql正则函数REGEXP
android·数据库·mysql
塔能物联运维1 小时前
存量机房低成本改造:塔能两相液冷实现投入与效益双赢
大数据·数据库·人工智能
2401_850491651 小时前
PHP 中处理会话数组时的类型错误解析与修复指南
jvm·数据库·python
ㄟ留恋さ寂寞1 小时前
如何修改数据库实例名_ORACLE_SID环境变量重命名实战
jvm·数据库·python
专注API从业者1 小时前
Open Claw 实战:用淘宝商品 API 实现自动化监控选品系统
大数据·运维·数据库·自动化
没文化的阿浩1 小时前
【Linux系统】Ext系列文件系统
linux·运维·电脑
2401_850491651 小时前
使用 curl 调用 Go 标准库 RPC 服务(JSON-RPC 协议详解)
jvm·数据库·python
珂玥c1 小时前
添加node节点到k8s集群+配置网络插件flannel
云原生·容器·kubernetes