Prometheus系列Alertmanager通过Telegram发送告警信息

创建 Telegram Bot

Telegram中找到BotFather,创建一个新的bot,并获取到API token

获取BOT

向您的bot发送一条消息,然后使用Telegram API 查询您的聊天信息。可以使用如下URL,替换 为您的bot token`:

curl https://api.telegram.org/bot<TOKEN>/getUpdates

从返回的JSON中找到您的chat ID(通常是-1开头的)。

创建告警模板

[root@prometheus alertmanager]# vim alert-tg.tmp 
{{ define "telegram.to.html" }} 
{{ if eq .Status "firing" }}🔥 {{ end }}{{ if eq .Status "resolved" }}✅ {{ end }}<b>[{{ .Status | toUpper }}] {{ .CommonLabels.alertname }} on {{ .CommonLabels.instance }}</b>
{{ range .Alerts }}
{{$severity := .Labels.severity -}}
{{if eq $severity "warning" -}}
<b>Severity: </b> {{$severity}} ⚠️
{{else if eq $severity "critical" -}}
<b>Severity: </b> {{$severity}} 🚨
{{else -}}
<b>Severity: </b> {{$severity}} 😱
{{ end -}}
{{$status := .Status -}}
{{ if eq $status "firing" -}}
<b>Date/Time: </b> {{ .StartsAt.Format "Mon 02 Jan 15:04:05 MST 2006" }}
{{else if eq $status "resolved" -}}
<b>Date/Time: </b> {{ .EndsAt.Format "Mon 02 Jan 15:04:05 MST 2006" }}
{{ end -}}
<b>Alert: </b> {{ .Annotations.title }}
<b>Description: </b> {{ .Annotations.description }}
<b>Details: </b>
  {{ range .Labels.SortedPairs }} - {{ .Name | title }}: {{ .Value }}
  {{ end }}
{{ end }}
{{ end }}  

配置 Alertmanager

编辑 Alertmanager 的配置文件 alertmanager.yml,添加 Telegram 接收器。以下是一个基本的配置示例:

global:
  resolve_timeout: 5m

route:
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 3h
  receiver: 'telegram'

receivers:
- name: 'telegram_receiver'
  telegram_configs:
  - api_url: 'https://api.telegram.org'
    chat_id: '<YOUR_CHAT_ID>'
    bot_token: '<YOUR_BOT_TOKEN>'
    message: '{{ template "telegram.to.html" .}}' # 这里要和告警模板中定义的对应
    parse_mode: 'HTML'
    send_resolved: true

重启 Alertmanager

保存配置文件后,重启 Alertmanager 以使更改生效。

[root@prometheus alertmanager]# systemctl restart alertmanager

测试

我们同样使用之前的方法,kill nginx进程,模拟web down,来触发告警。

pkill  -9 nginx

检查tg 群组或者channel已经接收到告警信息通知了,随后我们起动nginx,同样也能接收到服务恢复的消息通知。

其他方式