Prometheus Alertmanager 测验
用于测试您对 Prometheus Alertmanager 理解程度的测验。
- 在 Alertmanager 中,告警在触发前会经历的中间状态是什么?
- A) Active
- B) Pending
- C) Warning
- D) Waiting
显示答案
答案:B) Pending
说明: Prometheus 告警有三种状态:Inactive、Pending 和 Firing。当告警规则的条件(expr)满足时,告警会先转换为 Pending 状态;如果该条件在 for 子句指定的时长内持续满足,告警将转换为 Firing 状态并发送至 Alertmanager。该机制可避免因临时峰值产生不必要的告警。
- 下列哪项正确描述了 Alertmanager 路由配置中
group_wait、group_interval和repeat_interval的作用?- A) group_wait:发送告警组的第一条通知前的等待时间
- B) group_interval:重新发送相同告警的间隔
- C) repeat_interval:向组中添加新告警时的等待时间
- D) 三者执行相同的功能
显示答案
答案:A) group_wait:发送告警组的第一条通知前的等待时间
说明:
group_wait:创建新的告警组后,发送第一条通知前的等待时间。在此期间,属于同一组的其他告警会被收集并一同发送。group_interval:当同一组中添加新告警时,发送下一条通知前的等待时间。repeat_interval:同一告警尚未解决时重新发送该告警的间隔。
- 下列哪项正确描述了 Alertmanager 的 Inhibition 功能?
- A) 在特定时间段内忽略所有告警的功能
- B) 特定告警触发时抑制相关告警的功能
- C) 自动降低告警严重程度的功能
- D) 合并重复告警的功能
显示答案
答案:B) 特定告警触发时抑制相关告警的功能
说明: Inhibition 是一种功能,当特定条件告警(source)触发时,会抑制相关告警(target)。例如,当某个节点宕机时,可以抑制来自该节点的所有与 Pod 相关的告警,以防止告警风暴。Silencing 是一项独立功能,用于在特定时间段内忽略告警。
- PrometheusRule CRD 中的以下告警规则表示什么含义?yaml
- alert: HighCPU expr: node_cpu_usage > 80 for: 5m labels: severity: warning- A) CPU 使用率超过 80% 时立即触发告警
- B) CPU 使用率连续 5 分钟超过 80% 时触发告警
- C) 每 5 分钟检查一次 CPU 使用率,若超过 80% 则触发告警
- D) CPU 超过 80% 后 5 分钟发送告警通知
显示答案
答案:B) CPU 使用率连续 5 分钟超过 80% 时触发告警
说明:for: 5m 设置表示,告警条件(expr)必须连续满足 5 分钟,才会转换为 Firing 状态。首次满足条件时,状态会变为 Pending;如果条件持续满足 5 分钟,则转换为 Firing 并发送至 Alertmanager。该机制可避免因临时峰值产生不必要的告警。
- Alertmanager 的 receiver 配置中的
send_resolved: true表示什么?- A) 同时将已解决的告警发送给 receiver
- B) 在告警消息中包含解决方法
- C) 自动将告警更改为已解决状态
- D) 授予 receiver 解决告警的权限
显示答案
答案:A) 同时将已解决的告警发送给 receiver
说明:send_resolved: true 设置会在告警解决时(条件不再满足时)向 receiver 发送解决通知。这使响应人员能够知道问题已经解决。默认值因 receiver 类型而异,但通常建议启用此设置。
- 在 Alertmanager 高可用配置中,集群成员之间使用什么协议同步状态?
- A) Raft
- B) Paxos
- C) Gossip
- D) gRPC
显示答案
答案:C) Gossip
说明: Alertmanager 集群使用 Gossip 协议在成员之间同步状态。这使 Silence 信息和通知日志(nflog)能够在所有实例之间共享,从而防止重复的告警通知。配置集群时,请使用 --cluster.peer 标志指定其他成员。
- 在以下 Alertmanager 路由配置中,
severity=critical且team=infra的告警会发送给哪个 receiver?yamlroute: receiver: 'default' routes: - match: severity: critical receiver: 'critical-receiver' - match: team: infra receiver: 'infra-team'- A) default
- B) critical-receiver
- C) infra-team
- D) critical-receiver 和 infra-team 两者
显示答案
答案:B) critical-receiver
说明: Alertmanager 路由以树形结构运行,默认情况下在第一个匹配的路由处结束处理。在此示例中,severity=critical 条件最先匹配,因此告警会发送至 critical-receiver。要发送至多个路由,需要使用 continue: true 设置。
- AlertmanagerConfig CRD 的主要目的是什么?
- A) 定义 Alertmanager 的全局配置
- B) 按 namespace 分离告警配置
- C) 定义 Prometheus 告警规则
- D) 配置 Alertmanager 集群
显示答案
答案:B) 按 namespace 分离告警配置
说明: AlertmanagerConfig CRD 是 Prometheus Operator 提供的资源,可按 namespace 分别管理 Alertmanager 配置(receivers、routes、inhibition rules 等)。这样,每个团队都可以在自己的 namespace 中独立管理告警配置。
- 以下哪项不是在 Alertmanager 中创建 Silence 的适当使用场景?
- A) 在计划维护期间抑制告警
- B) 防止已知问题的重复告警
- C) 永久禁用特定告警
- D) 在 Deployment 期间抑制告警
显示答案
答案:C) 永久禁用特定告警
说明: Silence 是一项临时抑制告警的功能,并且必须始终指定结束时间。要永久禁用告警,需要修改或删除告警规则本身。Silence 的主要使用场景是维护、Deployment 或调查已知问题等临时情况。
- 以下哪项不是可在 Alertmanager 模板中使用的有效 Go template 语法?
- A)
{{ .Labels.alertname }} - B)
{{ if eq .Status "firing" }}Danger{{ end }} - C)
{{ range .Alerts }}{{ .Labels.severity }}{{ end }} - D)
{{ .Annotations.description | length > 100 ? substring(0, 100) : .Annotations.description }}
- A)
显示答案
答案:D) {{ .Annotations.description | length > 100 ? substring(0, 100) : .Annotations.description }}
说明: Go template 不支持三元运算符(? :)。应使用 {{ if }} 语句。正确语法如下:
{{ if gt (len .Annotations.description) 100 }}
{{ slice .Annotations.description 0 100 }}...
{{ else }}
{{ .Annotations.description }}
{{ end }}Go template 支持管道(|)、条件语句(if/else)、循环(range)、内置函数等。