【Azure Redis 快取】使用Python程式碼獲取Azure Redis的監控指標值 (含Powershell指令碼方式)

路邊兩盞燈發表於2021-02-08

問題描述

通過Metrics監控頁面,我們能得知當前資源(如Redis)的執行情況與各種指標。如果我們需要把指標下載到本地或者生成JSON資料匯入到第三方的監控平臺呢?Azure是否可以通過Python程式碼或者時Powershell指令碼匯出各種指標資料呢?

【Azure Redis 快取】使用Python程式碼獲取Azure Redis的監控指標值 (含Powershell指令碼方式)

解決辦法

可以!       PowerShell命令可以使用Get-AzMetric 或者是 az monitor metrics list命令來獲取資源的Metrics值。

而使用Python程式碼,可以使用Metrics的REST API來實現

 

注:使用Powershell必須先登入到Azure。使用命令 Connect-AzAccount -Environment AzureChinaCloud 或 az cloud set --name AzureChinaCloud  和 az login。

       使用Python程式碼則需要先獲取到訪問Redis Metrics的Token。獲取Token可以在Azure AD中註冊一個應用,然後給該應用在Redis的訪問控制中賦予reader的許可權即可讀取Metris資料。

 

執行步驟

Python

步驟一:註冊AAD應用,複製應用ID,客戶端訪問密碼

  •  登入Azure平臺,進入AAD頁面,點選App registrations: https://portal.azure.cn/?l=en.en-us#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredApps
  • 點選“New Registration” 按鈕,輸入應用名稱,其他值保留預設,點選儲存
  • 建立成功後,進入應用頁面,匯入到“Certificates & secrets”頁面,建立需要使用的Client Secret並複製出來,第三步需要使用
  • 在應用頁面複製出Tenant ID, Applicaiton ID需要在第三步程式碼中使用

具體操作過程見如下動圖:

【Azure Redis 快取】使用Python程式碼獲取Azure Redis的監控指標值 (含Powershell指令碼方式)

 

步驟二:賦予獲取Metrics的許可權

在Redis的Access control (IAM)頁面中,通過步驟一的應用名搜尋並賦予Monitoring Reader許可權

 【Azure Redis 快取】使用Python程式碼獲取Azure Redis的監控指標值 (含Powershell指令碼方式)

注:如沒有賦予許可權,則程式碼中會報出類似錯誤:

Status Code: <Response [403]>
Response Content: b'{"error":{"code":"AuthorizationFailed","message":"The client \'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\' with object id \'xxxxxxxx-xxxx-xxxx-xxxx-36166b5f7276\' does not have authorization to perform action \'microsoft.insights/metrics/read\' over scope \'/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/xxxx-rg/providers/Microsoft.Cache/Redis/xxxx/providers/microsoft.insights\' or the scope is invalid. If access was recently granted, please refresh your credentials."}}'

 

步驟三:編寫Python程式碼,使用requests來傳送psot,get請求

  • 程式碼中主要有兩部分內容:一是獲取Access Token,二是獲取Metrics Data
  • 高亮中的內容都是需要替換成相應的資源資訊和第一步中準備的資訊
  • 在獲取Access Token的Body內容中,grant_type是固定值,為client_credentials。resource的值為中國區azure的管理終結點:https://management.chinacloudapi.cn
import requests
import json

##Part 1: Get Access Token

aadurl="https://login.chinacloudapi.cn/<your aad tenant id>/oauth2/token"

aadbody={
    'grant_type':'client_credentials',
    'client_id':'your aad client id',
    'client_secret':'your aad client secret',
    'resource':'https://management.chinacloudapi.cn'
}
rtoken= requests.post(aadurl, data=aadbody)
##print(rtoken)
objtoken = json.loads(rtoken.text)
##print(obj['access_token'])


##Part 2: Get the Metrics Value by Token
headers = {'content-type': "application/json",
           'Authorization': 'Bearer '+objtoken['access_token']
        }

url= "https://management.chinacloudapi.cn/subscriptions/<subscriptions>/resourceGroups/<resourceGroups>/providers/Microsoft.Cache/Redis/<your redis name>/providers/microsoft.insights/metrics?api-version=2018-01-01&metricnames=expiredkeys,usedmemory"
r = requests.get(url, headers=headers)
print('Status Code: ' + str(r))
print('Response Content: ' + str(r.content))

執行效果如:

【Azure Redis 快取】使用Python程式碼獲取Azure Redis的監控指標值 (含Powershell指令碼方式)

 

Powershell

  • 登入azure
  • 準備az monitor metrics list命令
az cloud set --name AzureChinaCloud

az login

az monitor metrics list --resource /subscriptions/<your subscriptions>/resourceGroups/<resourceGroups>/providers/Microsoft.Cache/Redis/<your redis name> --metric usedmemory --aggregation Maximum --interval PT1M

執行效果如下:

【Azure Redis 快取】使用Python程式碼獲取Azure Redis的監控指標值 (含Powershell指令碼方式) 【Azure Redis 快取】使用Python程式碼獲取Azure Redis的監控指標值 (含Powershell指令碼方式)

 

參考資料

將應用程式註冊到 Microsoft 標識平臺:https://docs.azure.cn/zh-cn/active-directory/develop/quickstart-register-app

REST API Metrics - List: https://docs.microsoft.com/en-us/rest/api/monitor/metrics/list

Get-AzMetric: https://docs.microsoft.com/en-us/powershell/module/az.monitor/get-azmetric?view=azps-5.4.0&viewFallbackFrom=azps-5.2.0

az monitor metrics list: https://docs.microsoft.com/en-us/cli/azure/monitor/metrics?view=azure-cli-latest#az_monitor_metrics_list

 

相關文章