zoukankan      html  css  js  c++  java
  • C# Azure 用Webhook添加警报规则

    本篇文章的目的是什么?

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

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

    Webhook是什么、怎么理解Webhook

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

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

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

    使用前提

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

    创建&配置警报规则

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

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

    image

    配置webhook

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

    image

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

    代码编写

    在查看这里的代码编写之前,你可以看看微软的官方说明 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获取到相关信息后,直接发短信给相关用户。

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

  • 相关阅读:
    HttpEntity转换Inputstream(红色)加XmlPull解析
    ImageLoader加载图片
    HttpClient——Get,Post
    Android例子源码非第三方实现根据字母排序的城市列表
    Android 仿QQ消息界面
    css折叠表格
    前端页面文字长度显示控制
    (首页上一页下一页尾页 + 下拉框跳转)分页功能
    基于bootstrap的分页插件
    HTML 禁止复制文字
  • 原文地址:https://www.cnblogs.com/alunchen/p/7201683.html
Copyright © 2011-2022 走看看