prometheus监控之alertmanager安装配置(2)接入电话报警微信、短信、邮件等告警

电话告警(语音报警、语音通知、电话报警)可使用(OpsAlert) 支持电话、短信、邮件、微信多种报警,直接使用WebHook配置即可,比较简单。

介绍

Prometheus 将数据采集和报警分成两个模块。报警规则配置在Prometheus Servers上,然后发送报警信息到AlertManger,Alertmanager 对收到的告警信息进行处理,包括去重,降噪,分组,沉默,抑制,策略路由,告警通知。

流程 

Alertmanager 接收到告警,根据labels判断属于哪些Route(可存在多个Route,一个Route有多个Group,一个Group有多个Alert)

将告警分配到Group中,没有则新建Group,新的Group等待group_wait指定的时间(等待时可能收到同一Group的告警),根据resolve_timeout判断告警是否解决,然后发送通知

已有的Group等待group_interval指定的时间,判断告警是否解决,当上次发送通知到现在的间隔大于repeat_interval或者Group有更新时会发送通知

分组

分组是指当出现问题时,Alertmanager 会收到一个单一的通知,而当整个系统或网络故障时,很有可能有成百上千的告警会同时生成,这种机制在较大故障中特别有用。如当数十或数百个服务的实例在运行,网络发生故障时,有可能服务实例的一半不可达数据库。在告警规则中配置为每一个服务实例都发送警报的话,那么结果是数百警报被发送至Alertmanager,但是作为用户只想看到单一的报警页面,同时仍然能够清楚的看到哪些实例受到影响,因此,通过配置 Alertmanager 将警报分组打包,并发送一个相对看起来紧凑的通知。

抑制

抑制是指当告警发出后,停止重复发送由此告警引发其他错误的告警的机制。如当警报被触发,通知整个集群不可达,可以配置Alertmanager 忽略由该警报触发而产生的所有其他警报,这可以防止通知数百或数千与此问题不相关的其他警报。

沉默

沉默是一种简单的特定时间静音提醒的机制。一种沉默是通过匹配器来配置,就像路由树一样。传入的警报会匹配RE,如果匹配,将不会为此警报发送通知。

沉默机制可以通过Alertmanager的Web页面进行配置。

安装

Download | Prometheus (下载最新版本的 Alertmanager)

cd /data/alertmanager
wget https://github.com/prometheus/alertmanager/releases/download/v0.17.0/alertmanager-0.17.0.linux-amd64.tar.gz
tar -zxvf alertmanager-0.17.0.linux-amd64.tar.gz

配置

cd alertmanager-0.17.0.linux-amd64/
vim alertmanager.yml
 
global:
  resolve_timeout: 5m #处理超时时间,默认为5分钟
  smtp_from: 'test@ywfuns.com'
  smtp_smarthost: 'smtp.exmail.qq.com:25'
  smtp_auth_username: 'test@ywfuns.com'
  smtp_auth_password: '123'
 
route:
  group_by: ['alertname', 'item']  # 传入报警分组在一起的标签,如item=测试和alertname=Disk的多个报警将批处理为单个组
  group_wait: 30s  # 最初即第一次等待多久时间发送一组警报的通知
  group_interval: 300s  # 在发送新警报前的等待时间
  repeat_interval: 4h  # 发送重复警报的周期 对于email配置中,此项不可以设置过低,否则将会由于邮件发送太多频繁,被smtp服务器拒绝
  receiver: 'mail.hook'   # 发送警报的接收者的名称,以下receivers name的名称
  routes:
    - receiver: 'web.hook'
      group_wait: 10s         
      match:           
        severity: node # 带有 severity=node 的报警将被发送到 web.hook
         
# 定义模板信心
# templates:
#   - '/data/template/*.tmpl'
           
receivers:
- name: 'web.hook'
  webhook_configs:
  #  webhook 接收地址
  - url: 'https://www.opsalert.cn/alert/prometheus/fd70c90f-823b-4299-b697-eaf27dea204e' 
    send_resolved: false  # 是否通知已解决的告警

