介绍
警报和通知是部署工作流程中至关重要的一部分。在使用 Kubernetes 集群时,通常需要立即收到有关集群中任何关键问题的通知。
Alertmanager 是安装在您的集群中的 kube-prom-stack
的一部分,在 Prometheus Stack 中。它允许您从各种来源(如 Prometheus)接收警报。规则是在 Prometheus 方面创建的,然后可以触发警报。Alertmanager 的责任是拦截这些警报,对它们进行分组(聚合),应用其他转换,最后将它们路由到配置的接收器。如果需要,通知消息可以进一步格式化以包含其他详细信息。您可以使用 Slack、Gmail 等发送实时通知。
在本节中,您将学习如何检查现有的警报,创建新的警报,然后配置 Alertmanager 使用相同的 清单文件 来通过 Slack 发送通知,该文件用于配置 Prometheus。
目录
先决条件
要完成本教程,您将需要:
- 在您的集群中安装了Prometheus监控堆栈,如Prometheus堆栈中所解释的。
- 在您的集群中安装了Loki堆栈,如Loki堆栈中所解释的。
- 部署了Emojivoto示例应用在集群中。请按照主存储库中的步骤进行操作。您将为此应用程序创建警报。
- 对Slack工作区拥有管理权限。稍后,您将创建一个带有传入Webhook的应用程序,该Webhook将用于从Alertmanager发送通知。
步骤1 – 检查包含的警报
kube-prom-stack
已经激活了一百多条规则。要访问Prometheus控制台,首先要将端口转发到本地机器。
在localhost:9091上打开一个网络浏览器,然后访问Alerts菜单项。您应该会看到一些预定义的警报,并且它应该看起来像以下内容:
单击任何警报以展开它。您可以查看有关查询表达式、设置的标签和非常重要的注释的信息,从模板化的角度来看,注释在警报的标签和注释中支持模板化。有关更多信息,请查阅官方文档。
步骤2 – 创建新警报
要创建新警报,您需要在kube-prom-stack
Helm 值文件的additionalPrometheusRule
部分中添加新定义。
您将创建一个示例警报,如果emojivoto
命名空间的实例数量不符合预期,将触发该警报。对于emojivoto
应用程序,预期的 Pod 数量为4。
首先,使用您选择的文本编辑器(最好支持 YAML lint)打开提供的 Starter Kit 存储库中的04-setup-observability/assets/manifests/prom-stack-values.yaml
文件。然后,取消注释additionalPrometheusRules
块。
最后,使用helm
应用设置:
要检查警报是否已成功创建,请导航至Prometheus 控制台,单击Alerts菜单项,并识别EmojivotioInstanceDown
警报。它应该可见于列表底部。
步骤3 – 配置 Alertmanager 将通知发送到 Slack
要完成此部分,您需要对Slack工作区拥有管理权限。这将使您能够在接下来的步骤中创建所需的传入网络钩子。您还需要创建一个频道,您想从Alertmanager接收通知。
- 打开网络浏览器,导航至
https://api.slack.com/apps
。点击创建新应用按钮。 - 在创建应用窗口中,选择从头开始选项。然后,给您的应用程序命名并选择适当的工作区。
- 在基本信息页面上,点击传入网络钩子选项,打开它,并点击底部的添加新的网络钩子到工作区按钮。
- 在下一页上,使用搜索频道…下拉列表选择要发送通知的所需频道。准备好后,点击允许按钮。
- 复制页面上显示的网络钩子URL值。您将在下一节中需要它。
接下来,您将告诉Alertmanager如何发送Slack通知。使用您选择的文本编辑器打开Starter Kit存储库中提供的04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml
文件。取消注释整个alertmanager.config
块。确保通过替换<>
占位符更新slack_api_url
和channel
值。
在上述配置中,
slack_api_url
:在第4步创建的传入Slack webhook URLreceivers.[].slack_configs
:定义用于发送通知的Slack频道、通知标题和实际消息。还可以根据您的要求格式化通知消息(或正文)。title
和text
:迭代触发警报并使用Prometheus模板系统打印摘要和描述。send_resolved
:布尔值,指示Alertmanager在警报不再触发时是否发送通知。
在本指南中,matcher
和 continue
参数仍然被注释掉,稍后您将取消注释。
最后,使用helm
升级kube-prometheus-stack
:
到这一步,您应该会收到有关所有触发警报的Slack通知。
接下来,您将测试之前添加的EmojivotoInstanceDown
警报是否起作用,并通过将emojivoto
命名空间的/emoji
部署的副本数降低来发送通知到Slack。
从您的终端运行以下命令将/emoji
部署的副本数减少到 0:
在 localhost:9091 上打开一个网络浏览器,并访问 Alerts 菜单项。搜索之前创建的 EmojivotoInstanceDown 警报。大约一分钟后,警报的状态应该显示为 Firing,这是因为扩展部署。
A message notification will be sent to Slack to the channel you configured earlier if everything goes well. You should see the “The Number of pods from the namespace emojivoto
is lower than the expected 4.” alert in the Slack message as configured in the annotations.description
config of the additionalPrometheusRulesMap
block.
目前,所有的警报触发都会发送到 Slack 频道。这可能会导致通知过载。要详细查看发送的通知,您可以限制 Alertmanager 仅发送与特定模式匹配的警报通知。这可以通过使用 matcher
参数来实现。
使用您选择的文本编辑器打开提供在 Starter Kit 仓库中的 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml
文件。取消注释整个 alertmanager.config
块。确保取消注释 matcher
和 continue
参数:
最后,使用 helm
升级 kube-prometheus-stack
:
现在,您应该只会收到与匹配的 EmojivotoInstanceDown
警报名称相匹配的警报。由于 continue
被设置为 false,Alertmanager 将只发送来自此警报的通知,并停止发送其他警报的通知。
单击 Slack 中的通知名称将打开一个网络浏览器,访问 Alertmanager pod 的内部 Kubernetes DNS,但无法访问到网页,这是正常现象。以下是一些有用的链接供您查看:DNS pod 服务、AlertManager 的配置参数,以及一些通知示例。
步骤 4 – 调试触发的警报
当警报触发并在 Slack 中发送通知时,能够轻松调试问题并及时找到根本原因非常重要。为此,您可以利用已经安装在Prometheus Stack和Loki Stack教程中的 Grafana。
在端口3000
上为 Grafana 创建一个端口转发:
在localhost:3000上打开网络浏览器,并使用默认凭据admin/prom-operator
登录。
导航到警报部分。从状态筛选器中,点击触发选项。展开创建新警报部分中定义的emojivoto-instance-down
警报。您应该看到以下内容:
点击查看图形按钮。从下一页,您可以观察到在emojivoto
命名空间中的Pod数量作为度量显示的数量。请注意,Grafana默认使用过去1小时的时间范围过滤结果。调整为警报触发时段的时间间隔。您可以使用从到选项进行更精细的结果,或使用快速范围,如过去30分钟
。
从探索选项卡中,选择Loki数据源。在日志浏览器中输入以下内容:{namespace="emojivoto"}
,然后点击页面右上角的运行查询按钮。您应该看到以下内容:
确保您相应地调整时间间隔。
从该页面,您可以进一步筛选日志结果。例如,要过滤emojivoto
命名空间的web-svc
容器的日志,您可以输入以下查询:{namespace="emojivoto", container="web-svc"}
有关使用LogQL
的更多说明,请参阅第3步 – 使用LogQL。
您还可以利用先前安装的导出的 Kubernetes 事件并过滤与emojivoto
命名空间相关的事件。
在日志浏览器中输入以下查询:{app="event-exporter"} |= "emojivoto"
。这将返回与emojivoto
命名空间相关的 Kubernetes 事件。
结论
在本教程中,您学会了如何检查现有警报、创建新警报,并配置AlertManager
将通知发送到 Slack。
了解更多
下一步是在您的DOKS集群中使用Velero或TrilioVault设置备份和恢复。