Azure Alert可以讓我們針對系統的效能指標設定警告,例如當CPU五分鐘內平均用量大於90時,發出一個警告;這時我們通常會希望系統自動將機器提升到更高等級。或是例如當Azure Service Bus Queue用量到達一定程度時,發出警告郵件給管理者等等。
這類自動針對警告做出相對動作的機制,在Azure上可以透過Azure Automation的WebHook來達成;以下我會以Azure SQL Database作為範例,展示當Azure SQL Database的Storage用量到達一定程度時,透過Automation Webhook自動調升SQL等級。
當然,上述功能也可以透過Azure SQL Database的Elastic Database Pool讓我們更彈性的使用保留的DTU,特別是當我們有多個資料庫時,Elastic Database Pool可以更有效的運用資源並節省成本。但當我們只有一個SQL Database時,透過Automation + Alert可能更為節省資源成本。
- 首先,我們先建立一個Azure Automation Account;在建立時,我們要順便建立一個Service Principle,這個Service Principle可以提供稍後我們所需要的Azure連線身分
- 建立完成之後,會產生兩個Connection Asset,分別對應到Classic與AAD模式的連線方式。稍後我們在Run book中會用它來連接到我們的Azure訂閱
- 接著,建立一個新的Run Book,其程式碼在此:https://github.com/michael-chi/AutomationRunbooks/blob/master/SqlServer-Scale-WebHook.ps1
- 其中,透過Connection Asset連線到Azure訂閱的方式如下
$servicePrincipalConnection=Get-AutomationConnection -Name "AzureRunAsConnection"
Add-AzureRmAccount `
-ServicePrincipal `
-TenantId $servicePrincipalConnection.TenantId `
-ApplicationId $servicePrincipalConnection.ApplicationId `
-CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint
- 接著,建立一個WebHook
- 將這串位址記錄下來並完成建立
- 接著,回到Azure SQL Database的設定頁面,建立一個Alert規則
- 設定完規則定義之後,將剛剛紀錄的WebHook位址貼上來;這樣每次規則被Trigger時,系統便會呼叫這個API並將Alert資料傳進去。
- 記得啟用規則;接著,當設定的條件達到時,就可以看到Automation Runbook被呼叫執行了
沒有留言:
張貼留言