AlertManager 是一个开源警报系统,与 Prometheus 监控系统配合使用。本博客是 Prometheus Kubernetes 教程系列的一部分。在我们之前的文章中,我们研究了以下内容:
- 在 Kubernetes 上部署 Prometheus
- 部署 Kube State Metrics
在本指南中,我将介绍 Alertmanager 设置及其与 Prometheus 的集成。
注意:在本指南中,所有 Alert Manager Kubernetes 对象都将在名为 monitoring 的命名空间中创建。如果使用不同的命名空间,则可以在 YAML 文件中替换它。
Kubernetes 上的 Alertmanager
Alert manager 有以下关键配置:
- 用于 Alertmanager 配置的 ConfigMap
- 用于 Alertmanager 警报模板的 ConfigMap
- Alertmanager 本身的 Deployment
- Alertmanager 的 Service,用于访问 Web UI
重要注意事项
您应该已经启动并运行了一个 Prometheus。Prometheus 的 config.yaml 中应具有正确的 Alertmanager 地址,如下所示,以便将警报发送到警报管理器。
alerting:alertmanagers:- scheme: httpstatic_configs:- targets:- "alertmanager.monitoring.svc:9093"
为了能够接收邮件告警,您需要在 Alertmanager 的 config.yaml 中配置合法的 SMTP 信息。您也可以根据自己的需求自定义邮件告警模板。我们在本指南中给出了通用模板。让我们开始吧。
Alertmanager Kubernetes 清单
本教程中使用的所有 Kubernetes 清单都可以在此 Github 链接中找到。使用以下命令克隆 Github 仓库。
git clone https://github.com/bibinwilson/kubernetes-alert-manager.git
用于 Alertmanager 配置的 ConfigMap
Alert Manager 从 config.yaml 文件中读取其配置。它包含警报模板路径、电子邮件和其他警报接收配置的配置。
在此次部署演示中,我们使用电子邮件和 Slack webhook 接收器。您可以从此处查看所有受支持的警报接收器。
创建名为 AlertManagerConfigmap.yaml 的文件,并复制以下内容。
kind: ConfigMap
apiVersion: v1
metadata:name: alertmanager-confignamespace: monitoring
data:config.yml: |-global:templates:- '/etc/alertmanager/*.tmpl'route:receiver: alert-emailergroup_by: ['alertname', 'priority']group_wait: 10srepeat_interval: 30mroutes:- receiver: slack_demo# Send severity=slack alerts to slack.match:severity: slackgroup_wait: 10srepeat_interval: 1m receivers:- name: alert-emaileremail_configs:- to: demo@devopscube.comsend_resolved: falsefrom: from-email@email.comsmarthost: smtp.eample.com:25require_tls: false- name: slack_demoslack_configs:- api_url: https://hooks.slack.com/services/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sz4Qkchannel: '#devopscube-demo'
让我们使用 kubectl 创建 ConfigMap。
kubectl create -f AlertManagerConfigmap.yaml
用于 Alertmanager 警报模板的 ConfigMap
我们需要为我们使用的所有接收器(电子邮件、Slack 等)提供警报模板。Alertmanager 将动态替换这些值,并根据模板向接收者发送警报。您可以根据需要自定义这些模板。
创建一个名为 AlertTemplateConfigMap.yaml 的文件,并从此文件链接 ==> 警报管理器模板 YAML 中复制内容。
使用 kubectl 创建 configmap。
kubectl create -f AlertTemplateConfigMap.yaml
创建 Deployment
在此 Deployment 中,我们将挂载我们创建的两个 ConfigMap。
使用以下内容创建名为 Deployment.yaml 的文件。
apiVersion: apps/v1
kind: Deployment
metadata:name: alertmanagernamespace: monitoring
spec:replicas: 1selector:matchLabels:app: alertmanagertemplate:metadata:name: alertmanagerlabels:app: alertmanagerspec:containers:- name: alertmanagerimage: prom/alertmanager:latestargs:- "--config.file=/etc/alertmanager/config.yml"- "--storage.path=/alertmanager"ports:- name: alertmanagercontainerPort: 9093resources:requests:cpu: 500mmemory: 500Mlimits:cpu: 1memory: 1GivolumeMounts:- name: config-volumemountPath: /etc/alertmanager- name: templates-volumemountPath: /etc/alertmanager-templates- name: alertmanagermountPath: /alertmanagervolumes:- name: config-volumeconfigMap:name: alertmanager-config- name: templates-volumeconfigMap:name: alertmanager-templates- name: alertmanageremptyDir: {}
使用 kubectl 创建 Deployment。
kubectl create -f Deployment.yaml
创建 Alertmanager 的服务端点
我们需要使用 NodePort 或 Load Balancer 公开警报管理器,以便访问 Web UI。Prometheus 将使用内部服务端点与警报管理器进行通信。
创建包含以下内容的 Service.yaml 文件。
apiVersion: v1
kind: Service
metadata:name: alertmanagernamespace: monitoringannotations:prometheus.io/scrape: 'true'prometheus.io/port: '9093'
spec:selector: app: alertmanagertype: NodePort ports:- port: 9093targetPort: 9093nodePort: 31000
使用 kubectl 创建服务。
kubectl create -f Service.yaml
现在,您将能够在节点端口 31000 上访问警报管理器。例如
http://35.114.150.153:31000
- 英文原文:https://devopscube.com/alert-manager-kubernetes-guide/
- 中文译文:https://flashcat.cloud/blog/alert-manager-kubernetes-guide/
- 译者:巴辉特
本博客出自快猫星云的小伙伴们,快猫星云是一家专注在监控/可观测性领域的初创公司,其团队是开源项目 Open-Falcon、Nightingale 的创始团队。如果您想要采购监控/可观测性相关的产品方案,欢迎 联系我们做产品技术交流。