一.自定义邮件告警

二.使用docker部署微信机器人告警

1.制作镜像

2.启动容器和指定webhook容器

一.自定义邮件告警

在alertmanager服务的配置文件中指定自定义告警文件

# vim alertmanager.yaml
global:
resolve_timeout: 5m
smtp_smarthost: 'smtp.qq.com:465'
smtp_from: 'x34989xxx@qq.com'
smtp_auth_username: 'x34989xx@qq.com'
smtp_auth_password: 'lxxxxxxxxtubdfd'
smtp_require_tls: false
smtp_hello: 'qq.com' templates:
- '/etc/alertmanager/template/*.tmpl' route:
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 1m
receiver: 'email' receivers:
- name: 'email'
email_configs:
- to: '20xxxxxx@qq.com'
html: '{{ template "email.to.html" . }}'
headers: { Subject: "告警" }
send_resolved: true inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']

书写自定义配置文件

{{ define "email.to.html" }}
{{ if gt (len .Alerts.Firing) 0 }}
{{ range .Alerts }}
======== 异常告警========== <br>
告警程序: Alertmanager <br>
告警主机: {{ .Annotations.summary }} <br>
告警类型: {{ .Annotations.alarmPolicyType }} <br>
告警级别: {{ .Labels.severity }} <br>
告警状态: {{ .Status }} <br>
告警详情: {{ .Annotations.description }} <br>
触发时间: {{ (.StartsAt.Add 28800e9) "2022-8-11 17:30:01" }} <br>
==========end============= <br>
{{ end }}
{{ end }}
{{ if gt (len .Alerts.Resolved) 0 }}
{{ range .Alerts }}
======== <span style=color:#00FF00;font-size:11px;font-weight:bold;> 告警恢复 </span>==========<br>
告警程序: Alertmanager <br>
告警主机: {{ .Annotations.summary }} <br>
告警类型: {{ .Annotations.alarmPolicyType }} <br>
告警级别: {{ .Labels.severity }} <br>
告警状态: {{ .Status }} <br>
告警详情: {{ .Annotations.description }} <br>
触发时间: {{ (.StartsAt.Add 28800e9) "2022-8-11 17:30:01" }} <br>
恢复时间: {{ (.EndsAt.Add 28800e9) "2022-8-11 17:30:01" }} <br>
===========end============ <br>
{{ end }}
{{ end }}
{{ end }}

注:里面的标签需要根据内置的标签和自定义的标签来配置

二.使用docker部署微信机器人告警

注:这里的自定义告警用webhook来转发

1.制作镜像

1)准备webhook启动代码

注:里面的标签需要和自己的配置的相同

