数据库监控体系搭建:从 Exporter 到告警规则的全链路实战

概述 数据库慢了,业务就慢了。这句话每个运维都听过,但真正把数据库监控做到位的团队,说实话不多。 我见过太多团队的数据库监控长这样:Zabbix 模板跑着十年前的指标,告警只有"CPU 超过 90%“和"磁盘满了"两条,数据库内部的连接数、锁等待、缓存命中率、复制延迟——这些真正能提前预警的指标,压根没采。等业务方跑来说"接口好慢”,你才发现数据库连接池早就满了,慢查询堆积了几百条。 数据库监控的核心难点不在于"装个 exporter",而在于你知道该看哪些指标、怎么设阈值、怎么从指标变化中读出数据库的健康状况。这篇文章就把这些讲透。 覆盖 MySQL 和 PostgreSQL 两大主流数据库,从 exporter 部署、核心指标解读、告警规则设计到 Grafana 仪表盘配置,全链路打通。技术栈基于 Prometheus + Grafana,这是目前开源数据库监控的事实标准。 数据库监控的三层架构 在动手之前,先理清监控的层次。数据库监控不是一股脑把所有指标都采上来就完了,得分层: ┌──────────────────────────────────────────────────┐ │ 业务应用层 │ │ 核心接口响应时间 | 业务操作成功率 | 业务吞吐量 │ │ → 这些指标直接关联用户体验 │ ├──────────────────────────────────────────────────┤ │ 数据库内核层 │ │ 连接数 | QPS/TPS | 慢查询 | 锁等待 | 缓存命中率 │ │ 复制延迟 | 死锁 | WAL写入 | 事务回滚率 │ │ → 这些指标反映数据库内部运行状态 │ ├──────────────────────────────────────────────────┤ │ 服务器资源层 │ │ CPU | 内存 | 磁盘IO | 网络 | 文件系统 │ │ → 这些指标是数据库运行的物理基础 │ └──────────────────────────────────────────────────┘ 参考 数据库性能监控体系构建 的三层架构设计,每一层关注的问题不同:...

July 17, 2026 · 12 分钟 · 2413 字 · 徐保金

监控数据治理:从指标爆炸到精准可观测

概述 先说个场景:凌晨三点,你被告警吵醒,爬起来打开 Grafana,发现几十个 Dashboard 里找不到一条有用的信息。指标倒是有几百万条——但全是垃圾。 这不是个例。我见过太多团队,Prometheus 部署完就不管了,指标只增不减,告警规则越写越多,最后监控系统自己先挂了:Prometheus 内存 OOM、查询超时 30 秒、告警评估延迟 5 分钟以上。监控系统成了最大的故障源,这话说出去都讽刺。 监控数据治理解决的就是这个问题。它不是什么高深理论,说白了就一句话:搞清楚你有哪些指标、哪些有用、哪些该删、怎么管它们的一生。 这篇文章从指标生命周期管理的角度,拆解监控数据治理的五个阶段:指标定义、采集策略、存储优化、质量度量、废弃淘汰。每个阶段都配实操代码和踩坑经验。 指标爆炸的根因:不是数据多了,是管不住 指标为什么会膨胀 指标膨胀不是一夜之间发生的。通常的路径是这样的: 初期:Node Exporter + cAdvisor,几百条指标,Prometheus 跑得好好的 业务接入:每个服务埋点,每个中间件装 Exporter,指标涨到几万条 高基数炸弹:有人把 user_id、request_id、session_id 塞进了标签,时序数据量从几万条直接爆炸到百万级 灾难:Prometheus 内存飙升、磁盘写满、查询卡死 这里的核心罪魁祸首是高基数标签。 Prometheus 的时间序列模型是:指标名{标签1="值1", 标签2="值2"} → 数值。每增加一个标签值组合,就多一条时间序列。举个例子: # 低基数:3 条时间序列 http_requests_total{method="GET",status="200"} http_requests_total{method="POST",status="200"} http_requests_total{method="GET",status="404"} # 高基数炸弹:100万用户 = 100万条时间序列 http_requests_total{method="GET",status="200",user_id="12345"} http_requests_total{method="GET",status="200",user_id="12346"} ... 第二行代码看起来人畜无害,但如果 user_id 有 100 万个值,就是 100 万条时间序列。Prometheus 单实例承载上限大约 50 万条 TimeSeries(受内存和磁盘 I/O 约束),直接超限。 高基数标签的常见来源 来源 典型场景 危害程度 替代方案 用户 ID http_requests_total{user_id="..."} 致命 用日志记录,或聚合为百分位 请求 ID http_request_duration{trace_id="....

