在我之前的博客中,“如何用简单的‘Hello World’项目探索普罗米修斯,”为了更好地了解Prometheus的功能,我描述了三个项目。在这篇文章中,我想分享一下我是如何更加熟悉普罗米修斯Alertmanager以及我如何为Slack、PagerDuty和Gmail设置提醒通知。
(我将参考我以前的博客文章,所以我建议在继续之前阅读它。)
最基本的
你可以开始普罗米修斯在几分钟内Grafana云.我们有适合每个用例的免费和付费Grafana Cloud计划-现在就免费注册。
通过Prometheus设置警报分为两个步骤:
首先,您需要在Prometheus中创建警报规则,并指定在什么条件下希望收到警报(例如当实例关闭时)。
其次,你需要设置Alertmanager,接收Prometheus中指定的警报。然后,Alertmanager将能够做各种事情,包括:
- 将性质相似的警报分组到单个通知中
- 在特定时间内静音警报
- 如果其他指定的警报已经触发,则将某些警报的通知静音
- 选择接收特定警报的接收方
步骤1:在Prometheus中创建警报规则
我们从之前为每个项目设置的四个子文件夹开始:Server、node_export、github_export和prom_middleware.这个过程在我的博客文章中有解释,关于如何用简单的项目探索普罗米修斯在这里.
我们接着讲服务器子文件夹并在代码编辑器中打开内容,然后创建一个新的规则文件。在rules.yml,您将指定您希望收到警报的条件。
cd Prometheus/server touch rules.yml
我相信每个人都同意知道你的实例什么时候坏了非常重要的。因此,我要用这个作为条件向上指标。通过在Prometheus用户界面(http://localhost:9090)中评估这个指标,您将看到所有正在运行的实例的值都是1,而所有当前未运行的实例的值都是0(我们目前只运行Prometheus实例)。
确定警报条件后,需要在rules.yml。其内容如下:
groups:—name: AllInstances rules:—alert: InstanceDown #报警条件expr: up == 0 for: 1m # Annotation—附加信息标签,存储更多信息注释:title: 'Instance {{$labels. #实例}}down' description: '{{$labels。作业{{$labels的实例}}。作业}}已关闭超过1分钟。' #标签-附加在警告标签上的标签:severity: 'critical'
总而言之,它表示,如果任何实例将在一分钟内处于down (up == 0)状态,那么警报将启动。我还添加了注释和标签,用于存储关于警报的附加信息。对于这些,你可以使用模板化变量如{{$标签。实例}}然后将它们内插到特定的实例中(例如localhost:9100)。
(你可以阅读更多关于普罗米修斯警报规则在这里.)
一旦你有rules.yml准备好了,你需要把文件链接到prometheus.yml并添加告警配置。你的prometheus.yml看起来是这样的
global: #抓取目标的频率scrape_interval: 10s #评估规则的频率evaluation_interval: 10s #从指定的文件(s)中读取规则和警报rule_files: -规则。alertmanagers: - static_configs: - targets: # Alertmanager的默认端口为9093 - localhost:9093 #刮取配置的列表,该列表指定了一组# targets和描述如何刮取它们的参数。—job_name: 'prometheus' scrape_interval: 5s static_configs:—targets:—localhost:9090—job_name: ' node_exports ' scrape_interval: 5s static_configs:—targets:—localhost:9100—job_name: 'prom_middleware' scrape_interval: 5s static_configs:—targets:—localhost:9091
如果你从《普罗米修斯》开始——web.enable-lifecycle
标志,您可以通过发送POST请求来重新加载配置/ /重新加载
端点curl -X POST http://localhost:9090/-/reload
.之后,启动prom_middleware app (节点index.js
在prom_middleware文件夹中)和node_export (。/ node_exporter
在node_exporters文件夹中)。
一旦您这样做了,任何时候您想要创建一个警报,您只需停止node_exporters或prom_middleware应用程序。
步骤2:设置Alertmanager
创建一个alert_managerPrometheus文件夹中的子文件夹,mkdir alert_manager
.文件中下载并解压缩Alertmanager普罗米修斯的网站,且无需对alertmanager.yml,你会跑/ alertmanager——config.file = alertmanager.yml
打开localhost:9093。
取决于您是否有任何活动的警报,Alertmanager应该正确设置,看起来如下图所示。要查看在上面步骤中添加的注释,请单击+信息按钮。
完成所有这些之后,我们现在可以看看使用Alertmanager和发送警报通知的不同方式。
如何设置Slack提醒
如果你想通过Slack接收通知,你应该成为Slack工作区的一部分。如果你目前不是任何Slack工作空间的一部分,或者你想在单独的工作空间中进行测试,你可以快速创建一个在这里.
要在您的Slack工作区中设置警报,您需要一个Slack API URL。去Slack -> Administration ->应用管理。
在“管理应用程序”目录中搜索进来的人并将其添加到您的Slack工作区中。
接下来,指定您希望在哪个通道中接收来自Alertmanager的通知。(我创建了#monitoring-infrastructure频道。)确认并添加Incoming WebHooks集成后,webhook URL(这是您的Slack API URL)会显示出来。复制它。
然后需要修改alertmanager.yml文件。首先,打开子文件夹alert_manager在代码编辑器中,并填写alertmanager.yml基于下面的模板。使用刚才复制的url作为slack_api_url。
slack_api_url: 'https://hooks.slack.com/services/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' route: receiver: 'slack-notifications' receivers: - name: 'slack-notifications' slack_configs: - channel: '#monitoring-instances' send_resolved: true
通过发送POST请求来重新加载配置/ /重新加载
端点curl -X POST http://localhost:9093/-/reload
.在几分钟内(在你停止至少一个实例后),你应该会通过Slack收到你的提醒通知,如下所示:
如果你想改进你的通知,让它们看起来更好,你可以使用下面的模板,或者使用这个工具创造你自己的。
global: resolve_timeout: 1m slack_api_url: 'https://hooks.slack.com/services/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' route: receiver: 'slack-notifications' receivers: - name: 'slack-notifications' slack_configs: - channel: '#monitoring-instances' send_resolved: true icon_url: https://avatars3.githubusercontent.com/u/3380462 title: |- [{{. status | toUpper}}{{if eq . status "firing"}}:{{. alerts . messages . {}触发| len}}{{end}}] {{. commonlabels。alertname}}用于{{. commonlabels。job}} {{- if gt (len . commonlabels) (len . grouplabels) -}} {{" "}}({{- with . commonlabels。删除.GroupLabels。名称}}{{——美元指数范围,标签:美金= .SortedPairs -}}{{如果美元指数}},{{结束}}{{- $标签。名称}}="{{$label. Name "价值 -}}" {{- 结束}}{{——结束 -}} ) {{- 结束}}文本:> -{{范围.Alerts -}} *警报:* {{.Annotations。title}}{{如果.标签。severity}} - '{{.标签。severity}} ' {{end}} *描述:* {{. annotations . Description}} *详细信息:* {{range . labels . label . name。SortedPairs }} • *{{ . 的名字 }}:* `{{ . 值}}’{{结束}}{{结束}}
这是最终的结果:
如何设置PagerDuty提醒
PagerDuty是IT部门最知名的事件响应平台之一。要通过PagerDuty设置警报,您需要在那里创建一个帐户。(PagerDuty是一项付费服务,但你可以免费试用14天。)登录后,转到配置—>服务—> +新建服务。
从Integration types列表中选择Prometheus,并为服务指定一个名称。我决定把我的电脑命名为普罗米修斯警报管理器。(你也可以自定义事件设置,但我使用了默认设置。)然后单击保存。
集成键将显示出来。复制密钥。
你需要更新你的内容alertmanager.yml。它应该类似于下面的示例,但是使用您自己的service_key(来自PagerDuty的集成键)。Pagerduty_url应该保持不变,应该设定为https://events.pagerduty.com/v2/enqueue.保存并重新启动Alertmanager。
全局:resolve_timeout: 1m pagerduty_url: 'https://events.pagerduty.com/v2/enqueue' route: receiver: 'pagerduty-notifications' receivers: - name: 'pagerduty-notifications' pagerduty_configs: - service_key: 0c1cc665a594419b6d215e81f4e38f7 send_resolved: true
停止其中一个实例。几分钟后,应该在PagerDuty中显示警报通知。
在PagerDuty用户设置中,您可以决定如何得到通知:电子邮件和/或电话。我都选了,它们都很成功。
如何设置Gmail警报
如果你更喜欢通过电子邮件服务直接收到通知,设置就更简单了。Alertmanager可以简单地将消息传递到您的提供程序(在本例中,我使用Gmail),然后由它代表您发送消息。
不建议您为此使用个人密码,因此您应该创建一个应用程序的密码.要做到这一点,请参见帐户设置->安全->登录谷歌->应用程序密码(如果你没有看到应用程序密码选项,你可能还没有设置2步验证,需要先设置)。复制新创建的密码。
你需要更新你的内容alertmanager.yml一次。内容应该与下面的示例类似。不要忘记将邮箱地址替换为您自己的邮箱地址,密码替换为您的新应用程序密码。
Global: resolve_timeout: 1m route: receiver: 'gmail-notifications' receivers: - name: 'gmail-notifications' email_configs: - to: monitoringinstances@gmail.com from: monitoringinstances@gmail.com smarthost: smtp.gmail.com:587 auth_username: monitoringinstances@gmail.com auth_identity: monitoringinstances@gmail.com auth_password:密码send_resolved: true
同样,在几分钟之后(在您停止至少一个实例之后),警报通知应该被发送到您的Gmail。
就是这样!