~]# vim app.py
# -*- coding: utf-8 -*-
import os
import json
import requests
import arrow from flask import Flask
from flask import request app = Flask(__name__) def bytes2json(data_bytes):
data = data_bytes.decode('utf8').replace("'", '"')
return json.loads(data) def makealertdata(data):
for output in data['alerts'][:]:
try:
pod_name = output['labels']['pod']
except KeyError:
try:
pod_name = output['labels']['pod_name']
except KeyError:
pod_name = 'null' try:
namespace = output['labels']['namespace']
except KeyError:
namespace = 'null' try:
message = output['annotations']['message']
except KeyError:
try:
message = output['annotations']['description']
except KeyError:
message = 'null'
if output['status'] == 'firing':
status_zh = '<font color=\"warning\">告警</font>'
title = '【%s】告警 %s 有新的报警' % (status_zh, output['annotations']['alarmPolicyType'])
send_data = {
"msgtype": "markdown",
"markdown": {
"content": "## %s \n\n" %title +
">**告警级别**: %s \n\n" % output['labels']['severity'] +
">**告警类型**: %s \n\n" % output['annotations']['metricDisplayName'] +
">**告警主机**: %s \n\n" % output['annotations']['summary'] +
">**告警负责人**: %s \n\n" % "<@v_keo>" +
">**告警详情**: %s \n\n" % message +
">**告警状态**: %s \n\n" % output['status'] +
">**触发时间**: %s \n\n" % arrow.get(output['startsAt']).to('Asia/Shanghai').format(
'YYYY-MM-DD HH:mm:ss ZZ')
}
}
elif output['status'] == 'resolved':
status_zh = '<font color=\"info\">恢复</font>'
title = '【%s】环境 %s 有报警恢复' % (status_zh, output['annotations']['alarmPolicyType'])
send_data = {
"msgtype": "markdown",
"markdown": {
"content": "## %s \n\n" %title +
">**告警级别**: %s \n\n" % output['labels']['severity'] +
">**告警类型**: %s \n\n" % output['annotations']['metricDisplayName'] +
">**告警主机**: %s \n\n" % output['annotations']['summary'] +
">**告警负责人**: %s \n\n" % "<@v_keo>" +
">**告警详情**: %s \n\n" % message +
">**告警状态**: %s \n\n" % output['status'] +
">**触发时间**: %s \n\n" % arrow.get(output['startsAt']).to('Asia/Shanghai').format(
'YYYY-MM-DD HH:mm:ss ZZ') +
">**触发结束时间**: %s \n" % arrow.get(output['endsAt']).to('Asia/Shanghai').format(
'YYYY-MM-DD HH:mm:ss ZZ')
}
}
return send_data
def send_alert(data):
token = os.getenv('ROBOT_TOKEN')
if not token:
print('you must set ROBOT_TOKEN env')
return
url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=%s' % token send_data = makealertdata(data)
req = requests.post(url, json=send_data)
result = req.json()
if result['errcode'] != 0:
print('notify dingtalk error: %s' % result['errcode']) @app.route('/', methods=['POST', 'GET'])
def send():
if request.method == 'POST':
post_data = request.get_data()
send_alert(bytes2json(post_data))
return 'success'
else:
return 'weclome to use prometheus alertmanager dingtalk webhook server!' if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)

2)准备python需要的模块文件

~]# vim requirements.txt
certifi==2018.10.15
chardet==3.0.4
Click==7.0
Flask==1.0.2
idna==2.7
itsdangerous==1.1.0
Jinja2==2.10
MarkupSafe==1.1.0
requests==2.20.1
urllib3==1.24.1
Werkzeug==0.14.1
arrow==0.13.1

3)书写dockerfile文件

~]# vim Dockerfile
FROM python:3.6.4
# set working directory
WORKDIR /src
# add app
ADD . /src
# install requirements
RUN pip install selectivesearch -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
RUN pip install -r requirements.txt
EXPOSE 500
# run server
CMD python app.py

4)制作镜像

docker build -f /data/prometheus/Dockerfile2/webkook/Dockerfile -t webhook:v1 . --network=host
# -f : 指定dockerfile文件位置

2.启动容器和指定webhook容器

1)启动容器

docker run --name=webhook --net=host -v /etc/localtime:/etc/localtime -v /data/prometheus/Dockerfile2/webkook/app.py:/src/app.py -d -e ROBOT_TOKEN=xxxxx4-69ac-458c-af07-a69xxebsxxd webhook:v1
# /etc/localtime 时间要一致
# -e ROBOT_TOKEN= 指定机器人 key

2)告警配置指定webhook

]# cat alertmanager.yaml-wx 

global:
resolve_timeout: 5m route:
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 1m
receiver: 'web.hook' receivers:
- name: 'web.hook'
webhook_configs:
- url: 'http://起容器的ip:5000'
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
  1. 注:如果转发不了记得把端口映射出来