# - url: 'http://127.0.0.1:8070/dingtalk/'         
#   send_resolved: true
     
- name: 'email'
  email_configs:
  - to: 'test@ywfuns.com'
#    html: '{{ template "mail.html" . }}'
#    headers: { Subject: " {{ .CommonAnnotations.summary }}" }
   
#- name: 'mail.hook' # 告警时同时发送到 webhook_configs 和 email_configs
#  webhook_configs:
#  - url: 'http://127.0.0.1:8070/hook/'
#  email_configs:
#  - to: 'test@ywfuns.com' # 多个用逗号隔开
 
# -name: 'wechat'
#   wechat_configs:
#   - url: 'https://qyapi.weixin.qq.com/cgi-bin/' # 企业微信地址
#     to_party: '1' # 接收组的id
#     agent_id: '1000002' # (企业微信-->自定应用-->AgentId)
#     corp_id: '******' # 企业信息(我的企业-->CorpId[在底部])
#     api_secret: '******' # 企业微信(企业微信-->自定应用-->Secret)
#     message: '{{ template "wechat.html" . }}' # 发送消息模板的设定
 
inhibit_rules: # 抑制规则
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance', 'prod']

接收器 receivers 我这里只测试了webhook_configs 和 email_configs 当然还支持其他的接收器(pagerduty_configs、slack_config、opsgenie_configs、wechat_configs),使用方法都差不多。

API

#  GET 查看 receivers (发送渠道)列表
https://localhost/api/v2/receivers 
#  GET 查看 alerts (报警)列表
https://localhost/api/v2/alerts?silenced=false&inhibited=false 
#  POST 添加报警
  
alerts='[
  {
    "labels": {
       "alertname": "DiskAll",
       "dev": "sda1",
       "instance": "example"
     },
     "annotations": {
        "info": "The disk sda1 is running full",
        "summary": "please check the instance example"
      }
}]
curl -XPOST -d"$alerts" https://localhost/api/v2/alerts
 
#  GET 查看 silences (静默)列表
https://localhost/api/v2/silences?silenced=false&inhibited=false 
#  POST 添加静默
https://localhost/api/v2/silences

注意: API 添加 silences 的时候,因 prometheus 默认时区为UTC且无法改变时区,因此我们的报警时间应该 -8:00,如下脚本

#! /usr/bin/env python
# -*- coding:utf8 -*-
 
import datetime
import urllib2
import json
import time
 
def add(matchers, username, commit):
    UTC_FORMAT = "%Y-%m-%dT%H:%M:%S.%fZ"
    now_stamp = time.time()
    startsAt = datetime.datetime.utcfromtimestamp(now_stamp)
    endsAt = startsAt + datetime.timedelta(hours=4)
    data = {
        "matchers": matchers,
        "startsAt": startsAt.strftime(UTC_FORMAT),
        "endsAt": endsAt.strftime(UTC_FORMAT),
        "createdBy": username,
        "comment": commit,
        "id": "",
        "status": {"state": "active"}
    }
 
    request_header = {'Content-Type': 'application/json'}
    request = urllib2.Request("https://alert.test.com/api/v2/silences", headers=request_header, data = json.dumps(data))
    response = urllib2.urlopen(request).read()
    print response
 
matchers = [{'isRegex': False, 'name': 'test', 'value': 'test'}]
add(matchers, "test", "测试")

启动

vim /usr/lib/systemd/system/alertmanager.service
 
[Unit]
Description=alertmanager server daemon
Documentation=https://prometheus.io/docs/introduction/overview/
After=network.target
 
[Service]
ExecStart=/data/alertmanager/alertmanager-0.17.0.linux-amd64/alertmanager --config.file=/data/alertmanager/alertmanager-0.17.0.linux-amd64/alertmanager.yml --storage.path=/data/alertmanager/data
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
 
[Install]
WantedBy=multi-user.target
 
# 启动
systemctl daemon-reload
systemctl restart alertmanager.service

