[program:alertmanager]
command=/app/3rd/alertmanager/alertmanager --config.file="conf/alertmanager.yml" --storage.path="/app/data/alertmanager/data"
directory=/app/3rd/alertmanager
autostart=true
startsecs=10
autorestart=true
startretries=5
user=app
priority=999
redirect_stderr=true
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=3
stderr_logfile_maxbytes=50MB
stderr_logfile_backups=3
stdout_logfile=/app/logs/alertmanager/supervisor-out-alertmanager.log
stderr_logfile=/app/logs/alertmanager/supervisor-err-alertmanager.log
stopasgroup=false
killasgroup=false
[program:prometheus]
command=/usr/bin/prometheus --config.file=/app/3rd/prometheus/conf/prometheus.yml --storage.tsdb.path=/app/data/prometheus/data --web.console.libraries=/app/3rd/prometheus/console_libraries --web.console.templates=/app/3rd/prometheus/consoles --storage.tsdb.retention=7d --web.enable-lifecycle
directory=/app/3rd/prometheus
autostart=true
startsecs=10
autorestart=true
startretries=5
user=app
priority=999
redirect_stderr=true
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=3
stderr_logfile_maxbytes=50MB
stderr_logfile_backups=3
stdout_logfile=/app/logs/prometheus/supervisor-out-prometheus.log
stderr_logfile=/app/logs/prometheus/supervisor-err-prometheus.log
stopasgroup=false
killasgroup=false
[program:prometheus_telegram_bot]
command=/app/3rd/prometheus_telegram_bot/prometheus_bot -c conf/config.yaml
directory=/app/3rd/prometheus_telegram_bot
autostart=true
startsecs=10
autorestart=true
startretries=5
user=app
priority=999
redirect_stderr=true
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=3
stderr_logfile_maxbytes=50MB
stderr_logfile_backups=3
stdout_logfile=/app/logs/prometheus_telegram_bot/supervisor-out-prometheus_telegram_bot.log
stderr_logfile=/app/logs/prometheus_telegram_bot/supervisor-err-prometheus_telegram_bot.log
stopasgroup=false
killasgroup=false
## prometheus
docker run -d --name prometheus --restart=always -p 9090:9090 -v /app/3rd/prometheus/conf:/etc/prometheus -v /app/data/prometheus:/prometheus prom/prometheus:v2.30.0 --web.external-url http://prometheus.pro.bitvito.net --config.file=/etc/prometheus/prometheus.yml
## grafana
docker run -i -d --name grafana --restart=always -p 3000:3000 -v /app/data/grafana:/var/lib/grafana -v /app/3rd/grafana/conf:/etc/grafana -v /app/3rd/grafana/plugins:/var/lib/grafana/plugins -e "GF_SERVER_ROOT_URL=http://10.0.41.255" -e "GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-piechart-panel,grafana-simple-json-datasource 1.2.3" grafana/grafana:8.1.3
## dingtalk
docker run -d --restart=always -p 8060:8060 -v /app/3rd/alertmanager/dingtalk.yml:/etc/prometheus-webhook-dingtalk/config.yml -v /app/3rd/alertmanager/templates/dingtalk.tmpl:/etc/prometheus-webhook-dingtalk/templates/dingtalk.tmpl --name dingtalk-webhook timonwong/prometheus-webhook-dingtalk:v1.4.0 --web.listen-address=:8060 --web.enable-ui --config.file=/etc/prometheus-webhook-dingtalk/config.yml
## alertmanager
docker run -d --restart=always --name alertmanager -p 9093:9093 -v /app/3rd/alertmanager/alertmanager-dingtalk.yml:/etc/alertmanager/alertmanager.yml prom/alertmanager
## webhook-dingtalk
docker run -d --restart=always -p 8060:8060 -v /app/3rd/alertmanager/conf/dingtalk.yml:/etc/prometheus-webhook-dingtalk/config.yml -v /app/3rd/alertmanager/conf/templates/dingtalk.tmpl:/etc/prometheus-webhook-dingtalk/templates/default.tmpl --name dingtalk-webhook timonwong/prometheus-webhook-dingtalk:v1.4.0
Prometheus配置alertmanager:prometheus.yml
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
- ${alertmanager_server}:${port}
templates:
- /etc/prometheus-webhook-dingtalk/templates/dingtalk.tmpl
targets:
default-webhook:
url: https://oapi.dingtalk.com/robot/send?access_token=98e974e3f94a5684dc80574cd588f36cef80e8e22285ab156cd2a6f72bb2ef94
mention:
all: true
message:
title: '{{ template "ding.link.title" . }}'
text: '{{ template "alert.content" . }}'
{{ define "alert.content" }}
{{- if gt (len .Alerts.Firing) 0 -}}
#### \[告警\]
{{ range $i, $alert := .Alerts }}
** 警报项:{{ index $alert.Labels "alertname" }} ; 警报级别:{{ index $alert.Labels "severity" }} **
>- 警报摘要:{{ index $alert.Annotations "summary" }}
>- 警报详述:{{ index $alert.Annotations "description" }}
>- 告警时间:{{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
>- 负责人:{{ index $alert.Annotations "owner" }}
>- 备份:{{ index $alert.Annotations "backup" }}
------------------------------
{{ end }}
{{ end }}
{{- if gt (len .Alerts.Resolved) 0 -}}
#### \[恢复\]
{{ range $i, $alert := .Alerts }}
** 警报项:{{ index $alert.Labels "alertname" }} ; 警报级别:{{ index $alert.Labels "severity" }} **
>- 警报摘要:{{ index $alert.Annotations "summary" }}
>- 警报详述:{{ index $alert.Annotations "description" }}
>- 告警时间: {{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
>- 恢复时间: {{ ($alert.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
>- 负责人:{{ index $alert.Annotations "owner" }}
>- 备份:{{ index $alert.Annotations "backup" }}
------------------------------
{{ end }}
{{ end }}
{{- end }}
global:
#该参数定义了当Alertmanager持续多长时间未接收到告警后标记告警状态为resolved(已解决)。该参数的定义可能会影响到告警恢复通知的接收时间,其默认值为5分钟。
resolve_timeout: 5m
#Alertmanager的配置主要包含两个部分:路由(route)以及接收器(receivers)。所有的告警信息都会从配置中的顶级路由(route)进入路由树,根据路由规则将告警信息发送给相应的接收器。
#在Alertmanager中可以定义一组接收器,比如可以按照角色(比如系统运维,数据库管理员)来划分多个接收器。接收器可以关联邮件,Slack以及其它方式接收告警信息。
#本段节选自:https://yunlzheng.gitbook.io/prometheus-book/parti-prometheus-ji-chu/alert/install-alert-manager
#route定义告警的路由匹配规则,以及Alertmanager需要将匹配到的告警发送给哪一个receiver
route:
#分组用于将详细的告警信息合并成一个通知。
#比如由于系统宕机导致大量的告警被同时触发,在这种情况下分组机制可以将这些被触发的告警合并为一个告警通知,避免一次性接受大量的告警通知,而无法对问题进行快速定位。
#例如,当集群中有数百个正在运行的服务实例,并且为每一个实例设置了告警规则。假如此时发生了网络故障,可能导致大量的服务实例无法连接到数据库,结果就会有数百个告警被发送到Alertmanager。
#而作为用户,可能只希望能够在一个通知中中就能查看哪些服务实例收到影响。这时可以按照服务所在集群或者告警名称对告警进行分组,而将这些告警内聚在一起成为一个通知。
#本段话节选自:https://yunlzheng.gitbook.io/prometheus-book/parti-prometheus-ji-chu/alert/prometheus-alert-manager-overview
#根据报警的名称分组
group_by: ['alertname']
#有的时候为了能够一次性收集和发送更多的相关信息时,可以通过group_wait参数设置等待时间,如果在等待时间内当前group接收到了新的告警,这些告警将会合并为一个通知向receiver发送。
group_wait: 5s
#用于定义相同的Group之间发送告警通知的时间间隔
group_interval: 10s
#未解决告警的重复提醒时间间隔
repeat_interval: 1m
#告警发送给哪一个receiver,告警默认通知到的目标地址
receiver: 'webhook-dingtalk'
#routes用来定义子路由,如果命中子路由的match,则将告警发现子路由中定义的目标地址
#routes:
#- match:
# debug: true
# receiver: dingtalk2
# group_by: [fullurl, host]
receivers:
- name: 'webhook-dingtalk'
webhook_configs:
- send_resolved: false
url: http://${webhook-dingtalk-server}:${port}/dingtalk/default-webhook/send
telegram_token: "5235697005:AAGHyLaT8qOvG7hKZSAB7D6ober-AXQlZPA"
# ONLY IF YOU USING DATA FORMATTING FUNCTION, NOTE for developer: important or test fail
time_outdata: "02/01/2006 15:04:05"
#template_path: "/app/3rd/prometheus_telegram_bot/conf/templates/telegram_bot.tmpl" # ONLY IF YOU USING TEMPLATE
time_zone: "Asia/Shanghai" # ONLY IF YOU USING TEMPLATE
split_msg_byte: 10000
send_only: true # use bot only to send messages.
global:
#该参数定义了当Alertmanager持续多长时间未接收到告警后标记告警状态为resolved(已解决)。该参数的定义可能会影响到告警恢复通知的接收时间,其默认值为5分钟。
resolve_timeout: 5m
#Alertmanager的配置主要包含两个部分:路由(route)以及接收器(receivers)。所有的告警信息都会从配置中的顶级路由(route)进入路由树,根据路由规则将告警信息发送给相应的接收器。
#在Alertmanager中可以定义一组接收器,比如可以按照角色(比如系统运维,数据库管理员)来划分多个接收器。接收器可以关联邮件,Slack以及其它方式接收告警信息。
#本段节选自:https://yunlzheng.gitbook.io/prometheus-book/parti-prometheus-ji-chu/alert/install-alert-manager
#route定义告警的路由匹配规则,以及Alertmanager需要将匹配到的告警发送给哪一个receiver
route:
#分组用于将详细的告警信息合并成一个通知。
#比如由于系统宕机导致大量的告警被同时触发,在这种情况下分组机制可以将这些被触发的告警合并为一个告警通知,避免一次性接受大量的告警通知,而无法对问题进行快速定位。
#例如,当集群中有数百个正在运行的服务实例,并且为每一个实例设置了告警规则。假如此时发生了网络故障,可能导致大量的服务实例无法连接到数据库,结果就会有数百个告警被发送到Alertmanager。
#而作为用户,可能只希望能够在一个通知中中就能查看哪些服务实例收到影响。这时可以按照服务所在集群或者告警名称对告警进行分组,而将这些告警内聚在一起成为一个通知。
#本段话节选自:https://yunlzheng.gitbook.io/prometheus-book/parti-prometheus-ji-chu/alert/prometheus-alert-manager-overview
#根据报警的名称分组
group_by: ['alertname']
#有的时候为了能够一次性收集和发送更多的相关信息时,可以通过group_wait参数设置等待时间,如果在等待时间内当前group接收到了新的告警,这些告警将会合并为一个通知向receiver发送。
group_wait: 5s
#用于定义相同的Group之间发送告警通知的时间间隔
group_interval: 10s
#未解决告警的重复提醒时间间隔
repeat_interval: 1m
#告警发送给哪一个receiver,告警默认通知到的目标地址
receiver: 'webhook-prometheus_telegram_bot'
#routes用来定义子路由,如果命中子路由的match,则将告警发现子路由中定义的目标地址
#routes:
#- match:
# debug: true
# receiver: dingtalk2
# group_by: [fullurl, host]
receivers:
- name: 'webhook-prometheus_telegram_bot'
webhook_configs:
- send_resolved: False
url: http://${prometheus_telegram_bot}:${PORT}/alert/-1001768584804