配置 Prometheus 通过 query-exporter 自定义 SQL 抓取云上MySQL 监控指标

现今,数据构建和管理方式通常分为自建模式(IaaS)和托管模式(PaaS)。在 Prometheus 监控架构中,对于自建模式,我们通常可以选择使用 node-exportermysql-exporter 采集节点和 MySQL 数据库的数据。

对于托管数据库,由于无法直接访问服务器,我们无法直接采集数据。在这种情况下,我们可以选择以下几种场景进行监控:

  1. 云厂商监控服务: 利用云厂商提供的监控服务,通过集成其监控服务,完成对托管数据库的监控。

  2. 自开发采集服务: 自己开发数据采集服务,通过云服务商提供的 API 或其他方式,定制数据采集和监控流程。

  3. 第三方采集服务: 使用第三方的监控服务,如 query-exporter。这类服务可以通过 SQL 查询的方式直接采集托管数据库中保存在 performance_schema 的数据。

在这种情况下,query-exporter 是一种第三方采集服务,它允许通过 SQL 查询方式采集托管数据库的性能指标,尤其是保存在 performance_schema 的数据。这种灵活的方式允许我们在托管环境中实现数据库监控,并集成到 Prometheus 监控系统中。

1 query-exporter 安装版本与数据库支持

query-exporter 作者当前发布版本关系如下:

1 query-exporter Snaps 安装版 支持数据库如下:

  • PostgreSQL (postgresql://)
  • MySQL (mysql://)
  • SQLite (sqlite://)
  • Microsoft SQL Server (mssql://)
  • IBM DB2 (db2://) on supported architectures (x86_64, ppc64le and s390x)

2 query-exporter 容器版 支持数据库如下:

  • PostgreSQL (postgresql://)
  • MySQL (mysql://)
  • SQLite (sqlite://)
  • Microsoft SQL Server (mssql://)
  • IBM DB2 (db2://)
  • Oracle (oracle://)
  • ClickHouse (clickhouse+native://)

2 创建 query-expoter 访问数据库权限

注意:exporter 的密码不要有 @ 符号,会导致认证错误

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

3 安装 query-exporter

query-exporter支持单一进程采集多数据库实例功能

# 创建 query-expoter 目录,用于为容器提供持久化配置
mkdir -pv /usr/local/query-expoter 
cd /usr/local/query-expoter 
touch config.yaml

4 配置 query-exporter 以 docker 形式启动

通过容器方式启动服务,可以在主机通过容器直接部署,也可以部署到k8s中,示例以容器为准

-v /usr/local/query-expoter/config.yaml:/config.yaml 将本地config.yaml 挂载到 容器的 /config.yaml

-p 将容器9560端口映射到主机

docker run -p 9560:9560/tcp -v "/usr/local/query-expoter/config.yaml:/config.yaml" -d --restart=always  docker.io/adonato/query-exporter:latest

5 配置 query-exporter 的数据库认证

注意:

  • 示例配置构建在 Oracle云(OCI) 托管 MySQL 数据库,其他云厂商托管数据库需提前确认指标数据的存储方式。
  •  OCI云系统性能数据存储: performance_schema 库。
  • 表达式中 metrics 指标的命名与queries.mysql_mem_seconds.metrics 存在对应关系。
  • 表达式中 queries.mysql_mem_seconds.sql输出的列,要与queries.mysql_mem_seconds.metrics名称对应,示例为内存数据采集。
# vim /usr/local/query-expoter/config.yaml

########################
支持多 databases 配置
########################

databases:
  db1:
    dsn: mysql://exporter:[email protected]:3306/performance_schema
    labels:
      modes: Primary DB system
      db_instance: oci.rds.com:3306
  db2:
    dsn: mysql://exporter:[email protected]:3306/performance_schema
    labels:
      modes: Read replicas DB system
      db_instance: oci.mds.com:3306



########################
查询指标提前声明对应指标类型
指标数据主要为使用率指标
类型采用 gauge

注意:配置中 metrics 指标的命名与queries.mysql_mem_seconds.metrics 存在对应关系
########################
metrics:
  oci_mds_mem_total_bytes:
    type: gauge
    description: A sample gauge
  oci_mds_mem_free_bytes:
    type: gauge
    description: A sample gauge
  oci_mds_mem_used_bytes:
    type: gauge
    description: A sample gauge
  oci_mds_mem_available_bytes:
    type: gauge
    description: A sample gauge


########################
注意:配置中 metrics 指标的命名与queries.mysql_mem_seconds.metrics 存在对应关系

datebases中的db1和db2与 datbases 配置对应

sql输出的列,要与queries.mysql_mem_seconds.metrics名称对应,示例为内存数据采集
########################
queries:
  mysql_mem_seconds:
    interval: 15
    databases: [db1,db2]
    metrics:
      - oci_mds_mem_total_bytes
      - oci_mds_mem_free_bytes
      - oci_mds_mem_used_bytes
      - oci_mds_mem_available_bytes

    sql: >
      select
          total_bytes as oci_mds_mem_total_bytes,
          free_bytes as oci_mds_mem_free_bytes,
          used_bytes as oci_mds_mem_used_bytes,
          available_bytes as oci_mds_mem_available_bytes
      from performance_schema.system_memory_stats;

6 Prometheus 配置 query_exporter

- job_name: "query_expoter"
    static_configs:
      - targets: ["127.0.0.1:9560"]
        "labels": {
          "app": "MySQL"
    }
    metric_relabel_configs:
      - source_labels: [db_instance]
        target_label: instance

6 参考资料

Prometheus metric 介绍

Understanding metric types | Prometheus

query-exporter 官方github

https://github.com/albertodonato/query-exporter

query-expoter Snap 安装说明

https://github.com/albertodonato/query-exporter?tab=readme-ov-file#install-from-snap

query-expoter Docker 运行说明

https://github.com/albertodonato/query-exporter?tab=readme-ov-file#run-in-dockr

你可能感兴趣的:(监控,prometheus,mysql,sql)