本篇文章的目的是什么?

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. Delphi-idHttp-Post JSON用法 good

    从国外网站抄来的代码 Delphi source: http := TIdHttp.Create(nil);http.HandleRedirects := True;//允许头转向http.ReadT ...

  2. 安卓读写INI文件 安卓读写INI文件

    安卓读写INI文件   安卓读写INI文件 uses System.IoUtils procedure TForm1.Button1Click(Sender: TObject);varIniFile: ...

  3. SQL SERVER锁(LOCK)知识及锁应用

    提示:这里所摘抄的关于锁的知识有的是不同sql server版本的,对应于特定版本时会有问题. 一 关于锁的基础知识 (一). 为什么要引入锁 当多个用户同时对数据库的并发操作时会带来以下数据不一致的 ...

  4. tfs查看最近签入记录及文件

    在团队资源管理=>源代码管理资源管理器=>选择某个最近签入的文件夹=>右键=>查看历史记录=>双击某个文件夹 就能看到最近变更集文件

  5. 彻底卸载Oracle database 12c教程

    1.WIN+R,然后输入regedit,回车:2.在注册表中,进入目录:\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services,删除所有以oracl ...

  6. 如何在C#中引入CPLEX的dll(CPLEX系列-教程一)

    以前写在CSDN上的文章.转到博客园之后,打算把这个教程移过来,顺便完善后面的教程.主要是在Asp.Net+EF6里面使用cplex,完成一个最优生产计划的决策.当时在查找如何在C#中引用cplex时 ...

  7. 【转】OAuth的改变

    原文地址:http://huoding.com/2011/11/08/126 去年我写过一篇<OAuth那些事儿>,对OAuth做了一些简单扼要的介绍,今天我打算写一些细节,以阐明OAut ...

  8. 13_python_内置函数

  9. " XSS易容术---bypass之编码混淆篇+辅助脚本编写"

    一.前言本文原创作者:vk,本文属i春秋原创奖励计划,未经许可禁止转载!很多人对于XSS的了解不深.一提起来就是:“哦,弹窗的”.”哦,偷cookie的.”骚年,你根本不知道什么是力量.虽然我也不知道 ...

  10. 人工智能-机器学习之Selenium(chrome驱动,火狐驱动)

    selenium是一个用于web应用程序测试的工具,Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE.Mozilla Firefox.Mozilla Suite等 ...