LabHub
学习 学习路径 课程

PCA — Prometheus 认证助理

指标真的在流动的 Prometheus

在 LabHub 中继续学习

本实验在真正的 Prometheus 上运行

VM 中实际运行着 Prometheus、Alertmanager 和 node-exporter。 node-exporter 会提供真实指标,因此 PromQL 处理的是真实数据,规则会被 实际评估,告警也会真正触发并发送至 Alertmanager。

PCA 课程其他实验使用的模拟集群中 并没有 Prometheus 本身。 之前能做的只有练习编写查询。

不使用 kube-prometheus-stack 如果由 Operator 代写配置, 就没有机会接触 prometheus.yml,而 PCA 考查的正是这个文件。

首次启动大约需要 3 分钟。

已准备的内容

Prometheus     http://127.0.0.1:30090   설정은 /etc/prometheus/prometheus.yml
Alertmanager   http://127.0.0.1:30093
규칙           /etc/prometheus/rules/rules.yml
대상           node-exporter(데몬셋) · demo-app · Prometheus 자신
질의 도구      promq 'up'

目标

从抓取配置开始,亲手连接整条路径,直至告警到达 Alertmanager。

为什么重要

使用 Prometheus 时,最常遇到的障碍并不是语法。

最后一点尤其重要。原以为‘服务宕机就会收到告警’,但在 Pod 整体消失的部署事故中, 却会完全没有告警。

步骤

  1. 确认当前正在抓取哪些目标,并将结果保存到 /root/pca/targets.txt
  2. 使用 kubernetes_sd_configs 自动发现 Pod,并将结果保存到 /root/pca/sd.txt
  3. 使用 relabel_configs 只保留带有注解的目标,创建 app 标签,并将结果保存到 /root/pca/relabel.txt
  4. 编写 PromQL 并保存到 /root/pca/promql.txt。需要包含 instant=range=rate_result= 三行。
  5. 创建一条记录规则(名称遵循 level:metric:operation 约定),确认它确实产生结果,并保存到 /root/pca/recording.txt
  6. 创建一条告警规则,让目标实际发生故障,直至进入 firing 状态,并将结果保存到 /root/pca/alert.txt。还要使用 for 子句。
  7. 让 Prometheus 将告警发送到 Alertmanager,并将实际送达的结果保存到 /root/pca/am.txt
  8. /root/pca/report.md 中写入 up_targets=alert_fired=yesrecording_rule= 三行及相关说明。

参考

当前正在抓取什么

确认当前正在抓取哪些目标,并将结果保存到 /root/pca/targets.txt

同时查看 /api/v1/targets 和当前的 prometheus.yml

不手动填写目标

使用 kubernetes_sd_configs 自动发现 Pod,并将结果保存到 /root/pca/sd.txt

kubernetes_sd_configs 中使用 role: pod,列表就会随着 Pod 的创建和消失自动更新。

保留什么、丢弃什么

使用 relabel_configs 只保留带有注解的目标,创建 app 标签,并将结果保存到 /root/pca/relabel.txt

__meta_ 开头的标签只在重标签之前存在。使用 keep 进行筛选,再通过 target_label 创建新标签。

查询真实数据

编写 PromQL 并保存到 /root/pca/promql.txt。需要包含 instant=range=rate_result= 三行。

需要包含 instant=range=rate_result= 三行。计数器应使用 rate()

预先计算结果

创建一条记录规则(名称遵循 level:metric:operation 约定),确认它确实产生结果,并保存到 /root/pca/recording.txt

名称应遵循 level:metric:operation 约定。必须包含冒号,才能与原始指标区分开来。

让告警实际触发

创建一条告警规则,让目标实际发生故障,直至进入 firing 状态,并将结果保存到 /root/pca/alert.txt。还要使用 for 子句。

只有在目标仍然存在但没有响应时up == 0 才为真。删除 Pod 会使时间序列本身消失。

告警必须有发送目的地

让 Prometheus 将告警发送到 Alertmanager,并将实际送达的结果保存到 /root/pca/am.txt

如果不配置 alerting.alertmanagers,即使规则已触发,告警也不会发送到任何地方。

学到了什么

/root/pca/report.md 中写入 up_targets=alert_fired=yesrecording_rule= 三行及相关说明。

写入 up_targets=alert_fired=yesrecording_rule= 三行及相关说明。