最近在完善海外业务在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监控怎么通过钉钉机器人报警的更多相关文章

  1. Zabbix钉钉小机器人报警

    1.下载钉钉所需要的脚本golang-zabbix-robot-64,浏览器访问https://www.appgao.com/files/192.html: 图一    脚本下载 2.将脚本路径添加到 ...

  2. shell+钉钉机器人完成java程序中断后自启动和实时监控

    java实时程序在运行过程中偶尔出现异常信息中断的情况,通过shell脚本即可完成自启动. 以下为监控一个实时的java程序的shell脚本. 通过每10秒检查一次java程序的进程,来判断程序是否处 ...

  3. 远见而明察近观若明火|Centos7.6环境基于Prometheus和Grafana结合钉钉机器人打造全时监控(预警)Docker容器服务系统

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_181 我们知道,奉行长期主义的网络公司,势必应在软件开发流程管理体系上具备规范意识,即代码提交有CR(CodeReview),功能 ...

  4. 钉钉机器人-实现监控通知功能-python

    1. 首先得创建有 一个 钉钉群.(因为只能发群通知) 2. 添加机器人,得到一个url: 3. 开始写Python脚本: # -*- coding: utf-8 -*- ""&q ...

  5. python 小脚本升级-- 钉钉群聊天机器人

    一则小脚本(工作中用) 在这篇文章中写的监控的脚本,发送监控的时候 是利用的邮箱,其实在实际,邮箱查收有着不方便性,于是乎升级, 我们工作中,经常用钉钉,那么如果要是能用到钉钉多好,这样我们的监控成功 ...

  6. 钉钉机器人zabbix报警

    首先在钉钉群聊里添加一个自定义的机器人 并复制webhook的内容 https://oapi.dingtalk.com/robot/send?access_token=37e23308d1b84eb4 ...

  7. Sentry快速开始并集成钉钉群机器人

    Sentry(直译为:哨兵)是一个开源错误跟踪服务,帮助开发人员实时监控和修复崩溃 Sentry本质上是一种帮助您实时监控和修复崩溃的服务 1.  安装客户端SDK 这里我们安装Java平台的SDK, ...

  8. elk报警监控之sentinl 钉钉+邮件告警

    注:我的elk sentinl版本都是6.5.1 前期知识 es的查询语法.es watcher使用方法. https://www.cnblogs.com/pilihaotian/p/5830754. ...

  9. 用python写一个预警机器人(支持微信和钉钉)

    背景 线上的系统在运行中,发生故障时怎么及时的通过手机通知到相关人员?当然这是个很简单的需求,现有的方法有很多,例如: 如果我们用的云产品,那么一般都会有配套对应的监控预警功能,根据需要配置一下即可, ...

随机推荐

  1. Activiti 工作流变量的修改方法

    修改方法: //此方法的更新会同时更新 ru_ 和 hi_的数据 @Override public Map<String, Object> updateProcessFormValue(S ...

  2. 【Unity】微信支付SDK官方安卓Demo的使用问题

    Unity3d使用微信支付是属于APP内发起支付调用的情况,其本质上是在安卓项目上使用微信SDK,安卓项目开发完成后再导入到Unity中作为Unity插件使用,即Unity中C#调用安卓(Java)代 ...

  3. HashMap中capacity、loadFactor、threshold、size等概念的解释<转>

    最近在看HashMap的源码,有很多概念都很模糊,今天写了一个测试例子,加深对这几个概念的理解,并演示了扩容及树化的过程(见下篇博文:). 注:本文基于JDK 1.8  HashMap的结构 约定 约 ...

  4. maven项目打包额外lib目录

    maven项目依赖了几个额外的jar包一直都无法打进最终jar,不知道哪里出了问题.一直对这块不甚清楚,就大概梳理一下 默认打包方式: maven项目下,默认编译目录为 src/main/java和s ...

  5. THINKPHP5近期暴露的漏洞

    这个THINKPHP5的漏洞涉及好几个版本,我测试中5.0.21和5.0.22都有,据说是5.0 ~ 5.0.23之间的版本都存在,这个漏洞可以执行写文件的操作. 当然了,赶紧升级框架到安全版本是比较 ...

  6. javascript: 类、方法、原型

    // 类.方法.原型 //================================================================================== /* 类 ...

  7. LeetCode - Subarray sum equals k

    Given an array of integers and an integer k, you need to find the total number of continuous subarra ...

  8. 动态性能视图v$mystat,v$sesstat,v$statname

    视图说明: v$mystat-------> 当前会话统计 v$sesstat------> 按会话进行分组统计 v$sysstat-------> 当系统的整体统计 v$statn ...

  9. 删除或修改本地Git保存的账号密码

    win10 系统下进入 控制面板 > 用户帐户 > 管理你的凭据 选择 [Windows 凭据] git 保存的用户信息在普通凭据列表里 >>编辑>>>完成

  10. [LeetCode] Group Anagrams 群组错位词

    Given an array of strings, group anagrams together. Example: Input: ["eat", "tea" ...