尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

一个 sql_exporter 监控上百个数据库:jobs 与 static_configs 多目标模式完全指南

一个 sql_exporter 监控上百个数据库:jobs 与 static_configs 多目标模式完全指南 一个 sql_exporter 监控上百个数据库jobs 与 static_configs 多目标模式完全指南【免费下载链接】sql_exporterDatabase agnostic SQL exporter for Prometheus项目地址: https://gitcode.com/gh_mirrors/sqle/sql_exportersql_exporter 是一个数据库无关的 Prometheus SQL 监控导出器你写 SQL 查询它输出监控指标。监控单个数据库时一个target配置就够了但当你有几十甚至上百个 MySQL、PostgreSQL、SQL Server、ClickHouse 实例要监控时jobsstatic_configs多目标模式可以让一个导出器进程并行监控所有数据库。这篇指南带你完整掌握这套多目标配置模式。 两种模式何时该用 jobssql_exporter 的配置只有两种形态且启动时强制校验二选一见 config/config.go模式配置关键字适用场景单目标模式target一个导出器进程盯一个数据库多目标模式jobsstatic_configs一个进程监控多个数据库实例选择多目标模式的三大好处并行采集每次抓取时exporter 会为每个目标数据库启动独立的采集协程见 exporter.go互不阻塞自动打标签每个目标自动携带job和instance两个标签Grafana 里一拉就是全集群视图内置健康指标每个目标自动输出up数据库是否可达和scrape_duration_seconds采集耗时数据库宕机立刻告警。 单目标模式下这些自动指标不会输出这也是监控多库时推荐使用 jobs 模式的直接原因实现见 target.go。 配置文件结构总览完整多目标配置由四部分组成官方完整示例在 documentation/sql_exporter.ymlglobal: # 全局默认值超时、最小采集间隔、连接池 jobs: # 多目标模式的核心一组 job - job_name: mysql-cluster collectors: [mysql_standard] static_configs: - targets: { ... } # 目标数据库清单 labels: { ... } # 附加标签 collectors: [] # 指标采集器SQL 查询 → 指标 collector_files: # 从外部文件加载 collector方便复用 - *.collector.yml结构定义参考 examples/sql_exporter.yml 与 config/config.go。 三步配置 jobs 多目标监控第一步定义 job一组同构数据库job_name会成为指标中的job标签。按数据库类型或机房拆分 job 最直观例如mysql-prod、pg-analytics、mssql-core。第二步用 static_configs 注册目标static_configs.targets是一个自定义名称 → DSN的映射左侧名称会作为instance标签值建议起见名知意的名字而非 IPjobs: - job_name: mysql-prod collectors: [mysql_standard] static_configs: - targets: prod-mysql-1: mysql://prom:pass10.0.0.1:3306 prod-mysql-2: mysql://prom:pass10.0.0.2:3306 prod-mysql-3: mysql://prom:pass10.0.0.3:3306 labels: datacenter: beijing env: production这样查询up{jobmysql-prod}就能看到 3 个实例的存活状态datacenter、env标签会附加到该组所有指标上。第三步复用 collector 定义collectorSQL 查询到指标的映射可跨 job 复用写在主配置collectors段或用collector_files通配符从独立文件加载如 examples/mssql_standard.collector.yml。上百个库共用同一套 SQL改一处配置全集群生效。️ 四种数据库 DSN 速查表DSN数据源名称的 scheme 部分决定使用哪个驱动官方支持以下格式数据库sql_exporter 期望的 DSNMySQLmysql://user:passprotocol(host:port)/dbnamePostgreSQLpostgres://user:passhost:port/dbnameSQL Serversqlserver://user:passhost:port/instanceClickHouseclickhouse://host:port?usernameuserpasswordpassdatabasedbname注意 MySQL 的protocol(host:port)写法比较特殊写错会连不上库。⚠️ 标签规则这些坑别踩配置校验逻辑config/config.go 中JobConfig/StaticConfig的校验方法会对以下情况直接拒绝启动job和instance是保留标签不能出现在labels或指标的key_labels中static_configs.labels中的标签不能与任何指标的key_labels重名标签冲突同一个 static_config 内目标名称和 DSN 都不能重复job 必须至少引用一个 collector且 collector 名称必须已定义job 必须至少有一个目标否则报no targets defined for job。 监控上百个库负载控制要点默认每个抓取周期所有目标全部执行 SQL。当目标数量上百时建议通过global段调优参数作用建议min_intervalcollector 最小执行间隔间隔内的抓取返回缓存值非实时指标设为 30s~5m大幅降低 DB 压力max_connections单个目标的最大并发连接数默认 3按 DB 承受能力调整max_idle_connections单目标空闲连接数默认 3一般与上面保持一致scrape_timeout单次采集超时默认 10s慢查询多的环境适当放宽另外scrape_timeout_offset会从 Prometheus 下发的抓取超时中扣减余量确保 exporter 先于 Prometheus 超时避免产生超时噪音。✅ 常见配置错误排查清单报错信息原因exactly one of jobs and target must be definedjobs和target同时写了或都没写unknown collector xxxjob 引用的 collector 名称不存在no targets defined for job xxxjob 缺少static_configsduplicate target name同一 static_config 里目标名重复reserved label job redefined把 job/instance 用到了 labels 或 key_labelslabel collision in jobstatic_config 标签与指标 key_labels 重名所有错误信息都会带上jobxxx, targetyyy上下文见 errors/errors.go可快速定位到具体 job 和目标。 快速验证是否配置成功默认监听:9399端口可用-web.listen-address修改见 cmd/sql_exporter/main.go依次访问/healthz— 进程健康检查/metrics— 应能看到每个目标的up{job...,instance...}及自定义指标/config— 查看当前生效的完整配置DSN 密码自动打码/sql_exporter_metrics— exporter 自身运行指标。若通过 Docker 部署见 Dockerfile可用环境变量CONFIG指定配置文件路径。构建可参考 Makefile如需克隆源码仓库地址为 https://gitcode.com/gh_mirrors/sqle/sql_exporter 。 小结用jobs把上百个数据库按类型/机房分组用static_configs的名称 → DSN映射批量注册目标再靠min_interval与连接池参数控制 DB 负载——一个 sql_exporter 进程 一份 YAML就能拿到带job/instance标签的全集群 SQL 监控数据。从单库到百库你的采集架构完全不需要再复制粘贴部署新进程。【免费下载链接】sql_exporterDatabase agnostic SQL exporter for Prometheus项目地址: https://gitcode.com/gh_mirrors/sqle/sql_exporter创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表