aws cloudwatch监控怎么通过钉钉机器人报警
最近在完善海外业务在aws服务的CloudWatchh监控,发现CloudWatch报警通知要通过aws的sns服务,直接支持的通道有短信和邮件,但是我们想推到钉钉群里面的群机器人里面这个就要借助aws的Lambda函数服务

然后选择用sns来触发

python脚本内容变量event是sns传过来的消息内容,有点坑的是CloudWatch的报警信息很乱还要稍微优化一下
# -*- coding: utf-8 -*-
import json
import os
import re
from botocore.vendored import requests def size_b_to_other(size):
"""用于转换容量单位"""
units = ['B', 'KB', 'MB', 'GB', 'TB']
# 处理异常
if size <= 0:
return False # 遍历单位的位置并用取整除赋值
for unit in units:
if size >= 1024:
size //= 1024
else:
size_h = '{} {}'.format(size, unit)
return size_h size_h = '{} {}'.format(size, unit)
return size_h def lambda_handler(event, context):
token = os.getenv('token')
url = "https://oapi.dingtalk.com/robot/send?access_token="
headers = {'Content-Type': 'application/json'}
# 解析要使用的字段
Sns = event['Records'][0]['Sns']
Subject = Sns['Subject']
if "ALARM" in Subject:
title = "======报警信息======"
elif "OK" in Subject:
title = "======恢复======"
Timestamp = Sns['Timestamp']
Message = Sns['Message']
Message = json.loads(Message)
try:
NewStateReason = Message['NewStateReason']
AlarmDescription = Message['AlarmDescription']
# 转换cloudwatch单位为友好单位
datapoint = re.findall(r'[[](.*?)[]]', NewStateReason)
threshold = re.findall(r'[(](.*?)[)]', NewStateReason)
count = (datapoint[0].count(","))
if count == 0:
datapoint = float(str.split(datapoint[0])[0])
threshold = float(str.split(threshold[1])[0])
if threshold > 1000:
datapoint = size_b_to_other(datapoint)
threshold = size_b_to_other(threshold)
else:
i = threshold[len(threshold) - 1]
pattern = re.compile(r'^[0-9]+\.[0-9]')
if pattern.search(i):
threshold = threshold[len(threshold) - 1]
else:
threshold = threshold[len(threshold) - 2] + threshold[len(threshold) - 1] # 定义消息内容
content = title + "\n报警主题:" + "【" + Subject + "】" \
"\n报警时间:" + "【" + Timestamp + "】" \
"\n报警原因:" + "【" + NewStateReason + "】" \
"\n友好信息:" + "【" + "当前值=" + str(datapoint) + " 连续" + str(count + 1) + "次达到 " + "阀值=" + str(threshold) + "】" \
"\n备注信息:" + "【" + str(AlarmDescription) + "】" except:
Message = json.dumps(Message, sort_keys=True, indent=2)
content = title + "\n报警主题:" + "【" + Subject + "】" \
"\n详细信息:" + "【" + Message + "】" \
"\n备注信息:【消息解析异常】" data = {
"msgtype": "text",
"text": {
"content": content
}
} data = json.dumps(data)
request = requests.post(url + token, data, headers=headers)
return request.text
测试一下