July 12, 2026 · 6 分钟 · 1178 字 · 徐保金

Blackbox Exporter:外部探测与拨测监控

概述 Prometheus 的常规监控是"从内向外看"——Prometheus 采集 Exporter 指标,了解系统内部状态。但用户访问你的服务时,走的是"从外向内"的路径:DNS 解析 → 网络路由 → 负载均衡 → 后端服务。一条从内部看完全健康的链路,可能因为 DNS 配置错误、CDN 缓存问题或 SSL 证书过期而导致用户完全无法访问。 Blackbox Exporter 解决的是"从外部探测"的问题。它模拟用户行为,从外部对 HTTP/TCP/ICMP/DNS 端点发起探测,让你获得"用户视角"的可用性数据。详细梳理 Blackbox Exporter 的配置、各类探测方式、SSL 证书监控、多地域拨测方案和可用性 SLO 度量。 参考来源:Blackbox Exporter 官方文档 一、为什么需要外部探测 1.1 内部监控的盲区 用户请求路径: 用户 → DNS → CDN → 负载均衡 → Ingress → Pod → 数据库 内部监控覆盖: ✓ Pod 指标 ✓ 数据库指标 ✓ Ingress 指标 ✓ LB 指标 外部盲区: ✗ DNS 解析是否正常? ✗ CDN 缓存是否正确? ✗ SSL 证书是否过期? ✗ 网络路由是否通畅? ✗ 从用户地域访问是否可达? 内部监控无法覆盖的典型场景:...

February 4, 2025 · 9 分钟 · 1794 字 · 徐保金

Prometheus 自动化巡检脚本集

概述 监控系统本身也需要被监控。Prometheus 采集了整个基础设施的指标,但如果 Prometheus 自己的配置出了问题、某个 target 掉线了、SSL 证书快过期了、告警规则写得有语法错误——谁来发现这些问题?答案是:一套自动化巡检脚本。本文围绕 Prometheus 生态,构建一套覆盖"拨测→证书检查→配置审计→规则验证→告警模拟→报表生成"的完整巡检工具集。 参考来源:Prometheus 官方文档、Blackbox Exporter 一、批量服务拨测脚本 1.1 基于 Blackbox Exporter 的拨测 Blackbox Exporter 是 Prometheus 官方的黑盒探测工具,支持 HTTP、TCP、ICMP、DNS 等协议。通过 Prometheus API 查询探测结果,可以实现批量服务健康检查: #!/usr/bin/env python3 """ 批量服务拨测脚本 通过 Prometheus API 查询 Blackbox Exporter 探测结果 """ import requests import json from datetime import datetime from typing import List, Dict, Optional from dataclasses import dataclass, asdict import smtplib from email.mime.text import MIMEText import sys @dataclass class ProbeResult: """探测结果""" instance: str module: str # http_2xx, tcp_connect, icmp 等 success: bool status_code: Optional[int] duration: float # 探测耗时(秒) error: Optional[str] last_error: Optional[str] ssl_cert_expiry_days: Optional[float] class PrometheusProber: """Prometheus 拨测器""" def __init__(self, prometheus_url: str, timeout: int = 30): self....

December 19, 2024 · 19 分钟 · 3844 字 · 徐保金

Thanos 部署与实践:Prometheus 长期存储与全局查询