prometheus Alertmanager webhook的更多相关文章

  1. Docker+Prometheus+Alertmanager+Webhook钉钉告警

    Docker+Prometheus+Alertmanager+Webhook钉钉告警 1.环境部署 1.1 二进制部署 1.2 docker部署 1.2.1 webhook 1.2.2 alertma ...

  2. prometheus学习系列十: Prometheus AlertManager配置文件说明

    alertmanager配置文件说明 alertmanager是通过命令行标记和配置文件配置的,命令行标记配置不可变的系统参数,配置文件定义抑制规则.通知路由和通知接收器.可以通过官方提供的routi ...

  3. Longhorn,企业级云原生容器分布式存储 - 监控(Prometheus+AlertManager+Grafana)

    内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? Longhorn 企业级云原生容器分布式存储解决方案设计架构和概念 Longhorn 企业级云原生容器分 ...

  4. 使用 Prometheus Alertmanager 模块发送 Doris 异常信息至钉钉报警群

    基础环境 1.Prometheus 版本:2.22.2 下载地址: https://github.com/prometheus/prometheus/releases/download/v2.22.2 ...

  5. istio prometheus预警Prometheus AlertManager

    1.安装alertmanager kubectl create -f 以下文件 alertmanager-templates.yaml.configmap.yaml.deployment.yaml.s ...

  6. [k8s]prometheus+alertmanager二进制安装实现简单邮件告警

    本次任务是用alertmanaer发一个报警邮件 本次环境采用二进制普罗组件 本次准备监控一个节点的内存,当使用率大于2%时候(测试),发邮件报警. k8s集群使用普罗官方文档 环境准备 下载二进制h ...

  7. prometheus学习系列九: Prometheus AlertManager使用

    在Prometheus的报警系统中,是分为2个部分的, 规则是配置是在prometheus中的, prometheus组件完成报警推送给alertmanager的, alertmanager然后管理这 ...

  8. Prometheus(五):Prometheus+Alertmanager 配置企业微信报警

    此处默认已安装Prometheus服务,服务地址:192.168.56.200  一.设置企业微信 1.1.企业微信注册(已有企业微信账号请跳过) 企业微信注册地址:https://work.weix ...

  9. Prometheus(四):Prometheus+Alertmanager 配置邮件报警

    此处默认已安装Prometheus服务,服务地址:192.168.56.200  一.安装Alertmanager 此处采用源码编译的方式安装.首先下载alertmanager的软件包,下载地址:ht ...

  10. Prometheus Alertmanager Grafana 监控警报

    Prometheus Alertmanager Grafana 监控警报 #node-exporter, Linux系统信息采集组件 #prometheus , 抓取.储存监控数据,供查询指标 #al ...

随机推荐

  1. K8S 部署es,搭建efk日志收集系统

    1.k8s部署es集群:https://www.jianshu.com/p/e490f7597539 2.k8s搭建efk日志收集系统:https://www.cnblogs.com/minseo/p ...

  2. npm报错最好的办法就是删掉依赖然后重装

    之前有个node工程,现在要新增antd主题,那得增加安装 craco 并修改 package.json 里的 scripts 属性 改吧改,安装一直报错: Cannot find module 'w ...

  3. vue 退出登录页面跳转 浏览器localStorage中的值没有改变

    vuex中的loginout方法actions:{ loginout(data:string){ return new Promise(((resolve, reject)=>{ setTime ...

  4. CodeGym自学笔记05——类名

    1.Java 程序由类组成.每个类都存储在一个单独的文件中,其文件名称与类名一致.该文件的扩展名为 java. 2.当我们有许多类文件时,我们会将它们分组到文件夹和子文件夹中.此外,类还会被分组到包和 ...

  5. doskey: windows版 Alias

    1.编辑doskey.bat文件 2.打开注册表寻找.HKEY_CURRENT_USER \ Software \ Microsoft \ Command Processor (自行百度) 3.添加d ...

  6. mybatis面试资料

    1.#{}和${}的区别 #{} 数据类型检查: 若检测到字符串类型,就加上引号: 若检测到数值类型,就不加引号. 安全检查: 若变量的值带有引号,会对引号进行转义处理,这样可以防止sql注入. ${ ...

  7. kafka在阿里云上的配置

    只需要改server.properties listeners=PLAINTEXT://  内网的ip地址和9092端口advertised.listeners=PLAINTEXT://外网的ip的地 ...

  8. VS2022在打开设计器的时候提示某变量未声明或者未赋值

    有可能是在属性中直接添加引用的dll文件,导致dll并不能被该文件稳定引用,可以删除引用,重新添加试试

  9. Ubuntu18.04LTS虚拟机优化

    1.没网 刚安装好没网,可以设置NAT连接,也可以直接设置为桥接模式联网.这里直接桥接. 网络中心使用的是以太网,所以就在菜单的"编辑"里的"虚拟网络编辑器"里 ...

  10. vscode中配置代码片段

    首先我们需要把要配置的代码复制一下,如: 然后我们进入https://snippet-generator.app/网站, 进入网站之后就把你复制的代码粘贴到左边的框里面,然后就是代码的类型和命名了 写 ...