写点什么

Prometheus Exporter (十四)MySQL Server Exporter

作者:耳东@Erdong
  • 2021 年 12 月 02 日
  • 本文字数:2045 字

    阅读完需:约 7 分钟

Prometheus Exporter (十四)MySQL Server Exporter

本文已经收录在 Prometheus 合集 Prometheus 都可以采集那些指标?-- 常用 Exporter 合集 中。


前边聊了那么多,今天来看看数据库的监控采集。数据库有很多种,今天主要来看 关系型数据库,会在未来三天把关系型数据库的 3 个主流发行版都过一下,主要是 MySQL 、MSSQL、PostgreSQL。今天我们先来看 MySQL 。


MySQL 这个名字的由来是作者 Monty 的女儿叫 My,然后在后边加了个 SQL,这个 SQL 还是结构化查询语言(Structured Query Language)的意思。


针对 MySQL 的监控 Prometheus 官方提供了一个 MySQL Server Exporter ,他的官方仓库地址是 https://github.com/prometheus/mysqld_exporter ,当前最新版本是 v0.13.0 ,发布于 2021 年 5 月 18 日。


MySQL Server Exporter 支持 MySQL 5.6 版本以上,包含 5.6 ,支持 MariaDB 10.2 版本及以上。当 MySQL 或者 MariaDB 版本小于 5.6 的时候,有部分采集模块会不支持,采集到的指标会变少。

安装运行

想要使用 MySQL Server Exporter 采集指标,需要先在 MySQL 实例中创建监控账号,并且授权。可以使用如下语句来实现。


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


在创建监控账号的时候请一定要为这个用户设置一个最大连接数的限制,防止频繁获取监控指标导致服务器资源使用率升高,机器过载。


创建好的监控账号和密码可以通过环境变量传递给 MySQL Server Exporter ,也可以通过配置文件传递。


环境变量传递使用如下方法:


export DATA_SOURCE_NAME='user:password@(hostname:3306)/'./mysqld_exporter <flags>
复制代码


配置文件的话一般是 ~/.my.cnf ,需要说明的是这个 my.cnf 不是数据库的配置文件 my.cnf ,这两个文件在不同的为准,内容也不一样,是各自的程序启动配置文件。


./mysqld_exporter <flags>
复制代码


MySQLd Exporter 的 my.cnf 文件内容如下:


[client]host=localhostport=3306user=exporterpassword=xxx
复制代码


关于采集多个 MySQL 实例,有这样一个 Pull Request https://github.com/prometheus/mysqld_exporter/pull/504 ,代码已经提交了,但是还没合并。


打开采集指标类的命令行参数格式是这样的,打开采集使用这种参数 --collect.auto_increment.columns ,如果要关闭需要在前面加上 no- 的前缀,比如 --no-collect.auto_increment.columns ,这种参数格式是在 v0.10.0 以后使用的。在之前版本需要通过这样的参数来打开或者关闭 -collect.auto_increment.columns=[true|false]


MySQL Server Exporter 支持非常多的指标采集类型,详细的指标类型描述可以参考 Collector Flags


常用的启动参数如下,使用这些参数可以将


  • config.my-cnf Path to .my.cnf file to read MySQL credentials from. (default: ~/.my.cnf)

  • log.level Logging verbosity (default: info)

  • exporter.lock_wait_timeout Set a lock_wait_timeout (in seconds) on the connection to avoid long metadata locking. (default: 2)

  • exporter.log_slow_filter Add a log_slow_filter to avoid slow query logging of scrapes. NOTE: Not supported by Oracle MySQL.

  • web.config.file Path to a web configuration file

  • web.listen-address Address to listen on for web interface and telemetry.

  • web.telemetry-path Path under which to expose metrics.version Print the version information.


MySQLd Exporter 也支持容器部署,供参考的启动命令是


docker network create my-mysql-networkdocker pull prom/mysqld-exporter:v0.13.0
docker run -d \ -p 9104:9104 \ --network my-mysql-network \ -e DATA_SOURCE_NAME="user:password@(hostname:3306)/" \ prom/mysqld-exporter:v0.13.0
复制代码

TLS 和 Basic Authentication

MySQLd Exporter 是支持 TLS 和 Basic Authentication 的。


在使用 TLS 和 Basic Authentication 的时候,需要通过 Web 配置文件来传递参数,使用 --web.config.file 参数来指定 Web 配置文件,Web 配置文件的格式可以参考 Web configuration


数据库心跳

当使用 collect.heartbeat 参数打开心跳监控数据收集以后,MySQLd Exporter 将通过心跳机制测量复制延迟。Pt-heartbeat 是受支持的参考心跳实现。

过滤开启的监控项。

MySQLd Exporter 开启默认采集项以后会暴露所有的指标,这样可以在对比不同系统指标的时候防止出现指标错误或者不一致的情况。


对于高级使用,可以向 MySQLd Exporter 传递一个可选的收集器列表来筛选指标。Prometheus 配置中可以使用如下方式进行配置。


params:  collect[]:  - foo  - bar
复制代码


这对于让不同的 Prometheus 服务器收集目标的特定指标非常有用。

小结

建议使用 MySQLd Exporter 的时候做好标准化部署和自动发现,这样可以提高运维效率,要不就变成配置小王子了。


另外一些 Grafana Dashboard 和 Prometheus 的告警规则可以参考 https://github.com/prometheus/mysqld_exporter/tree/main/mysqld-mixin

发布于: 13 小时前阅读数: 13
用户头像

耳东@Erdong

关注

还未添加个人签名 2020.05.24 加入

主要研究分享运维技术,专注于监控、CICD、操作系统、云原生领域,公众号【耳东学堂】,知识星球同名,坚持原创,希望能和大家在运维路上结伴而行 邮箱:erdong@mail.erdong.site

评论

发布
暂无评论
Prometheus Exporter (十四)MySQL Server Exporter