博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# Azure 用Webhook添加警报规则
阅读量:6865 次
发布时间:2019-06-26

本文共 3300 字,大约阅读时间需要 11 分钟。

 

本篇文章的目的是什么?

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

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

 

Webhook是什么、怎么理解Webhook

请看另外一篇文章:

 

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

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

 

使用前提

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

 

创建&配置警报规则

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

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

 

配置webhook

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

 

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

 

代码编写

在查看这里的代码编写之前,你可以看看微软的官方说明

可以看到,我们接收到的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();                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地址为:

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

public async Task ReceivedPhone(HttpRequestMessage req, string token)

 

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

 

 

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

posted on
2017-07-18 17:29 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/alunchen/p/7201683.html

你可能感兴趣的文章
清理恶意插件提高上网速度
查看>>
FTP的主动模式和被动模式,你应该用那种?
查看>>
035-pgrep命令
查看>>
java synchronized详解
查看>>
搜索引擎(ELK)
查看>>
Java 定时任务调度工具 Quartz(Part 2)
查看>>
k8s集群部署一(最新版docker安装)
查看>>
Jerry的碎碎念:SAPUI5, Angular, React和Vue
查看>>
《梦醒黄金城》主创暨明星见面会举办 预计2019年完成拍摄
查看>>
HanLP-最短路径分词
查看>>
C#程序如何对接比特币钱包节点?
查看>>
热爱工作,拥抱明天——读《干法》有感2800字
查看>>
wp7 关于真机调试,部署注意事项
查看>>
vim ^M
查看>>
php对接收值的标准过滤处理
查看>>
多层科目任意组合汇总报表的性能优化 (上)
查看>>
类型转换函数(三十五)
查看>>
变量的高级主题(六)
查看>>
2017 必备的八款最佳反勒索软件工具
查看>>
类和对象
查看>>