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,同样也能接收到服务恢复的消息通知。