概述 Prometheus 是云原生监控领域的事实标准,但它在长期数据存储和全局查询方面存在明显短板:本地存储默认只保留 15 天数据,单实例无法跨集群聚合查询,高可用方案也相对复杂。Thanos 作为 CNCF 孵化项目,通过将 Prometheus 数据上传到对象存储(如 S3、GCS、MinIO)实现了无限容量的长期存储,并通过分布式查询组件提供跨集群的全局视图。 将深入剖析 Thanos 的架构设计,并结合生产环境实战经验,详细讲解各组件的配置、部署和运维要点。 Thanos 解决了什么问题 在引入 Thanos 之前,我们首先需要理解 Prometheus 原生存储的局限性: 维度 Prometheus 原生 Thanos 增强 数据保留 默认 15 天,受本地磁盘限制 理论无限,依赖对象存储容量 高可用 需要 Thanos Sidecar 或 remote_write 双写 Sidecar + Query 天然支持 全局查询 联邦方案,有限且易丢数据 Query 组件聚合所有 Store API 降采样 不支持 Compactor 自动降采样,优化长周期查询 历史数据查询 超出保留期即丢失 可查询数月甚至数年前数据 跨集群视图 需要额外联邦配置 原生支持多集群统一查询 核心思路是:不改 Prometheus 本身,通过 Sidecar 旁路将数据上传到对象存储,再通过 Query 组件统一查询。这种设计保持了 Prometheus 的简单性,同时获得了企业级存储和查询能力。 核心架构与组件 整体架构 Thanos 的架构围绕"Sidecar 上传、Store 读取、Query 聚合"三个核心环节展开:...

November 19, 2024 · 10 分钟 · 1948 字 · 徐保金

VictoriaMetrics 部署与实践:Prometheus 长期存储的高性能替代方案

概述 Prometheus 作为云原生监控的事实标准,几乎成为了微服务和 Kubernetes 监控的默认选择。然而,随着业务规模增长,Prometheus 的本地存储架构逐渐暴露出明显瓶颈:单机存储容量有限(默认 15 天保留期)、缺乏原生水平扩展能力、高基数场景下内存飙升、历史数据查询困难。很多团队在时间序列突破百万级别后,开始面临磁盘 IO 压力、存储成本膨胀和查询延迟增长的"三重困境"。 为解决这些问题,社区涌现了 Thanos、Cortex、VictoriaMetrics 等多种长期存储方案。其中 VictoriaMetrics(以下简称 VM)凭借卓越的压缩率、极简的运维复杂度和出色的查询性能,成为越来越多团队的首选。 将详细梳理 VictoriaMetrics 的架构设计、部署模式、数据迁移、性能调优和生产环境好的实践,帮助你在实际项目中做出正确的技术选型和落地。 为什么选择 VictoriaMetrics Prometheus 的存储瓶颈 理解 VictoriaMetrics 的价值,首先需要明白 Prometheus 的存储瓶颈在哪里: 问题 原因 影响 数据保留期短 默认 TSDB 仅保留 15 天 无法做长期趋势分析 无法水平扩展 单实例架构,无分片机制 单机内存和磁盘成为硬上限 高基数内存膨胀 标签组合爆炸导致内存索引激增 OOM 频发,监控不可用 全局查询困难 多实例数据分散 跨集群查询需额外方案 远程存储延迟 remote_write 同步模型 网络问题导致数据丢失 VictoriaMetrics 的核心优势 VictoriaMetrics 的设计理念是:在完全兼容 Prometheus 生态的前提下,提供更高的性能和更低的资源消耗。 1. 卓越的数据压缩 VM 采用自研的列式存储引擎,针对时间序列数据特征深度优化。根据官方基准测试和大量社区实践,在存储相同监控数据时,VM 所需磁盘空间通常只有 Prometheus TSDB 的 1/5 到 1/7。 # 数据压缩效果对比(基于 100 万活跃时间序列,30 天数据) 存储方案 磁盘占用 压缩比 内存占用 ───────────────────────────────────────────────────────── Prometheus (本地) 350 GB 1x 8 GB Thanos (S3) 120 GB 2....

September 13, 2024 · 12 分钟 · 2433 字 · 徐保金

Prometheus 高可用与联邦集群

