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

Posted 阿提说说

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Prometheus 监控云Mysql和自建Mysql(多实例)相关的知识,希望对你有一定的参考价值。

本文您将了解到 Prometheus如何配置才能监控云mysql(包括阿里云、腾讯云、华为云)和自建Mysql。

Prometheus 提供了很多种Exporter,用于监控第三方系统指标,如果没有提供也可以根据Exporter规范自定义Exporter。

本文将通过MySQL server exporter 来监控Mysql指标,最新版的exporter 支持Mysql >= 5.6或者MariaDB >= 10.3,如果是老的Mysql版本你可能需要选择较早版本,本文使用的版本为:v0.14.0(不支持一个Exporter多Mysql实例),支持多实例见本文扩展部分

部署MySQL Exporter

1、从https://prometheus.io/download/下载 最新版本的对应环境压缩包


2、Docker 部署

docker run -d -p 9104:9104 -e DATA_SOURCE_NAME="user:password@(mysql_address:3306)/database" prom/mysqld-exporter

配置文件

1、创建MySQL授权账号,用于Exporter连接MySQL

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

建议给账号设置最大连接数,防止监控连接对MySQL造成过高负载

2、修改prometheus.yml,加入静态监控

  - job_name: 'mysql'
    scrape_interval: 5s
    static_configs:
      - targets: ['192.168.0.102:9104'] 

启动

1、启动MySQL Exporter
如果是压缩包,使用如下命令启动,如果用Docker 部署见上述说明

nohup ./mysqld_exporter --config.my-cnf=<path_to_cnf> &

启动后访问host:9104/metrics地址,正常会出现如下很多的mysql开头的指标:

2、启动 Prometheus
使用命令 或者 Docker 重启 或者 项reload地址发送POST请求重载配置文件(前提开启了--web.enable-lifecycle)

检查targets是否正确注册,如图:

导入Grafana

可以使用该开源面板https://grafana.com/grafana/dashboards/7362-mysql-overview/,在Grafana中进行导入,有部分指标没数据,可以进行适当调整,如图所示:

扩展

同一个Exporter监控多个Mysql实例

官方最新的main分支已经支持了监控多实例,但由于过去1年了还没发布,我们需要自己编译源码,并且ReadMe也有一些错误,不过在这里我已经踩过坑了。

1、下载编译文件
从该地址下载编译文件,打包自己的Docker镜像,或者直接运行
https://download.csdn.net/download/weixin_40972073/87529490

2、创建mysql.my.cnf文件

[client]
user = username
password = password
[client2]
user = username2
password = password2

3、配置prometheus

  - job_name: mysql1 
    metrics_path: /probe
    params:
      auth_module: [client]
    static_configs:
      - targets:
        - mysql_host:port
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: mysql_exporter_host:port

  - job_name: mysql2 
    metrics_path: /probe
    params:
      auth_module: [client2]
    static_configs:
      - targets:
        - mysql2_host:port
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: mysql_exporter_host:port

4、验证
查看是否正确注册,及指标是否正确读取

5、导入多实例Grafana面板

MySQL Exporter命令

v0.14.0 版本命令

NameDescription
config.my-cnfMySQL认证信息配置路径 (default: ~/.my.cnf)
log.level日志记录级别 (default: info)
exporter.lock_wait_timeout设置锁定超时等待时间,避免长时间锁定,秒为单位(default: 2)
exporter.log_slow_filter添加log_slow_filter以避免抓取时的慢查询日志记录。注意:Oracle MySQL不支持。
tls.insecure-skip-verify忽略tls的验证错误
web.config.fileweb配置文件路径配置
web.listen-addressweb页面监听地址
web.telemetry-path指标暴露地址
version打印的版本信息

总结

对于各大云厂商提供的MySQL,虽然云厂商已经自带了监控工具,如果有需要同样也可以通过该方式对MySQL监控。

  1. Prometheus 提供的 告警规则、Grafana大屏和告警通知 示例

Prometheus 系列文章

  1. Prometheus 的介绍和安装
  2. 直观感受PromQL及其数据类型
  3. PromQL之选择器和运算符
  4. PromQL之函数
  5. Prometheus 告警机制介绍及命令解读
  6. Prometheus 告警模块配置深度解析
  7. Prometheus 配置身份认证
  8. Prometheus 动态拉取监控服务
  9. Prometheus 监控云Mysql和自建Mysql
  10. Prometheus 监控服务器
  11. Prometheus 监控Redis
  12. Prometheus 监控消息队列
  13. Prometheus 监控ES
  14. Prometheus 自定义监控
  15. Prometheus 告警接入钉钉、邮箱、飞书
  16. Prometheus 高可用部署

以上是关于Prometheus 监控云Mysql和自建Mysql(多实例)的主要内容,如果未能解决你的问题,请参考以下文章

云数据库和自建数据库有什么区别?优缺点是什么?

超级实用,解密云原生监控技术,使用prometheus轻松搞定redis监控

云计算监控—Prometheus监控系统(文末赠书)

监控之美——Prometheus云原生监控

72-云原生监控-Prometheus实现Docker监控

云原生之Docker实战使用Docker部署Prometheus 服务监控系统