可观测性速查
指标日志链路三支柱、Prometheus 与 PromQL、Grafana 面板、ELK/Loki 日志、OpenTelemetry 链路追踪、告警分级与收敛:监控体系速查。
监控体系与方法
可观测性三支柱、黄金指标与监控分层
可观测性三支柱:Metrics、Logs、Traces热门
指标、日志、链路追踪三类遥测数据的定位与分工:指标回答整体趋势,日志回答单次细节,链路回答请求跨服务的路径;三者靠统一标签与 trace_id 关联。
四大黄金指标:延迟、流量、错误、饱和度热门
Google SRE 归纳的四类通用监控指标:Latency 延迟、Traffic 流量、Errors 错误、Saturation 饱和度,适用于绝大多数在线服务的监控起步。
Prometheus 指标类型:Counter、Gauge、Histogram、Summary
Prometheus 客户端库提供四种指标类型:只增的 Counter、可增可减的 Gauge、分桶统计的 Histogram、客户端算分位的 Summary;类型决定可用函数与查询方式。
SLI、SLO 与 SLA:三个容易混用的概念
SLI 是可测量的服务质量指标(如成功率),SLO 是团队内部设定的目标值(如 99.9%),SLA 是对外合同承诺;SLO 应严于 SLA 留出缓冲。
RED 方法:Rate、Errors、Duration
面向请求型服务(微服务、API 网关、Web 应用)的三指标方法:请求速率、错误比例、耗时分布;少量面板即可覆盖服务健康与版本变更效果。
USE 方法:Utilization、Saturation、Errors
面向资源(CPU、内存、磁盘、网络、连接池等)的三维检查法:使用率、饱和度、错误数;适合排查机器变慢、服务变慢背后的资源瓶颈。
Histogram 与 Summary:分位统计怎么选
Histogram 在服务端按 le 分桶累计,分位用 histogram_quantile() 在查询时计算且可跨实例聚合;Summary 在客户端直接算出分位,但分位数值无法跨实例合并。
高基数:指标爆炸的成本与治理
序列数 = 指标名 × 标签值组合;把用户 ID、完整 URL、请求 ID 放进标签会让序列数快速膨胀,拖慢查询并推高存储与内存成本。
错误预算:用可量化的代价管理稳定性
错误预算 = 1 − SLO。以 30 天 99.9% 的 SLO 为例,每月允许约 43 分钟不可用;预算充足可加速发布,预算耗尽则优先修复稳定性。
标签设计:低基数、稳定、可聚合
标签是查询与聚合的维度;设计原则是取值有限且稳定(instance、job、env、route),避免把高动态数据(ID、时间戳)放进标签。
均值和分位数:延迟观测的正确姿势
平均延迟会被长尾掩盖:99 个快请求加 1 个超慢请求,均值依然好看。延迟观测应使用 P50/P95/P99 分位并明确统计窗口,同时可统计超阈值请求占比。
监控系统自身的可观测性
监控断点常被忽略:采集器挂了、告警通道静默、规则未加载,都会让系统看起来一切正常。应对监控链路各环节做自监控。
燃尽率(Burn Rate):基于 SLO 的告警指标
燃尽率 = 当前错误率 ÷ 允许错误率,表示错误预算的消耗速度;多窗口多阈值组合(如 14.4×1 小时与 6×6 小时)兼顾快速发现与降低误报。
监控分层:从主机到业务的全景视图
常见监控分层:基础设施、中间件、应用、业务、端到端体验;不同层级的指标用途不同,看板与告警应分层组织,便于从现象逐级下钻。
症状告警与原因告警:先保用户体验
症状告警针对用户可感知的结果(错误率上升、延迟超标);原因告警针对内部根因(磁盘将满、主从延迟)。前者保体验,后者争取处置时间。
指标命名与单位规范
Prometheus 社区约定:小写 snake_case、带单位后缀、Counter 以 _total 结尾、使用基本单位(秒、字节);统一命名才能让查询与看板可复用。
拉取与推送:监控采集的两种模型
Prometheus 以拉取(pull)为主:周期请求目标的 /metrics 端点;推送(push)适合批处理任务或穿透网络限制的场景,通常经 Pushgateway 中转。
可用性等级与停机时长对照
几个 9 的可用性换算成停机时长更便于沟通:99% 每月允许约 7 小时,99.9% 约 43 分钟,99.99% 约 4 分钟;先定义口径再谈目标。
埋点方式:自动插桩、手动埋点与无侵入
三类埋点方式各有边界:自动插桩零代码改动覆盖通用框架,手动埋点补充业务语义,eBPF 等无侵入方式适合难以改造的存量系统。
看板设计原则:从总览到下钻
好用的看板按总览、分组、单实例三层组织:首屏给结论(可用性与错误),中间给分维度趋势,底部提供下钻入口;每个面板都应能回答一个具体问题。
容量水位与扩容提前量
容量类监控关注'还剩多少余量'与'还能撑多久':用预测函数估算到达阈值的时间点,让扩容发生在故障之前,而不是告警之后。
白盒与黑盒监控:内因与外因
白盒监控采集系统内部数据(应用指标、日志、主机资源),用于解释为什么出问题;黑盒监控从外部探测(HTTP/TCP/DNS),回答服务当前是否可用。
MTTR、MTBF 与 MTTD:衡量应急能力
MTTD 是发现耗时、MTTR 是恢复耗时、MTBF 是平均无故障间隔;三者分别对应应急链路的不同环节,用于定位瓶颈在发现还是恢复。
遥测采样:指标、日志、链路各有策略
采样是针对量大且可丢弃数据的控制手段:指标按采集间隔天然降采样,日志可按级别或比例抽样,链路采样率直接影响成本与可观测性。
时间同步:监控数据对齐的前提
主机时间漂移会让指标、日志与链路的时序关系错乱:图表对不齐、关联查询落空、基于时间差的告警误报。全链路应统一 NTP 源并监控偏移量。
业务监控:技术指标之外的用户视角
技术指标正常不代表业务正常(例如支付渠道失败但接口仍返回 200)。业务监控直接度量成交、注册、活跃等结果,并按渠道、地域、版本等业务维度切分。
指标与告警的归属:每个信号都要有人负责
每条告警、每个关键指标都应有明确负责人与升级路径;无主告警会长期无人处理,是告警体系退化的起点。
合成监控与拨测:在用户之前发现问题
用脚本或探测服务模拟用户请求(登录、下单、API 调用),按周期从多个位置发起并校验响应内容,在真实用户受影响前捕捉故障。
SLI 选型示例:不同服务类型怎么定指标
SLI 要按服务形态挑选:请求型看成功率与延迟,任务型看完成率与时效,存储型看持久性与延迟;选错 SLI 会让 SLO 与用户感知脱节。
基线、同比与动态阈值
有节律的业务曲线(白天高、夜间低)用固定阈值会频繁误报;用上周同期(offset 1w)做基线对比,或对稳态指标做时间序列异常检测更稳。
指标保留、降采样与长期存储
原始指标的保留期决定磁盘占用与查询性能:本地 TSDB 保留原始数据(如 15-30 天),更长时间的历史用降采样或远程存储承载。
统一资源属性:让数据可关联、可下钻
跨信号关联的前提是统一标识:service.name、host、env、version 等资源属性在三类遥测数据中保持一致,看板与检索才能按同一维度切换。
可观测性常见反模式清单
一线常见反模式:只看均值、日志全量不裁剪、标签乱塞、告警只有原因没有症状、看板无人维护;对照自查比从零设计更快。
遥测流水线:采集、加工、存储、消费
可观测性数据链路的通用形态:agent 或采集器收集,网关统一加工(批处理、脱敏、采样、路由),写入时序库或日志/链路库,供看板、告警与查询消费。
监控覆盖盘点清单
定期盘点每个业务单元是否被监控覆盖:从入口、依赖、数据、任务四个方向核对,找出只有巡检没有告警的盲区。
排障四问:发现、定位、解释、预防
用四个问题检验可观测性是否够用:故障能否被及时发现、能否快速定位到组件、能否解释根因、能否留下防复发证据;答案缺失之处就是建设重点。
可观测性成本治理:先分层再压缩
遥测成本主要在存储与查询:先按信号分层(指标长期、日志短期、链路按需),再对高成本来源做采样、过滤与保留期收缩,避免全量长期保留成为默认。
可观测性建设的阶段演进
从有无监控到可观测性闭环通常经历几个阶段:基础资源监控、服务标准化指标、日志与链路补齐、SLO 驱动、成本与治理;不同阶段解决不同层次的问题。
故障演练:用受控实验验证可观测性
定期开展故障演练(注入延迟、杀掉实例、断开依赖),验证监控能否按预期发现、告警能否触达、预案是否可用;演练结果反哺告警与看板改进。
SLO 评审:定期校准目标与预算
SLO 定了不是就不动:随业务阶段与用户预期变化,需定期(如每季度)评审目标值、SLI 口径与预算策略,并用期间数据验证合理性。
Prometheus 与采集
抓取配置、Exporter 与 PromQL 查询
Prometheus 架构与组件概览热门
Prometheus 是拉取模型的时序监控系统:服务端按配置抓取目标、写入本地 TSDB,规则引擎持续评估记录与告警规则,通过 HTTP API 供 Grafana 等消费。
主机 CPU/内存/磁盘使用率的标准查询热门
主机使用率查询有两个固定要点:CPU 用 idle 模式反向计算,内存用 MemAvailable 口径;磁盘要过滤伪文件系统并按挂载点分组。
up 指标:抓取健康与目标存活热门
up 是 Prometheus 为每个抓取目标生成的合成指标:抓取成功为 1、失败为 0;配合实例标签可快速定位哪台目标失联,是常用的基础告警。
部署 node_exporter 采集主机指标
node_exporter 暴露 Linux/Unix 主机指标(CPU、内存、磁盘、网络、文件系统等);以 systemd 服务方式运行,默认监听 9100 端口。
rate 与 irate:计数器变化率
rate() 用窗口内样本做外推,曲线平滑,适合告警与容量趋势;irate() 只用窗口内后两个样本,反应快但抖动大,适合观察瞬时突变。
histogram_quantile:分位计算实战
histogram_quantile(φ, bucket) 依据 le 分桶估算分位数;必须先 sum by (le)(必要时保留其他维度)聚合桶,再交给函数计算,才能得到整体分位。
告警规则:expr、for 与 annotations
告警规则由 alert 名称、expr 表达式、for 持续时长、labels 与 annotations 组成;expr 返回非空即进入 pending,持续超过 for 转为 firing。
prometheus.yml:配置结构总览
主配置由 global(全局默认)、rule_files(规则文件)、scrape_configs(抓取任务)、alerting(Alertmanager 地址)等段组成,支持运行期热加载。
PromQL 基础:瞬时向量与范围向量
PromQL 的查询对象是时间序列:瞬时向量取当前点,范围向量取一段窗口;区间选择器只能作为函数参数,不能直接出图。
sum by 与 without:聚合与维度裁剪
聚合运算符把多序列合并为少数序列:sum by (label) 按指定维度分组求和,sum without (label) 保留列出的维度之外的全部标签,用于控制曲线数量。
比率查询:错误率与占比的写法
比率的通用模式:分子分母都用 rate,且维度对齐;两侧的 sum by 列表保持一致,否则向量匹配失败或得到不符合预期的结果。
抓取任务(scrape_configs)基础写法
每个抓取任务定义一个 job:目标列表、抓取路径、协议、参数与超时;job 名会成为 job 标签,是查询与聚合的基础维度。
relabel_configs:抓取前的目标标签改写
relabel_configs 在抓取发生前处理目标元标签(__address__、__param_* 等),常用于改写端口、过滤目标、添加业务标签与生成实例标签。
node_exporter 关键指标速查
主机监控常用指标按 CPU、内存、磁盘、网络分类:理解每条指标的口径(累计、瞬时、可用量)才能写出正确的查询。
抓取间隔与超时的取值权衡
scrape_interval 决定数据分辨率,scrape_timeout 必须小于间隔;间隔越短数据越细但目标压力与存储成本越高,15-60 秒是常见区间。
metric_relabel_configs:抓取后的指标治理
metric_relabel_configs 在抓取返回后、入库前处理样本:丢弃高成本指标、删除敏感或高基数标签、做重命名;是控制序列数、保护 TSDB 的主要手段。
increase:窗口内的累计增量
increase() 计算计数器在窗口内的增长总量(rate 乘窗口秒数),适合回答'过去 1 小时处理了多少请求';同样内置处理计数器重置。
标签匹配运算符:=、!=、=~、!~
四种匹配运算符:等于与不等于做精确匹配,=~ 与 !~ 做正则匹配(隐式锚定全串);正则可合并多个状态码或排除内部路由。
mysqld_exporter:MySQL 指标采集
mysqld_exporter 连接 MySQL 暴露连接数、QPS、主从复制等指标;使用独立监控账号,默认端口 9104,常用指标 mysql_up 与 mysql_global_status_*。
kubernetes_sd:Kubernetes 服务发现
kubernetes_sd_configs 以集群 API 为数据源,按 role(node、pod、service、endpoints 等)生成目标候选,再用 relabel 筛选与改写;是采集 K8s 工作负载的标准方式。
promtool:配置与规则校验工具
promtool 随 Prometheus 发行包提供:check config、check rules 做静态校验,test rules 跑规则单元测试;建议纳入 CI,在部署前拦截错误。
topk 与 bottomk:找出靠前的序列
topk(n, v) 返回分组内数值靠前的 n 条序列,常用于找出错误数偏多的服务或实例;可先按维度分组再对每组取 topk。
absent 与 absent_over_time:检测指标缺失
当目标整体下线时,它的指标序列会消失,此时 up==0 也可能不存在;absent() 在序列不存在时返回 1,适合做无数据类告警。
比较运算符:过滤语义与 bool 修饰
向量与标量比较默认是过滤语义:只保留满足条件的样本;加 bool 则改为输出 0/1 且不丢样本。标量与标量比较必须加 bool。
时间聚合函数族:_over_time 系列
avg_over_time、max_over_time、sum_over_time 等把范围向量压缩成单点:用于平滑瞬时波动、计算窗口极值,或配合子查询做多层聚合。
记录规则:把高频查询预先算好
recording rules 周期性计算表达式并写成新指标(惯例命名 level:metric:operations),让看板与告警查询预计算结果,降低查询成本与复杂度。
redis_exporter:Redis 指标采集
redis_exporter 采集 Redis 内存、连接与命中率;默认端口 9121,常用指标包括 redis_up、redis_memory_used_bytes 与 keyspace hits/misses 计数。
cAdvisor:容器资源指标采集
cAdvisor 采集容器的 CPU、内存、网络与文件系统指标,Kubernetes 中作为内置组件集成;常用指标 container_cpu_usage_seconds_total、container_memory_working_set_bytes。
static_configs:静态目标列表
直接声明目标的方式:在任务下写 targets 列表并附加标签;适合目标数量少、或由配置管理工具统一生成的场景,规模变大后应替换为服务发现。
file_sd:用文件做服务发现
file_sd_configs 从 JSON/YAML 文件读取目标列表并支持自动重载(默认 5 分钟检测变更);配合配置管理或脚本生成文件,适合无法动态发现的环境。
offset 与 @:时间平移查询
offset 把查询窗口整体前移(如 offset 1w 看上周同期),@ 把查询固定到某个时间点(如 @ end() 对齐查询区间结束);两者常配合使用。
向量匹配:on、ignoring 与 group_left
两个向量做算术运算时按标签对齐:默认要求标签集完全一致;on/ignoring 控制参与匹配的标签,group_left/group_right 处理一对多或多对一场景。
向量匹配做指标关联(示例:成功率)
把两个来源的指标按业务键关联是常见需求:例如成功数与总数相除得到成功率;关键是让两侧标签通过 on() 对齐。
remote write:把数据写到长期存储
远程写让 Prometheus 边采集边把样本推送到远端(长期存储、联邦中心或云端服务),本地保留期照常工作,兼顾接入与查询便利。
HTTP API:query 与 query_range 实战
Prometheus 提供 HTTP 查询接口:/api/v1/query 查瞬时值、/api/v1/query_range 查区间序列、/api/v1/series 列举序列;脚本化取数与系统集成很常用。
nginx-prometheus-exporter:Nginx 指标采集
该 exporter 读取 Nginx 的 stub_status(或 Nginx Plus API)输出指标:连接数与请求统计;开源版需要开启 stub_status 端点。
kube-state-metrics:集群对象状态指标
kube-state-metrics 监听 APIServer,把 Deployment、Pod、Node 等对象状态转成指标(如期望副本与实际副本),补齐 cAdvisor 只覆盖资源用量的空白。
TSDB 存储结构与保留策略
Prometheus 自带时序存储:head 块在内存并同步写 WAL 保证崩溃恢复,默认每 2 小时落盘为持久块,后台压缩合并;保留期默认 15 天,可按时间或容量控制。
Prometheus Operator 与 ServiceMonitor
Kubernetes 上的 Operator 模式:用 CRD 声明式定义监控对象,Operator 监听变更自动生成并热加载 Prometheus 配置,取代手工维护配置文件。
deriv:指标变化斜率
deriv() 用线性回归计算 Gauge 在窗口内的每秒变化速率;用于观察'增长得多快',比绝对值更能提前暴露趋势问题。
告警模板:$labels、$value 与 humanize
annotations 与 labels 支持 Go 模板:$labels 取告警标签、$value 取当前值;humanize 系列可格式化秒与百分比,让通知内容直接可读。
blackbox 探测模块:http、tcp、icmp、dns
blackbox_exporter 内置多种探测类型:http(状态码与内容断言)、tcp 连接、icmp ping、dns 解析;模块在配置文件中预定义,抓取时用参数选择。
Pushgateway 使用要点与清理
Pushgateway 保存推送的指标供 Prometheus 抓取;分组由 job 加任意标签组成,同分组重复推送会覆盖;任务结束或下线后要主动清理。
抓取限制:sample_limit 与标签上限保护
每个抓取任务可配置样本数与标签长度上限,防止单个目标的指标爆炸拖垮采集端;超限时该次抓取被整体判定为失败,而不是部分丢弃。
predict_linear:容量耗尽预测查询
predict_linear 对指定窗口做线性回归并外推未来某时刻的值;经典用法是预测磁盘何时耗尽,让容量告警从到达阈值提前到预计将到达。
changes 与 resets:变化次数与重置次数
changes() 统计窗口内值发生变化的次数;resets() 统计 Counter 重置次数,用于发现进程反复重启或计数器异常。
count_over_time:窗口内的样本数
count_over_time 统计窗口内实际存在的样本数量,用于判断数据完整性与采样间隙;样本数偏少会让 rate 类查询的误差放大。
promtool test rules:告警规则单元测试
用 YAML 描述测试:构造输入序列(input_series)、断言告警状态(alert_rule_test)与查询结果(promql_expr_test),在 CI 中防止规则回归。
内置 UI:Targets、Rules 与查询页
内置 Web UI 提供表达式浏览与绘图、Targets 目标状态、Service Discovery 元标签对照、Rules 与 Alerts 页面;排障先看 Targets 与 Alerts。
textfile 采集器:注入自定义静态指标
node_exporter 的 textfile 采集器读取指定目录下的 .prom 文件并暴露为指标;适合把脚本产出(备份时间、证书剩余天数)变成可监控指标。
dns_sd:基于 DNS SRV 记录发现目标
dns_sd_configs 通过 DNS SRV 记录动态发现目标地址与端口,适合目标以域名集中管理的环境;支持 SRV、A、AAAA 三种记录类型。
label_replace:查询期改写标签
label_replace(v, dst, replacement, src, regex) 用正则从源标签提取内容写入目标标签;常用于统一不同系统的标签命名或补齐维度。
keep_firing_for:减少抖动导致的漏看
keep_firing_for 让告警在条件不再满足后继续维持 firing 一段时间,防止抖动场景下告警刚触发就恢复、值班人还没看到。
联邦:从下级 Prometheus 拉取汇总数据
联邦让上级 Prometheus 通过 /federate 端点拉取下级实例的部分序列;适合分层架构,把跨集群的少量核心指标汇总到全局视图。
序列过期与 stale 标记(staleness)
查询默认只看近 5 分钟内的样本(lookback delta);目标移除或序列消失时写入 stale 标记,让查询立即停止返回旧值,避免用陈旧数据做判断。
Exemplars:把指标关联到链路
Exemplar 是附加在样本上的标注元数据,典型做法是携带 trace_id:看到延迟毛刺时从指标直接跳到对应链路,把指标与追踪两支柱串起来。
consul_sd:Consul 服务目录发现
consul_sd_configs 从 Consul 服务目录读取实例列表;适合已有 Consul 体系复用服务注册信息,减少重复维护目标清单。
clamp 系列:数值截断与展示控制
clamp_max、clamp_min、clamp 把数值限制在区间内;多用于压制异常尖峰对图表坐标轴的影响,或把抖动产生的负值归零。
时间函数:time、timestamp 与日期判断
time() 返回查询时刻的 Unix 秒,timestamp() 返回样本自身时间戳;配合 day_of_week、hour 等函数可实现按时间段差异化的规则。
external_labels:给数据打上集群身份
external_labels 在通信场景(远程写、联邦、告警)附加到所有数据上,标识集群或区域;它不需要逐个目标配置,是分层部署的常用手段。
Agent 模式:只采集与远程写
通过特性开关让 Prometheus 以 agent 形态运行:不提供本地查询、不评估规则,只抓取并 remote_write,适合边缘节点或大规模分层汇聚场景。
AWS EC2 服务发现(ec2_sd_configs)
在 AWS 上用 ec2_sd_configs 自动发现实例:按区域与过滤条件选取目标,再经 relabel 生成 instance 与业务标签,免去维护静态目标清单。
sort 与 sort_desc:结果排序
sort()/sort_desc() 对瞬时向量按数值排序,影响的是行序而非数值;表格类面板中使用可让结论更直观,对图形面板没有意义。
honor_labels:标签冲突时听谁的
抓取样本带同名标签(如 job、instance)时,honor_labels 决定保留目标自带值还是改写成抓取配置的值;联邦与推送场景尤其重要。
Grafana 与看板
数据源、面板与变量配置
Query 变量:从指标里展开下拉选项热门
模板变量让同一看板适配多实例/多任务:绑定 Prometheus 数据源的 Query 变量常用 label_values 取标签值,也可用 query_result 跑任意 PromQL。
Time series 面板:趋势展示主力热门
默认面板类型:支持多序列折线/柱状/区域、图例统计表、单值或全部 tooltip、软范围坐标轴;绝大多数趋势看板从它开始。
添加 Prometheus 数据源
数据源是 Grafana 取数的入口:填对 URL 与访问方式后 Save & test 验证连通;抓取间隔要如实填写,供速率类查询推算窗口。
内置宏:$__interval 与 $__rate_interval
面板查询里的时间宏由 Grafana 按时间范围与面板宽度实时计算:$__interval 是步长,$__rate_interval 是自适应速率窗口,避免窗口过小。
Grafana 是什么:可视化与看板核心概念
Grafana 是开源可视化平台:接入 Prometheus/Loki/Elasticsearch 等数据源,按组织-文件夹-看板-面板四级组织,承载展示、分享与统一告警入口。
用 Docker 运行 Grafana
容器方式启动 Grafana:映射 3000 端口、挂载数据卷保存看板与配置,通过环境变量注入初始密码,适合快速验证与小型部署。
看板 JSON 的结构要点
看板以 JSON 为真源:uid/title/时间范围/变量/面板数组构成骨架;面板含 gridPos 栅格、targets 查询与 fieldConfig 字段配置,可整体导入导出。
阈值与阈值线:颜色随数值变化
阈值把数值区间映射成颜色:阈值 steps 从基准色开始逐级提升;Time series 还可显示虚线/区域阈值线,让异常区间一眼可见。
Explore:临时探索与对比
Explore 是不落盘的探索区:临时敲 PromQL/LogQL 验证思路、Split 并排对比两个环境、回看查询历史;验证稳定后再固化到看板。
grafana.ini 常用配置项
配置文件按节组织:server 管监听与外部地址,database 管控库,security 管密钥,users 与 auth.anonymous 管控用户接入;环境变量可逐项覆盖。
Stat 面板:关键数字与迷你趋势
Stat 把序列归约成单个大数字:适合 SLO 达成率、当前错误数、在线实例数;可叠加 sparkline 看短趋势,文字模式控制显示内容。
Table 面板:清单与明细
表格适合展示实例清单、版本分布、TopN 明细:Prometheus 查询选项把 Format 切到 Table,配合整理字段与表内过滤完成巡检视图。
Transformations:可视化前的数据加工
转换对查询结果做二次加工:合并、过滤、聚合、排序、重命名;按列表顺序依次执行,是拼装自定义视图的关键环节。
Query Inspector:面板排障入口
查看面板真实发出的请求、返回的原始数据与查询耗时:出现“无数据”或数值不符时,先用它把问题定位到查询层还是展示层。
看板性能优化清单
看板慢的根因集中在查询量与渲染量:先聚合再展示、给变量查询加范围、重查询交给记录规则、控制刷新与时间窗,逐项都能见效。
Loki 数据源接入
Loki 数据源以标签选择器检索日志并附带日志量直方图;派生字段能把 trace_id 变成可点击链接,联动追踪系统做下钻。
数据源 provisioning 化
用 YAML 声明数据源并随启动自动加载:配置即代码,适合容器化与多环境复制;默认每 10 秒检查一次文件变更并生效。
Gauge 与 Bar gauge:表盘与条形
两种进度型可视化:Gauge 用弧形表盘显示单值占比,Bar gauge 用横向/纵向条并列比较多个对象;都依赖阈值着色与 min/max 设定。
单位与数值格式
单位设置决定坐标轴刻度与 tooltip 的呈现:字节用 bytes(IEC) 或 decbytes,比例小数用 percentunit,比例整数用 percent,时长用 s/ms。
Data links:数据点下钻跳转
给数据点或表格行挂可点击链接:从异常点跳到日志检索、追踪详情或工单页面;URL 用内置变量携带上下文与时间范围。
分享、嵌入与 Kiosk 模式
链接分享自带时间范围与变量;iframe 嵌入需开启 allow_embedding;kiosk 模式隐藏导航边框,是大屏与工单系统集成的常规手段。
看板 provisioning 与 sidecar 模式
把看板 JSON 放进统一目录自动导入:providers 声明路径与刷新周期;Kubernetes 里可让 sidecar 监听带标签的 ConfigMap 自动同步。
用 HTTP API 管理看板
看板可通过 API 读写:GET /api/dashboards/uid/<uid> 导出,POST /api/dashboards/db 创建或覆盖;配合服务账号令牌可进 CI 流水线。
Heatmap 面板:时延分布热力图
热力图用颜色表示密度:X 轴时间、Y 轴分桶;配合 Prometheus 直方图的 le 桶,可观察长尾分布随时间的形态变化。
图例格式化:让序列名可读
Legend format 用标签模板给序列起人名:{{job}} - {{instance}} 比整串指标名可读得多;Table 图例还能附加统计列辅助扫读。
Field overrides:字段级显示覆盖
覆盖规则按字段名、正则或查询号选中字段,单独调整单位、阈值、颜色、列宽;常用来给表格的关键列标红或隐藏无关列。
Annotations 注释:把事件画到图上
注释把发布、重启、告警触发画成时间竖线:Prometheus 数据源可用查询自动生成,也可手工标注发布窗口,便于对照“动作与曲线”。
Max data points 与步长控制
Max data points 与 Min interval 共同决定查询步长:步长过大趋势变粗、速率窗口失真;两者是精度与后端负载的平衡旋钮。
Tempo 数据源接入
Tempo 存储链路数据,Grafana 提供 TraceQL 检索与 trace 详情:按服务、时长筛选链路,与指标、日志互相跳转。
Custom / Interval / Constant 变量
除查询型变量外还有四类:Custom 手写候选集,Interval 提供时间粒度,Constant 隐藏常量,Textbox 临时输入;按场景选择可减少查询开销。
State timeline:状态条带
把离散状态画成时间条带:哪些实例在哪些时段处于异常状态一目了然;适合 up 状态、主从角色、发布阶段等场景。
Logs 面板:把日志嵌进看板
看板里直接展示日志行(数据源用 Loki 或 Elasticsearch),实现“指标异常 → 原始日志”的同屏排查,减少窗口切换。
Reduce 转换:序列归约成表
把多条时间序列压缩成每个序列一行:指定统计量(Last non-null/Mean/Max 等)与 Series to rows 模式,是 TopN 表与巡检表的常用起点。
Library panels:可复用面板
把面板保存为组织级资产:多处看板引用同一面板,修改一处全部同步;适合黄金指标行、依赖组件概览这类复用单元。
时间范围与时区设置
时间选择器控制数据窗口,时区可选跟随浏览器或固定 UTC;跨区域协作与日志对齐时,固定时区能减少“对不上时间”的争议。
Elasticsearch 数据源接入
Elasticsearch 数据源按索引模式与时间字段取数:查询支持 Lucene 语法,指标可用聚合下拉(Date Histogram、Terms 等)拼装。
面板与行重复(Repeat)
按变量为每个取值生成一份面板或整行:多实例、多环境同构展示不再手工复制;重复块内自动带入对应变量值。
变量级联:先选上层再展开下层
下级变量的候选由上级变量决定:把上级值写进下级的查询里(如 {job="$job"}),实现按任务过滤实例的逐级筛选。
Pie chart 面板:占比构成
饼图展示少数分类的占比:按系列取归约值画扇区;查询常用即时聚合(sum by (status)),类别太多时换用条形更易读。
Value mappings:数值到文案的映射
把底层数值翻译成业务语言:0/1 映射成状态文案、状态码映射成描述、空值显示“无数据”;巡检表不必背数字含义。
Dashboard links:看板间导航
在看板顶部放置导航链接:可链接到其他看板并携带变量与时间范围,形成总览到详情的逐层结构。
文件夹与权限:按团队授权
文件夹是权限与归类的基本单位:看板按团队/系统归入文件夹,用角色控制可见与可编辑范围;看板权限继承自所在文件夹。
URL 参数:受控打开看板
URL 参数完全控制初始状态:时间范围、刷新率、变量、kiosk;聊天机器人、runbook、自动化巡检都靠拼链接直达现场。
Ad hoc filters:看板级标签过滤条
Ad hoc filters 在看板顶部提供键值过滤条,选中的标签过滤会自动叠加到绑定数据源上的全部查询,用于临时缩小排查范围。
Text 面板:把说明固化在页面里
Text 面板支持 Markdown/HTML:写看板说明、指标口径、值班流程与导航链接;变量可在文本中插值,随看板环境切换。
Join by field:横向拼接多查询
按公共列(典型是 Time)把多个查询的结果拼到同一张表:指标与日志统计、不同数据源的序列都能合并,便于同表对照。
看板导出图片渲染
把看板导出 PNG 用于通知与报告:OSS 版需单独部署 grafana-image-renderer,并在配置里指向渲染服务地址。
看板版本历史与回滚
每次保存生成版本:可对比差异并回滚;保存时写变更说明,复盘时能还原当时的指标口径与展示方式。
服务账号与令牌(自动化凭据)
Grafana 9.3+ 用服务账号替代旧 API Key:为自动化创建固定角色账号并签发令牌,令牌只在创建时展示一次,按需轮换。
Filter data by query:只看指定查询
只保留指定查询的结果交给后续转换与面板:同一面板内不同查询分工(一条画图、一条进表)时,用它做分流。
匿名访问:只读展示大屏
匿名访问允许未登录用户以只读角色浏览:用于值班大屏与内网展示;开启前先界定数据边界,避免内部指标对外可见。
Playlist:看板轮播
把多个看板编成轮播:每屏设定停留时长自动循环,适合值班大屏的巡检墙;支持 kiosk 全屏播放。
插件管理与安装
插件扩展数据源与可视化:用 grafana-cli 或容器环境变量安装,带签名校验;内网环境可离线放置插件包。
日志平台
ELK/Loki 架构与常用查询
ELK 技术栈分工与数据流
日志平台经典组合:采集端(Beats/Filebeat)→ 缓冲与加工(Logstash 可选)→ 存储检索(Elasticsearch)→ 展示分析(Kibana),各环节可独立扩展。
LogQL 指标查询:把日志变成时间序列
对日志流做范围聚合即得指标:rate 看速率、count_over_time 看数量;配合 by 分组可直接在 Grafana 里画日志趋势。
Mapping 与字段类型选择
映射定义字段如何索引:keyword 用于精确匹配与聚合,text 会分词用于全文检索;字段类型选错会让查询与聚合都出问题。
聚合:从日志里做统计
聚合把原始日志变成趋势与分布:date_histogram 出时间序列,terms 出分组 TopN,cardinality 近似去重;指标聚合嵌套在桶聚合里。
LogQL 流选择器基础
查询从流选择器开始:用标签匹配定位数据流,=、!=、=~、!~ 四种匹配;选择器至少要有一个非空匹配条件。
LogQL unwrap:对数值字段做统计
unwrap 把行内解析出的数值字段当成样本值:从此可以对日志里的耗时、字节数求平均值、分位数,而不再只统计条数。
索引、分片与副本基础
索引由分片组成:主分片数量建索引时确定,副本数可动态调整;副本提供高可用并能分担读流量,但要占用额外存储与写入成本。
Bool 查询:组合检索条件
bool 查询是 DSL 组合器:must 计分、filter 不计分且可缓存、should 提权、must_not 排除;日志查询把过滤条件放 filter 性能更好。
ILM 索引生命周期管理
生命周期策略把索引按时间划入 hot/warm/cold/delete 阶段:滚动、合并、冻结、删除自动执行,控制存储成本与查询性能。
Logstash Pipeline:input/filter/output
管道三段式:input 收数据、filter 改数据、output 发数据;配置文件描述一条流水线,多管道可在 pipelines.yml 中分别声明。
Grok 解析非结构化日志
grok 用模式库把文本拆成字段:%{TIMESTAMP_ISO8601:ts} 这类“模式:字段名”的写法即取即用,自定义模式可放 patterns 目录。
Filebeat 采集配置入门
Filebeat 按输入声明要采集的文件路径:字段富化、多行合并、输出目标都在同一份配置里;先 test config 再启动是稳定运行的基本功。
Loki 标签设计原则
标签决定数据分片与索引体积:用低基数、稳定的维度(集群/环境/服务/级别),高基数内容放日志正文;标签爆炸是 Loki 故障的常见源头。
LogQL 解析器:json / logfmt / regexp / pattern
解析器把行内结构化:json 与 logfmt 直接提取字段用于过滤与聚合,regexp/pattern 面向自定义格式;提取的字段可继续参与条件。
Promtail 采集配置:目标与推送
Promtail 按 scrape_configs 声明要读取的文件与附加标签,然后推送到 Loki 的 push 接口;路径通过 __path__ 特殊标签传入。
结构化日志:字段化与规范
JSON 结构化日志让机器可解析:固定字段名(ts/level/service/trace_id)+ 稳定取值,过滤、聚合、关联都更简单。
索引模板与自动应用
模板为匹配模式的索引预设分片、映射与生命周期:新索引创建时自动套用,日志类“每天一个索引”的场景靠它统一配置。
Bulk 批量写入
批量接口用 NDJSON 格式一行动作一行文档;批量大小直接影响写入效率,过大反而增加协调开销与失败重试成本。
集群健康与红色分片处置
绿黄红分别对应分片分配状态:黄=副本未分配,红=主分片未分配;红色先查未分配原因再决定处置,不要急着重启节点。
Kibana Query Language(KQL)
KQL 是 Kibana 检索框里的过滤语法:字段:值、and/or/not 组合、通配与数值比较;比 Lucene 更直观,是 Discovery 默认语法。
Discover:日志检索工作台
Discover 提供文档级检索:选数据视图与时间范围、KQL 过滤、字段列表筛选、行内展开;满意的检索可存为 Saved Search 分享复用。
Date 过滤器:统一时间戳
把日志里的时间字符串解析成 @timestamp:格式串数组按序尝试,带时区信息才不漂移;解析失败会标记 _dateparsefailure。
输出到 Elasticsearch
output 阶段把事件写入 ES:index/data_stream 决定落点,批量参数与重试影响吞吐与可靠性;配合 ILM 由写入别名接收。
Loki 架构与组件分工
Loki 只索引标签、内容压缩存块:distributor 校验分发、ingester 攒块下传、querier 查询、compactor 压缩清理;存储走对象存储。
LogQL 行过滤:|=、!=、|~、!~
在流选择器后串接内容过滤:|= 包含、!= 不包含、|~ 正则匹配、!~ 正则排除;多个过滤按序叠加进一步收敛结果。
LogQL 的 topk 与分组聚合
在指标查询之上再套聚合运算符:topk 取前列、sum/avg by 做分组;适合“哪个服务错误多、哪个路由耗时长”的即时答案。
Term 与 Range:精确值与范围查询
term 匹配不分词的精确值(keyword 字段),range 匹配数值与时间区间;两者是日志过滤中使用频率很高的原子条件。
排序与深分页
普通分页用 from/size 但有窗口上限;翻深页改 search_after 游标,导出类场景用 PIT 保持一致性视图,避免越翻越慢。
Cat API:集群巡检常用接口
cat 系列接口以表格形式输出集群状态:索引容量、节点负载、分片分布、线程池队列;加 ?v 显示表头、加 format=json 便于脚本消费。
多行日志合并(堆栈跟踪)
Java 堆栈、Python Traceback 天然多行:用 multiline 规则把续行并进首行,否则每行都会变成独立事件。
Filebeat 模块:开箱配置与管线
模块为常见软件(Nginx、System、MySQL 等)预设采集与解析:启用模块 + 加载 ingest pipeline 与看板,采集侧不用写 grok。
Promtail Pipeline:解析与标签加工
pipeline_stages 按序处理每一行:多行合并 → 正则解析 → 打标签 → 时间戳识别;把解析留在采集端可减少重复加工。
日志级别选择与噪声控制
级别是预算:ERROR 喊人、WARN 预警、INFO 记录状态变化、DEBUG 排障细节;级别用错不是信息少了就是噪声爆炸。
ES 节点角色与部署形态
节点按角色分工:master 管集群状态、data 存数据、ingest 做写入前处理、coordinating 负责分发请求;生产通常拆开角色以隔离故障与负载。
快照备份与恢复
快照是集群级备份手段:先注册仓库(文件系统或对象存储),再按索引粒度创建与恢复;跨集群迁移也常用同一套流程。
Kibana 看板:日志可视化组合
把检索结果固化为可视化再组合成看板:错误趋势、Top 服务、错误分布常用直方图、表格、饼图拼装,支持按时间联动与下钻过滤。
Mutate:字段改名、删减与类型转换
mutate 做字段级微调:rename/remove/add_field/convert/gsub;同一块内按书写顺序执行,出错时后续操作可能被跳过。
Processors:轻量字段处理
处理器在发送前处理事件:加字段、丢弃噪声、解析 JSON、丰富主机元数据;比让 Logstash 兜底更省一跳。
Loki 写入与查询限额
限额保护集群不被单租户拖垮:写入速率、突发、流数量、查询序列数与查询时长上限都在 limits_config;命中限额会收到明确报错。
journalctl:systemd 日志速查
systemd 服务日志集中在 journal:按服务/时间/级别过滤、跟看实时输出、查看磁盘占用与清理,是系统层排障的起点。
ELK 与 Loki 的选型对照
两者取舍围绕“索引什么”:ES 全文索引换来检索能力与资源开销,Loki 只索引标签换来低成本与运维简单;按查询深度与预算选择。
Multi-field:text 附带 keyword 子字段
同一内容索引两份视图:text 供全文检索,keyword 子字段供排序聚合;日志平台里 service、level 这类字段常用这个组合。
Refresh 与近实时可见性
ES 索引是近实时:默认每秒 refresh 一次后新文档才可被检索;即时可见要显式 refresh=wait_for/true,代价是合并压力与性能。
ES 堆内存与文件缓存
JVM 堆用于索引结构与查询协调,其余内存留给文件系统缓存;堆过大反而削弱缓存命中,容量规划要两头看。
Kibana Data View(数据视图)
数据视图告诉 Kibana 查哪些索引、用哪个时间字段:支持通配符匹配多个索引,Discovery 与可视化都基于它取数。
Logstash 持久化队列与死信队列
持久化队列把事件先落盘再消费:进程重启不丢在途数据,磁盘写满前还会施加背压;解析失败的毒丸事件进死信队列便于事后分析。
Loki 保留策略配置
保留策略决定日志保存多久:compactor 执行删除,retention_period 设定全局期限;对象存储上的删除需要显式开启并指定删除存储。
日志成本估算与采样策略
日志成本 = 写入量 × 保留期:先估算再治理;健康检查与重复噪声降采样,错误与慢请求保持全量,是较常见的平衡点。
慢查询日志配置
慢日志把超过阈值的查询与写入记入日志文件:先看“谁在慢、慢在什么条件”,再谈优化;阈值可按 warn/info/debug 三档设置。
Filebeat 注册表与文件状态
注册表记录每个文件的读取偏移,是“重启后从哪里继续”的依据;轮转、inode 复用、清理策略都围绕它工作。
日志轮转与清理
轮转控制单文件大小与历史份数:logrotate 按天/大小切分并压缩,保留 N 份;采集器与轮转策略要配合,避免丢行或重复。
Promtail positions 文件管理
positions 文件记录每个文件的读取位置:容器要把它放持久卷,多实例共享会冲突;误删/丢失会让历史日志被重新推送。
链路追踪
Tracing 概念与 OpenTelemetry 基础
链路追踪基础:Trace 与 Span
一次请求的完整路径叫 trace,由若干 span 组成树状结构:每个 span 表示一个工作单元(一次 RPC、一条 SQL、一段计算),带起止时间与父子关系。
OpenTelemetry:项目结构与定位
OpenTelemetry 是厂商中立的遥测标准与工具集:提供 API(埋点接口)、SDK(实现与导出)、Collector(统一收发管道)与语义约定。
W3C Trace Context:跨服务传播标准
traceparent 头承载 trace_id、parent span_id 与采样标志,tracestate 携带厂商额外状态;是跨语言跨厂商链路能连起来的关键标准。
头部采样:在起点决定是否记录
头部采样在 trace 开始时决定:parent-based 尊重上游决定,ratio 采样按 trace_id 哈希确定且全链路一致;成本可控但采不到“事后才重要”的链路。
自动埋点:零代码接入
主流语言提供自动埋点:Java agent 挂载、Python 包装命令、Node 预加载钩子,自动覆盖 HTTP/DB/消息等通用组件调用。
Trace ID 与 Span ID 的格式
标识规范固定:trace_id 为 16 字节(32 位十六进制),span_id 为 8 字节(16 位十六进制);全链路靠 trace_id 关联,span_id 定位具体节点。
上下文传播:让跨进程调用不断链
进程内用上下文对象传递当前 span,跨进程靠协议头:HTTP 用 traceparent,gRPC 用 metadata,消息用消息头;传播断了链路就断。
尾部采样:先收全再决定
尾部采样在 Collector 里缓存完整 trace 后再决策:错误、慢请求全保留,其余按比例丢弃;代价是需要等待与缓存资源。
手动埋点:业务关键路径补 span
自动埋点覆盖框架层,业务语义(下单、扣库存、对账)要手动补:显式命名、设属性、标记状态,才能让链路对业务可读。
Collector:遥测数据的中转站
Collector 统一收口应用侧遥测:receivers 接收、processors 加工、exporters 输送,service 段把三者组装成管道;部署上常分 agent 与 gateway 两层。
Span 属性与事件
属性(attributes)是键值元数据,用于过滤与聚合;事件(events)是带时间戳的节点记录,典型用途是记录异常堆栈与关键里程碑。
按比例采样的配置实践
traceidratio 采样率的选取是成本与可见性的平衡:高流量服务调低、低频关键路径调高;改采样率需要重启或热更新配置。
Resource:描述数据来源的身份
Resource 是一组进程级属性,描述“谁在产出遥测”:service.name、service.version、deployment.environment 是筛选与聚合的核心字段。
Python SDK 初始化示例
Python 手动接入:创建 Resource 与 TracerProvider、挂批处理导出器、注册全局 provider,之后即可用 tracer 埋点。
Collector 配置文件示例
一份可读的 Collector 配置:OTLP 接收(gRPC 4317 / HTTP 4318)、内存保护与批处理、转发到后端;service 段声明 traces 管道。
OTLP 端口与端点约定
OTLP 默认端口成对使用:gRPC 4317、HTTP 4318;接入时按协议选端口,证书与超时按环境配置。
Span 状态与错误标记
状态取值 Unset / Ok / Error:错误要显式标记,配合属性(错误类型、状态码)让筛选“只看失败链路”可用。
Go SDK 初始化示例
Go 接入:构建 OTLP gRPC 导出器、注册 TracerProvider 并 defer Shutdown 保证缓冲数据发出;服务名通过环境变量或 Resource 注入。
语义约定:字段名统一口径
Semantic Conventions 规定属性命名:HTTP 用 http.request.method 与 http.response.status_code,数据库用 db.system、db.operation;跨服务分析靠统一字段。
Span Kind:调用方向标注
Kind 描述 span 在调用中的角色:server/client 成对接跨进程调用,producer/consumer 对接消息流,internal 表示进程内逻辑。
常用 Processor:批处理与属性加工
批处理攒批降开销,属性处理器增删改字段,过滤处理器丢弃噪声;先在 Collector 层做统一治理比每个服务各自改配置省力。
Collector 部署形态:agent 与 gateway
两种部署:每主机/每 Pod 一个 agent 就近接数据,中心一个 gateway 统一加工与出海;规模上来后分层能同时保住可靠性与治理效率。
Baggage:随链路传播的业务上下文
Baggage 携带跨服务共享的键值(如租户、灰度标记),随请求一路传递;数据量小、无敏感信息是使用底线。
告警与响应
告警规则、分级收敛与值班处理流程
告警分级:P0-P3 与响应时效
按用户影响与范围把告警分为 P0-P3:级别决定通知渠道与响应时效。P0 立即唤人,P1 十五分钟内响应,P2 走工单,P3 只留痕。分级标准要成文并与值班制度对齐。
路由树:continue 与子路由匹配顺序
route 从根节点开始匹配,命中子路由即停止(continue: true 例外);用子路由按 severity、team 等标签分流到不同接收器,越具体的匹配越靠前。
Alertmanager 的职责与告警数据流
Prometheus 评估规则并推送 firing 告警,Alertmanager 负责去重、分组、抑制、静默与路由通知,是告警送达环节的核心组件。
抑制规则:高层故障压制衍生告警
inhibit_rules 让高层故障压制衍生告警:source 告警出现时,与 equal 标签匹配的 target 告警停止通知;适合机房级、节点级故障的批量降噪。
group_by 分组:把相关告警压成一条
group_by 把同维度组合的告警合并为一条通知:按 cluster+alertname 聚合可把批量宕机压成一条;分组键按“一起处置”的维度选取,过粗过细都会失真。
静默:窗口内压制通知与到期清理
Silence 按 matchers 在窗口内压制通知,适合变更与演练:用 amtool 创建、查询与撤销,comment 写清变更单号,到期自动失效。
通知节奏:group_wait、group_interval 与 repeat_interval
三个时间参数控制通知节奏:group_wait 等首批聚合(默认 30s),group_interval 控制同组新增变化的再通知(默认 5m),repeat_interval 控制未恢复告警的重复提醒(默认 4h)。
通知模板:define、range 与常用字段
通知文案用 Go 模板渲染:模板文件 define 命名块,receiver 的 title/text 引用;遍历 .Alerts 输出明细,.CommonLabels 提供公共维度。与规则里 annotations 的模板是两层不同机制。
值班轮换:排班、交接与兜底
值班表明确主备、时段与升级顺序;每日交接同步未闭环告警、静默清单与风险窗口;轮换周期兼顾疲劳与熟悉度,常见一周一轮。
无责复盘:时间线、贡献因素与改进项
复盘聚焦系统与流程而非个人:事实时间线、贡献因素、防护哪有效哪失效、带负责人与期限的改进项;无责文化才有信息量。
匹配器语法:=、!=、=~ 与 !~
matchers 支持四种运算符;正则默认锚定(全匹配),要表达包含关系必须显式写 .* ,否则前缀看似匹配实则不中。
amtool:告警、静默与配置校验的命令行
amtool 覆盖日常运维:check-config 校验配置、alert query 查询告警、silence 管理静默、config routes test 预演路由匹配;脚本中固定 URL 与版本。
Runbook:把排障动作写成一页纸
每个可行动告警配一页 runbook:症状、确认步骤、缓解动作、升级条件;链接放进 annotations,值班一键直达。
事故处理流程:先止损,后追因
标准流程:确认分级、指定角色、先止损、固定节奏同步、确认恢复、转复盘;追根因放在恢复之后,处置期间不做责任判断。
Alertmanager 配置骨架:一份可参考的结构
一份配置骨架把全局段、路由树、接收器、抑制与模板串起来,作为新环境起点按需增减;上线前用 amtool check-config 校验。
告警收敛:去重、聚合、抑制与静默的分工
收敛四手段:去重、聚合、抑制、静默;目标是每条通知都可行动——压缩数量但不丢失关键实例与维度信息。
页面、工单与日志:按可行动性分三档
按可行动性分三档:需要立刻人工介入走页面,当天可处理走工单,仅留痕进日志或日报;分档标准写入团队文档并定期复核。
事故分级:SEV1-SEV4 与宣布机制
SEV 描述事件影响面与指挥规模,与告警 P 级不是同一维度:一条 P1 告警可能演变为 SEV1 事故;分级由值班长或 IC 宣布,并配套退出标准。
告警即代码:评审、校验与回滚
规则与 Alertmanager 配置纳入版本库:改动走评审、CI 跑 promtool/amtool 校验与规则单测、按环境发布可回滚。
Kubernetes 告警:PrometheusRule 实践
kube-prometheus-stack 用 PrometheusRule 管理规则、AlertmanagerConfig 管理路由与接收器;改动走 kubectl/Helm,不手改容器内文件。
Webhook 接收器:payload 结构与中继要求
webhook_configs 把告警以 JSON POST 给自建中继(钉钉/飞书/企业微信群机器人网关);payload 含 groupKey、commonLabels 与 alerts 明细。
Alertmanager 高可用:gossip 集群
多实例组集群,用 gossip(默认 9094)同步静默与通知去重状态;实例间无需共享存储,全部实例同时工作,前面挂负载均衡承接上游推送。
告警风暴:从依赖树顶部掐断传导
告警风暴多由依赖树顶部故障引发:指标侧用 for 与阈值过滤,路由侧分组,AM 侧按机房/集群抑制;事后要回溯规则而不是长期手动静默。
升级策略:未确认时逐级唤醒
升级链定义未确认时的逐级唤醒:主值班 5 分钟未确认转备值班,再超时转负责人;每级要有可触达通道并定期演练。
告警疲劳:信号识别与治理顺序
疲劳信号:值班对通知麻木、静默成习惯、故障靠用户先发现;治理先删无效再修阈值,减少数量比优化样式更见效。
变更窗口静默:发布流水线自动化
发布流水线在变更前创建 scope 精确的静默(限定服务、带过期与变更单号),完成后撤销或到期失效,把预期波动与真实故障分开。
Grafana 统一告警:组件与适用场景
Grafana 8 起内置统一告警:规则、接触点、通知策略、静音与勿扰时段集中管理;适合已重度使用 Grafana 与 Loki 的团队。
Grafana 告警规则:条件与待触发期
Grafana 告警规则由查询、条件(Reduce/Threshold)、评估间隔与待触发期组成;No Data 与 Error 状态要显式配置处理方式。
AlertmanagerConfig:命名空间级路由
AlertmanagerConfig 把路由与接收器下沉到命名空间,由 Operator 合并进全局 Alertmanager;适合多团队共享一套告警组件。
邮件接收器:smtp 参数与投递要点
email_configs 配置收件人、发件人与 smarthost(含端口),认证信息可放独立文件;587 端口走 STARTTLS,密码不要写进主配置。
PagerDuty 接收器:routing_key 与去重
pagerduty_configs 用 Events API v2 的 routing_key 接入,fingerprint 作为去重键,恢复时自动 resolve;severity 可模板化,避免全量同等级响铃。
Alertmanager API v2:查询告警与自动化静默
/api/v2/alerts 支持 filter 查询,/api/v2/silences 以 JSON 创建静默,配合发布流水线实现自动化静默;接口无鉴权时只监听内网。
事故角色:IC、OL 与 CL 的分工
事故期间分离三个角色:IC 统筹决策、OL 执行技术处置、CL 对内对外沟通;小事故可兼任,但指挥与处置分离能避免混乱。
告警定期巡检:合并、降级与删除
按月巡检规则清单:看触发历史、是否可行动、有无 runbook;无预案的僵尸告警降级或删除,过时阈值更新,变更走评审流程。
告警生命周期:pending 到 resolved
告警四种状态:inactive、pending(观察中)、firing(已通知)、resolved(恢复);pending 时长分布是阈值调参的重要输入。
误报分析与阈值调参顺序
误报三类来源:阈值贴边、观测窗过短、口径错误;处理顺序先修口径,再看历史分布定阈值,之后才考虑抑制。
静默治理:审计、过期与责任
静默要建账:定期导出活动静默核对 comment、author 与到期时间;无主的长期静默限期整改,变更类静默与变更单对账。
Grafana 接触点与通知策略
接触点定义怎么发(邮件、Webhook、IM),通知策略定义发给谁;默认策略兜底,按 severity 等标签建子策略并用测试按钮验证。
Slack 接收器:api_url 与消息字段
slack_configs 使用 Incoming Webhook 地址,channel 可覆盖默认频道,title/text 支持模板;api_url 属凭据,用文件变体或环境注入。
企业微信接入:应用消息与群机器人两条路
企业微信两条接入路径:wechat_configs 走自建应用(corp_id、to_party、agent_id),群机器人 webhook 需自建中继转换消息体;机器人有频控,中继要做合并退避。
配置热重载:校验、单台验证、逐台推进
改配置先校验,再对单实例 reload(POST /-/reload 需 --web.enable-lifecycle,或发 SIGHUP),观察日志无错后在集群内逐台推进。
值班质量周报:页面次数与噪声度量
用数据体检告警体系:每周统计页面次数、确认时长、无动作比例与噪声来源排行;把删除无用告警当成常态优化而非一次性项目。
通知渠道选型:电话、IM 与邮件的分工
渠道按打扰强度配级别:电话/短信给必须立刻响应的 P0/P1,IM 给在班内处理的 P2,邮件给留痕类;每级保留一条兜底通道。
维护窗口:计划静默与收尾核对
计划维护三步:提前公告、按范围建限时静默、结束后核对积压告警;核心可用性告警保留窄通道,随时可叫停维护。
通知通道例行测试与升级链演练
通道静默失效是常见隐患:每周对每个接收器发探针告警并确认到达,含升级链测试;不要绕过路由直接测中继。
告警文案:一行说清什么坏了
文案三件事:什么对象、什么现象、下一步去哪;summary 给结论、description 给数据、annotations 放看板与 runbook 链接。
告警归属:owner 与服务目录对齐
每条告警有明确 owner 并与服务目录对齐:无人认领的告警在评审时要么落责任人要么删除,避免大家都以为别人管。
Grafana 静音定时:周期维护窗口
勿扰时段描述周期性窗口(如每周例行维护),在通知策略中引用;一次性窗口用临时静音,两者用途区分清楚。
值班交接检查单
交接十分钟完成四件事:过未闭环告警、确认静默与维护窗口、同步风险变更、自检通道与升级链;书面留痕优于口头。
通知限流:保护人与通道
两端限流:AM 侧用 group 与 repeat 参数控节奏,中继侧设并发与频率上限并合并超额告警;限流不丢关键消息,恢复通知优先放行。