概述 Prometheus 默认是单节点架构,这在生产环境中是一个危险的隐患。一个 Prometheus 实例挂掉意味着整个监控体系失明——你无法在故障期间看到任何指标,告警也会因为规则不评估而完全失效。当数据量增长到单机存储和处理能力的极限时,还会面临写入超时、查询缓慢、磁盘爆满等问题。 本文系统性地分析 Prometheus 高可用和水平扩展方案,从最简单的双副本到 Thanos、Mimir、VictoriaMetrics、Cortex 等远程存储方案,帮助你根据实际场景做出正确的技术选型。 参考来源:Prometheus 官方文档 — HA、Thanos 官方文档 一、单点问题分析 1.1 单点 Prometheus 的风险 ┌──────────────┐ ┌───────────────┐ ┌──────────┐ │ Exporters │ ──→ │ Prometheus │ ──→ │ Grafana │ │ (targets) │ │ (单节点) │ │ Alertmgr│ └──────────────┘ └───────────────┘ └──────────┘ │ ┌──────┴──────┐ │ 本地 TSDB │ │ (15-30 天) │ └─────────────┘ 这个架构的脆弱点: 风险点 影响 发生概率 Prometheus 进程崩溃 监控完全中断,告警失效 中 宿主机宕机 同上,且可能丢失最近数据 中 磁盘故障 历史数据丢失 低-中 磁盘空间耗尽 写入失败,数据丢失 中-高 单机内存/CPU 不足 写入延迟、查询超时 高(数据量增长后) 网络分区 部分 target 无法采集 中 1....

July 23, 2024 · 8 分钟 · 1599 字 · 徐保金

Prometheus 服务发现机制详解

概述 在 Prometheus 的监控体系中,服务发现(Service Discovery,简称 SD)是连接"被监控目标"与"采集引擎"的桥梁。当你的基础设施从几台虚拟机扩展到数百个 Kubernetes Pod、跨可用区云主机、Consul 注册节点时,手动维护 static_configs 就变成了一场灾难——每次扩容、缩容、迁移都要改配置、重启 Prometheus,告警还会因为 target 不可达而误报。 Prometheus 原生支持十余种服务发现机制,能够在目标变更后自动感知,无需重启。我将从静态配置出发,逐步深入 file_sd、kubernetes_sd、consul_sd、dns_sd、ec2_sd 等主流方案,并详细讲解 relabel_configs 标签管理这一核心能力,最后给出多集群监控的落地实践。 参考来源:Prometheus 官方文档 — Configuration 一、为什么需要服务发现 1.1 静态配置的局限 先看一个最简单的静态配置: scrape_configs: - job_name: 'node' static_configs: - targets: - '192.168.1.10:9100' - '192.168.1.11:9100' - '192.168.1.12:9100' labels: env: 'production' region: 'beijing' 这在服务器数量固定时没什么问题。但考虑以下场景: 场景 静态配置的痛点 Kubernetes Pod 扩缩容 Pod IP 每次重建都变,手动改配置不现实 云厂商 Auto Scaling 弹性伸缩后新实例无法被监控,存在盲区 蓝绿部署 / 金丝雀发布 新版本实例需要自动加入监控 多机房迁移 IP 段变更,需要批量修改配置 容器化微服务 实例数量随时变化,生命周期短 1.2 服务发现的核心价值 ┌─────────────┐ ┌───────────────────┐ ┌──────────────┐ │ 服务注册中心 │ ← 感知 → │ Prometheus SD │ ← 采集 → │ Target 实例 │ │ (Consul/K8s) │ │ (自动更新 target) │ │ (Exporter) │ └─────────────┘ └───────────────────┘ └──────────────┘ │ ▼ ┌───────────────────┐ │ relabel_configs │ │ (标签过滤/改写) │ └───────────────────┘ 服务发现机制让 Prometheus 从"被动配置"变为"主动感知":...

June 6, 2024 · 7 分钟 · 1466 字 · 徐保金

商业监控 vs 自建监控:Datadog 与开源方案对比