aws cloudwatch监控怎么通过钉钉机器人报警的更多相关文章
- Zabbix钉钉小机器人报警
1.下载钉钉所需要的脚本golang-zabbix-robot-64,浏览器访问https://www.appgao.com/files/192.html: 图一 脚本下载 2.将脚本路径添加到 ...
- shell+钉钉机器人完成java程序中断后自启动和实时监控
java实时程序在运行过程中偶尔出现异常信息中断的情况,通过shell脚本即可完成自启动. 以下为监控一个实时的java程序的shell脚本. 通过每10秒检查一次java程序的进程,来判断程序是否处 ...
- 远见而明察近观若明火|Centos7.6环境基于Prometheus和Grafana结合钉钉机器人打造全时监控(预警)Docker容器服务系统
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_181 我们知道,奉行长期主义的网络公司,势必应在软件开发流程管理体系上具备规范意识,即代码提交有CR(CodeReview),功能 ...
- 钉钉机器人-实现监控通知功能-python
1. 首先得创建有 一个 钉钉群.(因为只能发群通知) 2. 添加机器人,得到一个url: 3. 开始写Python脚本: # -*- coding: utf-8 -*- ""&q ...
- python 小脚本升级-- 钉钉群聊天机器人
一则小脚本(工作中用) 在这篇文章中写的监控的脚本,发送监控的时候 是利用的邮箱,其实在实际,邮箱查收有着不方便性,于是乎升级, 我们工作中,经常用钉钉,那么如果要是能用到钉钉多好,这样我们的监控成功 ...
- 钉钉机器人zabbix报警
首先在钉钉群聊里添加一个自定义的机器人 并复制webhook的内容 https://oapi.dingtalk.com/robot/send?access_token=37e23308d1b84eb4 ...
- Sentry快速开始并集成钉钉群机器人
Sentry(直译为:哨兵)是一个开源错误跟踪服务,帮助开发人员实时监控和修复崩溃 Sentry本质上是一种帮助您实时监控和修复崩溃的服务 1. 安装客户端SDK 这里我们安装Java平台的SDK, ...
- elk报警监控之sentinl 钉钉+邮件告警
注:我的elk sentinl版本都是6.5.1 前期知识 es的查询语法.es watcher使用方法. https://www.cnblogs.com/pilihaotian/p/5830754. ...
- 用python写一个预警机器人(支持微信和钉钉)
背景 线上的系统在运行中,发生故障时怎么及时的通过手机通知到相关人员?当然这是个很简单的需求,现有的方法有很多,例如: 如果我们用的云产品,那么一般都会有配套对应的监控预警功能,根据需要配置一下即可, ...
随机推荐
- js cookie跨域设置
/** * 设置cookie方法 * @param {string} c_name cookie键值 * @param {string} value cookie值 * @param {Boolean ...
- python 信息同时输出到控制台与文件
python编程中,往往需要将结果用print等输出,如果希望输出既可以显示到IDE的屏幕上,也能存到文件中(如txt)中,该怎么办呢? 方法1 可通过日志logging模块输出信息到文件或屏幕.但可 ...
- 基于jQuery 3D旋转明星人物展示特效
分享一款基于jQuery 3D旋转明星人物展示特效.这是一款来自百度换肤活动的明星旋转展示效果.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div class=&quo ...
- ffmpeg转码器移植VC的project:ffmpeg for MFC
本文介绍一个自己做的FFMPEG移植到VC下的开源project:ffmpeg for MFC.本project将ffmpegproject中的ffmpeg转码器(ffmpeg.c)移植到了VC环境下 ...
- .net Core 生产环境报错 MIME
because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled. 主要没 ...
- GLSL版本的区别和对比
之前尝试将一个GLSL version 110的版本写成GLSL version 330的,在此将学习过程和收获记录下来. 参考链接 GLSL Versions 介绍 你可以使用#version命令作 ...
- mac下安装mysql5.7.18,连接出现Access denied for user 'root'@'localhost' (using password: YES)
mac下,mysql5.7.18连接出错,错误信息为:Access denied for user 'root'@'localhost' (using password: YES) ()里面的为she ...
- AES和RSA加解密的Python用法
AES AES 是一种对称加密算法,用key对一段text加密,则用同一个key对密文解密, from Crypto import Random from Crypto.Hash import SHA ...
- MySQL 千万 级数据量根据(索引)优化 查询 速度
一.索引的作用 索引通俗来讲就相当于书的目录,当我们根据条件查询的时候,没有索引,便需要全表扫描,数据量少还可以,一旦数据量超过百万甚至千万,一条查询sql执行往往需要几十秒甚至更多,5秒以上就已经让 ...
- ubuntu开机后弹出System program problem detected的解决办法
sudo gedit /etc/default/apport 将enabled=1改为enabled=0保存退出重启后就可以了