Prometheus 配置添加 Alertmanager

# 添加如下配置并重启 prometheus 服务
vim prometheus.yml
 
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - localhost:9093
       
rule_files:
   - /data/prometheus/prometheus/rules/*.rules # 规则配置文件

模板

cat /data/template/wechat.tmpl
 
{{ define "wechat.html" }}
  {{ range $i, $alert := .Alerts.Firing }}
    [报警项名]:{{ index $alert.Labels "alertname" }}
    [报警主机]:{{ index $alert.Labels "instance" }}
    [报警阀值]:{{ index $alert.Annotations "value" }}
    [开始时间]:{{ $alert.StartsAt }}
  {{ end }}
{{ end }}

Prometheus 添加规则(rules)

警报规则允许你基于Prometheus表达式语言的表达式定义报警报条件,并在触发警报时发送通知给外部的接收者。每当警报表达式在给定时间点产生一个或者多个向量元素,这个警报统计活跃的这些元素标签集。

vim /data/prometheus/prometheus/rules/hoststats-alert.rules
 
groups:
- name: hostStatsAlert
 
  rules:
  - alert: instanceDown
    expr: up == 0
    for: 5m
    labels:
      severity: node
    annotations:
      summary: "Instance {{ $labels.instance }} down"
      description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."
   
  - alert: diskFree
    expr: (1-(node_filesystem_free_bytes{fstype=~"ext4|xfs"} / node_filesystem_size_bytes{fstype=~"ext4|xfs"}) ) * 100 > 85
    for: 5m
    labels:
      severity: page
    annotations:
      summary: "Instance {{ $labels.instance }} down"
      description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."

FOR 选项语句会使Prometheus服务等待指定的时间, 在第一次遇到新的表达式输出向量元素(如:具有高HTTP错误率的实例)之间,并将该警报统计为该元素的触发。如果该元素的活跃的,且尚未触发,表示正在挂起状态。

LABELS 选项语句允许指定额外的标签列表,把它们附加在警告上。任何已存在的冲突标签会被重写。这个标签值能够被模板化。

ANNOTATIONS 选项语句指定了另一组标签,它们不被当做警告实例的身份标识。它们经常用于存储额外的信息,例如:警告描述,后者runbook链接。这个注释值能够被模板化。

我这里添加了2条报警规则,分别是实例Down了及磁盘使用大于85%就触发报警。

如果实例Down了的话就触发label为severity=node的receiver(上面alertmanager 配置文件中),可以看到上面的配置就会匹配web.hook这个receiver,然后会将报警信息POST到我们提供的 hook 接口中。

一个报警信息在生命周期内有下面3中状态:

  • inactive: 表示当前报警信息既不是firing状态也不是pending状态

  • pending: 表示在设置的阈值时间范围内被激活了

  • firing: 表示超过设置的阈值时间被激活了

消息推送平台,一分钟实现电话、短信、飞书、钉钉等消息推送。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 好的,关于 Prometheus Alertmanager邮件告警配置,你可以按照以下步骤进行: 1. 在 Alertmanager配置文件 alertmanager.yml 中添加以下内容: ``` route: receiver: 'email' group_by: ['alertname'] group_wait: 30s group_interval: 5m repeat_interval: 4h receivers: - name: 'email' email_configs: - to: 'xxx@xxx.com' from: 'xxx@xxx.com' smarthost: 'smtp.xxx.com:25' auth_username: 'xxx' auth_password: 'xxx' starttls_policy: 'mayskip' send_resolved: true ``` 这里的配置中,receiver 指定了告警通知的接收方式,这里是通过邮件发送,group_by 指定了按照 alertname 进行分组,group_wait 和 group_interval 分别指定了等待时间和分组时间间隔,repeat_interval 指定了重复发送告警的时间间隔。 receivers 中的 name 指定了接收器的名称,email_configs 中指定了邮件发送的相关参数,包括收件人、发件人、SMTP 服务器地址、SMTP 认证用户名和密码等。 2. 配置 SMTP 服务器的认证方式。Alertmanager 支持多种认证方式,包括 PLAIN、LOGIN、CRAM-MD5 等。根据 SMTP 服务器的要求进行配置即可。 3. 重启 Alertmanager 服务,使配置生效。 这样就完成了 Prometheus Alertmanager邮件告警配置。当出现告警时,Alertmanager 会根据配置发送邮件给指定的收件人。 ### 回答2: Prometheus是一个非常流行的开源监控工具,它提供了很多功能来监控各种系统和服务。AlertmanagerPrometheus的一部分,用于处理和发送告警消息。 要配置Alertmanager发送邮件告警,首先需要编辑Alertmanager配置文件alertmanager.yml。在配置文件中,需要定义邮件接收者和SMTP服务器的详细信息。以下是一个简单的示例配置: ``` global: smtp_smarthost: 'smtp.example.com:587' smtp_from: 'alertmanager@example.com' smtp_auth_username: 'username' smtp_auth_password: 'password' route: group_by: ['job'] group_wait: 30s group_interval: 5m repeat_interval: 1h receiver: 'email' receivers: - name: 'email' email_configs: - to: 'recipient@example.com' ``` 在上面的配置中,我们定义了全局的SMTP服务器和发件人信息。其中'smtp_smarthost'是SMTP服务器的地址和端口,'smtp_from'是发件人的邮件地址,'smtp_auth_username'和'smtp_auth_password'是SMTP服务器的认证信息。 然后,在'route'部分中定义了告警的路由规则。此示例中,我们将告警按照'job'进行分组,每个组的告警等待时间为30秒,组间间隔为5分钟,重复发送间隔为1小时。最后,如果满足路由规则,将发送到名为'email'的接收者。 在'receivers'部分,我们定义了接收者'email'的详细信息,包括收件人的邮件地址。 保存并关闭配置文件后,重新启动Alertmanager服务,新的配置将生效。 这样,当Prometheus监测到有告警触发时,Alertmanager将根据配置发送邮件给指定的接收者。注意确保SMTP服务器配置正确,并且能够成功发送邮件。 ### 回答3: 为了配置Prometheus Alertmanager发送邮件告警,我们需要修改alertmanager.yml文件。首先,确保已经安装PrometheusAlertmanager,并且已经使用了正确的配置文件路径。以下是一个示例的alertmanager.yml配置文件: ``` global: smtp_smarthost: 'smtp.example.com:587' smtp_from: 'alertmanager@example.com' smtp_auth_username: 'username' smtp_auth_password: 'password' smtp_auth_identity: '' smtp_require_tls: true route: group_by: ['alertname', 'job'] group_wait: 10s group_interval: 5m repeat_interval: 3h receiver: 'email-alert' receivers: - name: 'email-alert' email_configs: - to: 'your-email@example.com' ``` 在上述配置文件中,我们进行了以下配置: 1. 全局设置: - `smtp_smarthost`:SMTP服务器的地址和端口。 - `smtp_from`:发送邮件的地址。 - `smtp_auth_username`:SMTP服务器的用户名。 - `smtp_auth_password`:SMTP服务器的密码。 - `smtp_auth_identity`:SMTP服务器的身份验证标识。 - `smtp_require_tls`:是否需要启用TLS加密。 2. 路由设置: - `group_by`:用于分组告警的标签。 - `group_wait`:相同分组告警之间的等待时间。 - `group_interval`:发送相同分组告警的时间间隔。 - `repeat_interval`:重复发送告警的时间间隔。 - `receiver`:指定接收告警的接收器。 3. 接收器设置: - `name`:接收器的名称。 - `email_configs`:邮件相关的配置。 - `to`:接收告警的邮箱地址。 请根据实际情况修改这些配置项,确保将邮件服务器的地址、端口、邮箱地址及密码等信息替换为实际的内容。修改完成后,保存文件并重新启动Alertmanager服务,配置邮件告警将生效。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值