本篇文章的目的是什么?

Azure云端一直困扰着我的是,如果遇到数据库累积数据量过大、数据库DTU过大、应用程序服务访问量过大等,我们都没办法知道他们什么时候过大。只能做的是,我们天天看着我们的应用,看监控图表、看应用访问速度。

直到在新版Portal中出现了警报规则… 我们可以用emal、webhook的方式来接收警报。email就不用说了,直接配置即可,我们这里主要说webhook…

Webhook是什么、怎么理解Webhook

请看另外一篇文章:Webhook是什么、怎么理解

Azure警报规则可用于那些地方

所有的Azure上面的警报,包括数据库、应用程序服务等

使用前提

有登录Azure的资格、能在Azure上创建警报规则

创建&配置警报规则

以xxx数据库为例,我们创建一个当数据库大小大于1G的时警报规则,如下:

具体路径是 选中了数据库—>警报规则—>添加警报规则

配置webhook

在webhook上配置我们的url,以 http://xxx/webhook/receivedPhone 为例,我们在最下面的Webhook下添加地址:

配置完毕了,我们开始最重要的代码编写。

代码编写

在查看这里的代码编写之前,你可以看看微软的官方说明 https://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/insights-webhooks-alerts

可以看到,我们接收到的Json数据格式为:

{
"status": "Activated",
"context": {
"timestamp": "2015-08-14T22:26:41.9975398Z",
"id": "/subscriptions/s1/resourceGroups/useast/providers/microsoft.insights/alertrules/ruleName1",
"name": "ruleName1",
"description": "some description",
"conditionType": "Metric",
"condition": {
"metricName": "Requests",
"metricUnit": "Count",
"metricValue": "10",
"threshold": "10",
"windowSize": "15",
"timeAggregation": "Average",
"operator": "GreaterThanOrEqual"
},
"subscriptionId": "s1",
"resourceGroupName": "useast",
"resourceName": "mysite1",
"resourceType": "microsoft.foo/sites",
"resourceId": "/subscriptions/s1/resourceGroups/useast/providers/microsoft.foo/sites/mysite1",
"resourceRegion": "centralus",
"portalLink": "https://portal.azure.com/#resource/subscriptions/s1/resourceGroups/useast/providers/microsoft.foo/sites/mysite1"
},
"properties": {
"key1": "value1",
"key2": "value2"
}
}

解析可以看看官网上的说明。

我们开始看看怎么代码编写吧。

这里的代码以C#为例,并且是Web Api类型的项目,我们在Webhook Contrller里添加了方法ReceivedPhone,用来接收Azure发过来的警报。因为上面已经配置了路径 ‘/webhook/receivedPhone‘

我们用WebApi来接收webhook信息,要用到System.Net.Http.HttpRequestMessage来接收信息,因为webhook是http请求。

具体代码如下:

        [HttpPost]
[Route("receivedPhone")]
public async Task ReceivedPhone(HttpRequestMessage req)
{
try
{
dynamic data = await req.Content.ReadAsAsync<object>();
string name = data?.context?.name;//webhook的名字
string resourceName = data?.context?.resourceName;//资源名字
string resourceType = data?.context?.resourceType;//资源type
string metricName = data?.context?.condition?.metricName;//度量名字
string metricValue = data?.context?.condition?.metricValue;//度量值
string metricUnit = data?.context?.condition?.metricUnit;//度量单位 //下面做处理
}
catch (Exception e)
{ }
}

从代码可以看出,我们用到C#4中的动态语言来解析数据,来获取webhook发送过来的信息,从而避免错误。

我主要获取name、resourceName等信息,这些都是重要的信息。如果想获取其他额外的信息,请按照Json数据来添加。

其他说明

为了安全起见,我们一般都配置一个token,避免人家乱用。

例如配置的webhook地址为:http://xxx/webhook/receivedPhone?token=xxx

然后在ReceivedPhone方法中,添加token判断就可以了.

public async Task ReceivedPhone(HttpRequestMessage req, string token)

在这里,作者想要webhook收到信息之后发送短信来及时通知相关人员,所以我们webhook获取到相关信息后,直接发短信给相关用户。

可以关注本人的公众号,多年经验的原创文章共享给大家。

