技术标签: k8s Kubernetes docker
用于接收AlertManager
服务通知并通过钉钉机器人报警
https://github.com/yangpeng14/alertmanager-dingtalk-hook
import os
import json
import requests
import arrow
from flask import Flask
from flask import request
app = Flask(__name__)
@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!'
def bytes2json(data_bytes):
data = data_bytes.decode('utf8').replace("'", '"')
return json.loads(data)
def send_alert(data):
token = os.getenv('ROBOT_TOKEN')
if not token:
print('you must set ROBOT_TOKEN env')
return
url = 'https://oapi.dingtalk.com/robot/send?access_token=%s' % token
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'
send_data = {
"msgtype": "markdown",
"markdown": {
"title": "prometheus_alert",
"text": "## 告警程序: prometheus_alert \n" +
"**告警级别**: %s \n\n" % output['labels']['severity'] +
"**告警类型**: %s \n\n" % output['labels']['alertname'] +
"**故障pod**: %s \n\n" % pod_name +
"**故障namespace**: %s \n\n" % namespace +
"**告警详情**: %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')
}
}
req = requests.post(url, json=send_data)
result = req.json()
if result['errcode'] != 0:
print('notify dingtalk error: %s' % result['errcode'])
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
$ docker run -p 5000:5000 --name -e ROBOT_TOKEN=<钉钉机器人TOKEN> dingtalk-hook -d yangpeng2468/alertmanager-dingtalk-hook:v1
kube-ops namespace
,建议将钉钉机器人TOKEN
创建成Secret
资源对象$ kubectl create namespace kube-ops
$ kubectl create secret generic dingtalk-secret --from-literal=token=<钉钉群聊的机器人TOKEN> -n kube-ops
secret "dingtalk-secret" created
Deployment
和 Service
资源对象:dingtalk-hook.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: dingtalk-hook
namespace: kube-ops
spec:
template:
metadata:
labels:
app: dingtalk-hook
spec:
containers:
- name: dingtalk-hook
image: yangpeng2468/alertmanager-dingtalk-hook:v1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 5000
name: http
env:
- name: ROBOT_TOKEN
valueFrom:
secretKeyRef:
name: dingtalk-secret
key: token
resources:
requests:
cpu: 50m
memory: 100Mi
limits:
cpu: 50m
memory: 100Mi
---
apiVersion: v1
kind: Service
metadata:
name: dingtalk-hook
namespace: kube-ops
spec:
selector:
app: dingtalk-hook
ports:
- name: hook
port: 5000
targetPort: http
$ kubectl create -f dingtalk-hook.yaml
deployment.extensions "dingtalk-hook" created
service "dingtalk-hook" created
$ kubectl get pods -n kube-ops
NAME READY STATUS RESTARTS AGE
dingtalk-hook-c4fcd8cd6-6r2b6 1/1 Running 0 45m
......
AlertManager
中 webhook
地址直接通过 DNS
形式访问即可receivers:
- name: 'webhook'
webhook_configs:
- url: 'http://dingtalk-hook.kube-ops.svc.cluster.local:5000'
send_resolved: true
钉钉自定义机器人文档
https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
AlertManager的使用
https://www.qikqiak.com/k8s-book/docs/57.AlertManager%E7%9A%84%E4%BD%BF%E7%94%A8.html
欢迎大家关注交流,定期分享自动化运维、DevOps、Kubernetes、Service Mesh和Cloud Native
作者 |马超责编 | 王晓曼封图 |CSDN付费下载自东方IC出品 | CSDN(ID:CSDNnews)近日,新一代国际视频编解码标准(H.266/VVC)正式出炉,其中VVC是J...
一、名词解释维基百科:通用唯一识别码(英语:Universally Unique Identifier,缩写:UUID)是用于计算机体系中以识别信息数目的一个128位标识符,还有相关的术语:全局唯一标识符(GUID)。根据标准方法生成,不依赖中央机构的注册和分配,UUID具有唯一性,这与其他大多数编号方案不同。重复UUID码概率接近零,可以忽略不计。UUID的标准型式包含32个16进制数字,以连字号分为五段,形式为 8-4-4-4-12 的32个字符。示例:550e8400-e29b-41d4-a7
我们选择NAT方式,来实现Ubuntu的静态IP地址配置。打开VMware,在顶部依次选择:编辑 > 虚拟网路编辑器,打开虚拟网路编辑器:去掉VMnet0和VMnet1,只保留VMnet8。然后,去掉如下图中的“使用本地DHCP服务奖IP地址分配给虚拟机”:此外,这里的子网IP为:192.168.8.0,子网掩码为:255.255.255.0,因此,在Ubuntu中,...
前面主要对ODL的基础进行梳理和总结,其实基础只是学习的很小的一部分,更多的时候还要阅读源码,在官网上面查找资料,当然基础打牢是必须的,比如说在不同版本的odl对事务提交的返回的future也略有不同,但是提交所做的处理在原理上面是相通,只是语法上的区别。总之,ODL学习之路漫漫,要有耐心和恒心,总会遇到各种各样的报错,积极思考耐心解决问题才是王道,这一讲主要针对ODL的feature进行...
Opensource Licenses 协议列表https://www.gnu.org/licenses/license-list.htmlhttps://opensource.org/licenses/alphabetical协议选择参考[表格]https://choosealicense.com/appendix/常见的开源协议介绍,如下图http://...
(本内容转载自公众号“科技与Python”)简历是书面推销员“求职”的本质其实就是人的流通,和一般的商业行为无异:一方求售、一方求货。再说得明白些,企业是买主,挑精捡肥寻觅好货色;人才是商品,充实了内涵、做好包装,待价而沽;简历则无异于推销员,将人才引见...
ARCGIS破解教程(arcgis10.2(含ARCGIS下载地址)发布时间:2018-01-17 版权: 准备工具:arcgis软件(arcgis下载地址:http://pan.baidu.com/s/1i5uMzU9) 下载完成后解压,会看到三个文件夹,如下图: 第一步:安装licensemanager 打开licensemanager文件,点击s...
ListView 实现多列列表 import React, {Component} from 'react';import { StyleSheet, ListView, SectionList, View, Text, TouchableOpacity, Image, Alert,} from 'react-native';var {width, height}
In member function 'void StudentB::showB()':|error: 'int StudentA::num' is private|error: within this context|error: 'std::string StudentA::name' is private|error: within this context|error:
我想通过编码为一些图像制作分割掩模。有一个工具可以生成近似边界点坐标的xml文件。这些坐标可以通过获取标记值来获得。图像大小为800x600像素。在例如,从该工具中提取以下点。如何填充轮廓内用虚线标记的区域,例如白色?谢谢。在分数=[(737255),(736,265),(735,270),(739,273),(746,264),(755268),(765272),(767276),(769278...
使用SurfaceView中的Surface对象进行绘图,其本质就是利用SurfaceHolder的lockCanvas获取到Canvas对象进行绘制的,对于绘制动画来说,必须使用双缓冲,或者采用双线程,一个线程负责专门的预处理,比如图片数据读取,另外一个线程负责进行专绘制图形。因为SurfaceView每次绘图都会锁定Canvas,也就是说同一片区域这次没画完下次就不能画,因此要提高动画播放的效