现今,数据构建和管理方式通常分为自建模式(IaaS)和托管模式(PaaS)。在 Prometheus 监控架构中,对于自建模式,我们通常可以选择使用
node-exporter
和mysql-exporter
采集节点和 MySQL 数据库的数据。对于托管数据库,由于无法直接访问服务器,我们无法直接采集数据。在这种情况下,我们可以选择以下几种场景进行监控:
云厂商监控服务: 利用云厂商提供的监控服务,通过集成其监控服务,完成对托管数据库的监控。
自开发采集服务: 自己开发数据采集服务,通过云服务商提供的 API 或其他方式,定制数据采集和监控流程。
第三方采集服务: 使用第三方的监控服务,如
query-exporter
。这类服务可以通过 SQL 查询的方式直接采集托管数据库中保存在performance_schema
的数据。在这种情况下,
query-exporter
是一种第三方采集服务,它允许通过 SQL 查询方式采集托管数据库的性能指标,尤其是保存在performance_schema
的数据。这种灵活的方式允许我们在托管环境中实现数据库监控,并集成到 Prometheus 监控系统中。
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://
)
注意:exporter 的密码不要有 @ 符号,会导致认证错误
CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'XXXXXXXX' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
query-exporter支持单一进程采集多数据库实例功能
# 创建 query-expoter 目录,用于为容器提供持久化配置
mkdir -pv /usr/local/query-expoter
cd /usr/local/query-expoter
touch config.yaml
通过容器方式启动服务,可以在主机通过容器直接部署,也可以部署到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
注意:
- 示例配置构建在?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:xxx@aws.rds.com:3306/performance_schema
labels:
modes: Primary DB system
db_instance: oci.rds.com:3306
db2:
dsn: mysql://exporter:xxxx@oci.mds.com: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;
- 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
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