概述 监控系统选型时,最纠结的问题之一是"用商业平台还是自建开源方案"。Datadog 是商业可观测性平台的标杆,开箱即用、功能全面、集成丰富,但价格不菲。Prometheus + Grafana 是开源自建方案的代表,灵活可控、无许可费用,但需要投入运维人力。 这不是一个简单的"省钱 vs 省事"的选择。对于快速增长的创业公司,Datadog 的开箱即用可能比省下的许可费更有价值;对于大规模基础设施,开源方案的边际成本优势会越来越明显。从功能、成本、运维、风险等多个维度系统对比两类方案,提供结构化的选型决策框架。 参考来源:Datadog 官网定价、CNCF 可观测性调查 一、Datadog 功能概览 1.1 产品矩阵 Datadog 提供了一个覆盖可观测性全生命周期的产品矩阵: ┌──────────────────────────────────────────────────────┐ │ Datadog 产品矩阵 │ │ │ │ 基础设施层 │ │ ├── Infrastructure Monitoring (主机/容器监控) │ │ ├── Network Monitoring (网络性能监控) │ │ └── Serverless (AWS Lambda/云函数监控) │ │ │ │ APM 层 │ │ ├── APM (分布式追踪) │ │ ├── Database Monitoring (数据库监控) │ │ ├── Continuous Profiling (性能分析) │ │ └── Real User Monitoring (前端 RUM) │ │ │ │ 日志层 │ │ ├── Log Management (日志采集+分析) │ │ └── Log Patterns (日志模式自动分类) │ │ │ │ 合成监控 │ │ ├── Synthetics (API/浏览器拨测) │ │ └── Continuous Testing (CI 集成测试) │ │ │ │ 安全与合规 │ │ ├── Cloud Security Management (云安全态势) │ │ └── Cloud SIEM (安全事件管理) │ │ │ │ 其他 │ │ ├── Incident Management (事件管理) │ │ ├── CI Visibility (CI/CD 可视化) │ │ └── Watchdog (AI 异常检测) │ └──────────────────────────────────────────────────────┘ 1....

April 17, 2024 · 9 分钟 · 1721 字 · 徐保金

Prometheus PromQL 入门与实践

PromQL(Prometheus Query Language)是 Prometheus 监控系统的查询语言,也是整个云原生监控体系的核心。无论是构建 Grafana 仪表盘、编写告警规则,还是进行故障排查时的临时查询,都离不开 PromQL。我将从数据模型出发,逐步深入到聚合操作、常用函数和实战查询,最后覆盖子查询等高级技巧。 参考来源:Prometheus 官方文档 — Querying basics 一、PromQL 数据模型 PromQL 有四种基本数据类型,理解它们是写对查询的前提: 类型 说明 示例 即时向量(Instant Vector) 一组时间序列在当前时刻的采样值 node_cpu_seconds_total 范围向量(Range Vector) 一组时间序列在过去一段时间内的所有采样值 node_cpu_seconds_total[5m] 标量(Scalar) 一个简单的数值 3.14、1024 字符串(String) 字符串值(较少使用) "hello" 最常用的两种: 即时向量:仪表盘和告警中最常见,返回"当前这一刻"各序列的值。 范围向量:用于 rate()、increase() 等函数计算,必须带时间窗口 [...]。 # 即时向量:返回当前所有序列 up # 范围向量:返回过去5分钟内的所有采样点 up[5m] # 标量 1 - 0.3 二、基础查询 2.1 Metric 选择与标签过滤 通过标签选择器可以精确过滤目标序列: # 选择名为 node_cpu_seconds_total 的所有序列 node_cpu_seconds_total # 按 mode 标签过滤 node_cpu_seconds_total{mode="idle"} # 多标签组合(AND 关系) node_cpu_seconds_total{instance="node-1:9100", mode="idle"} # 标签正则匹配 node_cpu_seconds_total{instance=~"node-[0-9]+:9100"} # 标签反向匹配(排除某些值) node_cpu_seconds_total{mode!...

April 4, 2024 · 4 分钟 · 645 字 · 徐保金