C# Azure 用Webhook添加警报规则的更多相关文章

  1. 为Azure Web Site 添加ADFS验证支持之一 设置ADFS的信任关系

    很多时候企业开发的应用都会通过AD(Active Directory)进行验证用户名密码的,在企业里面统一一个AD来进行账号密码管理也是一个很好的实践.当企业打算将一个应用迁移到Azure的时候,使用 ...

  2. [Asp.net MVC]Asp.net MVC5系列——在模型中添加验证规则

    目录 概述 在模型中添加验证规则 自定义验证规则 伙伴类的使用 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5 ...

  3. C# MVC ( 添加路由规则以及路由的反射机制 )

    在项目文件夹下找到 App_Start 下 找到 RouteConfig.cs文件 打开   (1) 约束的规则 从上往下 贪婪性   (2) 用 routes.MapRoute(...) 添加   ...

  4. 通过编程为Outlook 2007添加邮件规则

    Outlook 所支持的邮件规则相当有用,我们经常需要针对某些特征的邮件做特殊的处理.例如将其移动到某个特定文件夹,或者删除它等等. Outlook所支持的邮件规则主要两大类:收到邮件时和发送邮件时 ...

  5. CMD命令行netsh添加防火墙规则

    1.为e:\f.exe 添加防火墙规则(参考:https://www.cnblogs.com/zhen656/p/4275270.html),需要管理员权限. >netsh advfirewal ...

  6. yii 前端js动态添加验证规则

    在使用 activeForm 生成表单及验证时,默认是按照 model 里的 rules 生成js验证,model 验证在加载完页面后生效,不可修改,如果需要扩展.动态验证,需要使用js来配合 直接上 ...

  7. 为Azure Web Site 添加ADFS验证支持之二 在代码里使用ADFS

    下面我们来创建一个MVC 5.0的ASP.Net程序,并且将它部署到Azure Web Site上 通过Visual Studio 2015创建Web Project 在选择ASP.net模板的地方, ...

  8. CentOS 7下iptables配置添加修改规则端口方法(转)

    简介: Linux CentOS 7默认没有安装iptables,默认的防火墙是firewalld,云吞铺子分享CentOS 7系统下iptables安装.iptables规则配置(放行或者禁用端口) ...

  9. Azure Cost alerts 花费警报

    一,引言 2020已完结,迎来了2021年新的开始.Allen 在新的一年中继续分享自己所学习到的 Azure 技术.本篇文章的内容也不多,也是一个网友遇到的一个问题----- Azure 上有没有花 ...

随机推荐

  1. uniGUI 通过SessionList操作另外的登录用户

    参照bbs,写了这个方法,检查是否有同名用户已经登录:procedure TUniMainModule.CheckSameUser(aUserLoginCode: string);var  ASess ...

  2. Alwasyon环境下增加数据文件需要注意的几点

    半夜收到报警短信,服务器磁盘空间不足,爬起来检查一番,发现由于索引重建导致,而且该磁盘下仍有自动增长的数据文件,由于该服务器上其他盘符有剩余空间,于是打算将该磁盘下的数据文件限制增长,并新增几个数据文 ...

  3. [翻译]第三天- 在 Mac 上运行 .NET Core 应用程序

    原文: http://michaelcrump.net/part3-aspnetcore/ *** 简介 该系列文章的完整列表如下: 第一天 - 在 Windows 下安装和运行 .NET Core ...

  4. ASP.NET MVC 主要的四种过滤器和三种具体实现类

    4种常用过滤器(IAuthrorizationFilter.IActionFilter.IResultFilter.IExceptionFilter) 和 3种具体实现类(AuthorizeAttri ...

  5. 【BZOJ5188】 [Usaco2018 Jan]MooTube

    BZOJ5188 [Usaco2018 Jan]MooTube 突然发现BZOJ没有题目,放题面. 题意翻译 题面描述 在业余时间,Farmer John创建了一个新的视频共享服务,他将其命名为Moo ...

  6. API网关【gateway 】- 1

    最近在公司进行API网关重写,公司内采用serverMesh进行服务注册,调用,这里结合之前学习对API网关服务进行简单的总结与分析. 网关的单节点场景: 网关的多节点场景: 这里的多节点是根据模块进 ...

  7. 3DMax——基础

    1.首次打开3DMAX设置单位: 自定义→单位设置→①系统单位设置→1单位=1.0毫米:②公制→毫米 注:室内单位为毫米,室外单位为米 2.从CAD导出可以导入到3DMAX的文件: 选中要导出的部分→ ...

  8. 课程二(Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization),第三周(Hyperparameter tuning, Batch Normalization and Programming Frameworks) —— 2.Programming assignments

    Tensorflow Welcome to the Tensorflow Tutorial! In this notebook you will learn all the basics of Ten ...

  9. java和js获取当前天之后或之前7天(任意)日期

    一.获取过去第几天的日期(- 操作) 或者 未来 第几天的日期( + 操作) /** * 获取过去第几天的日期(- 操作) 或者 未来 第几天的日期( + 操作) * * @param past * ...

  10. NSLog()输出函数集格式字符

    nslog()强大的功能这里就不多说了,笔者从c#转过来,难免会有些陌生.在c#中用format("{0}",xx}来进行占位,下面就来讲讲在oc中的格式字符; d:带符号的十进制 ...