zoukankan      html  css  js  c++  java
  • Azure Load Balancer 监控告警

            近期有小伙伴反馈在使用 Basic Azure Load Balancer 时,后端池内主机会拒绝响应探针,从而影响业务连续性。我们一般自然而然的会想到通过增加监控告警来提升响应及修复速度,但目前 Basic Azure Load Balancer 不支持提供 Metric 监控指标,Standard Load Balancer 可以提供 Metric 指标。有了指标解决了监控数据源头的问题,但是 Azure China 的小伙班还需要注意,目前 Azure China 的 Monitor 服务不支持对 Standard Load Balancer 的 Metric 来关联 Alert 告警,所以 Azure 第一方的 monitor 服务在 Azure China 目前暂时无法满足需求。本文通过 Azure Monitor 服务提供的 API 接口,通过代码完成指标抓取及告警的工作。我们先来看一下架构图:

             本文主要介绍中间部分通过 API 获取 Metric 信息,然后执行事件响应操作(如发送告警邮件,短消息,或集成外部的 Webhook)。

    import adal
    import requests
    import time
    from datetime import datetime, timedelta
    
    authentication_endpoint = 'https://login.microsoftonline.com/'
    resource  = 'https://management.core.windows.net/'
    
    tenant_id = 'xxx'
    application_id ='xxx'
    application_secret = 'xxx'
    
    subscriptionid = 'xxx'
    resoucegroupname = 'xxx'
    loadbalancername = 'xxx'
    
    # get an Azure access token using the adal library
    context = adal.AuthenticationContext(authentication_endpoint + tenant_id)
    token_response = context.acquire_token_with_client_credentials(resource, application_id, application_secret)
    
    access_token = token_response.get('accessToken')
    # print(access_token)
    
    # input your monitor interval
    interval = 60
    
    while True:
        #datetime format 2018-06-05T03:00:00Z
        now = datetime.utcnow()
        lastfivemins = datetime.utcnow() - timedelta(minutes=5)
        current_date_time = now.strftime("%Y-%m-%dT%H:%M:%SZ")
        lastfivemins_data_time = lastfivemins.strftime("%Y-%m-%dT%H:%M:%SZ")
        
        #https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/providers/microsoft.insights/metrics?api-version=2018-01-01&metricnames=ByteCount&timespan=2018-06-05T03:00:00Z/2018-06-07T03:00:00Z
        endpoint = 'https://management.azure.com/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/loadBalancers/%s/providers/microsoft.insights/metrics?api-version=2018-01-01&metricnames=VipAvailability&timespan=%s/%s'%(subscriptionid,resoucegroupname,loadbalancername,lastfivemins_data_time,current_date_time)
    
        headers = {"Authorization": 'Bearer ' + access_token}
        json_output = requests.get(endpoint,headers=headers).json()
        mask_json_output = json_output["value"][0]["timeseries"][0]["data"]
        counter = 0
        sum = 0
        for sub in mask_json_output:
            sum = sum + sub["average"]
            counter = counter + 1
            print(sum/counter)
    
        average = sum/counter
    
        if average < 1:
            # input your alert code herer
            time.sleep(interval)
        else:
            time.sleep(interval)
            continue

            上述代码直接通过 Azure Monitor 提供的 Rest API 接口获取 Standard Load Balancer 提供的 VipAvailability 指标,该指标体现的是后端池的健康状态。当后端池全部主机处于活跃状态时,Metric 指标打点返回值为 100,当后端池中有无活跃节节点时返回值将等于0,该指标的打点频率为1mins。上述代码中我们通过每分钟抓取过去五分钟的指标并计算平均值,然后来判断是否触发告警。在访问 Azure monitor 的 Rest API 中有几个关键点,1. 确认 Endpoint URL,不同的指标 Endpoint URL 是不同的,Endpoint URL 可以参阅文档:https://docs.microsoft.com/en-us/rest/api/monitor/metrics/list;2. 返回值的 Schema,前面的文档里面有示例,最有效的办法是将返回值的 json 结果打印出来,来获得 schema 示例。3. 不同服务支持哪些 Metric 指标,可以访问如下链接:https://docs.microsoft.com/en-us/azure/azure-monitor/platform/metrics-supported

            有了上述逻辑,那这个代码跑在哪里呢? 跑在一台虚拟机上?那这台虚拟机挂了怎么办?从成本和可用性的角度,这里建议大家可以把上述代码逻辑在 LogicApp 服务或 Function 服务中实现,好处是通过 PaaS 服务实现高可用,另外这两种服务都可以通过按需调用次数来收费。具体这两个服务上的配置就不在这里赘述了,大家可以按照这个上述逻辑自己玩一下。

  • 相关阅读:
    清北学堂模拟赛d1t5 拍照(photo)
    清北学堂模拟赛d1t4 一道图论好题(graph)
    清北学堂模拟赛d1t3 听音乐(music)
    Android(java)学习笔记167:横竖屏切换时Activity的生命周期
    Android(java)学习笔记166:上下文的区分
    Android(java)学习笔记165:开发一个多界面的应用程序之不同界面间互相传递数据(短信助手案例的优化:请求码和结果码)
    Android(java)学习笔记164:开发一个多界面的应用程序之不同界面间互相传递数据(短信助手案例)
    Android(java)学习笔记163:开发一个多界面的应用程序之界面间数据传递
    Android(java)学习笔记162:开发一个多界面的应用程序之两种意图
    Java基础知识强化19:Java中switch分支语句
  • 原文地址:https://www.cnblogs.com/wekang/p/11958728.html
Copyright © 2011-2022 走看看