Automationのエラーを検知する方法です。
Automationのジョブ自体が失敗した場合はポータルからひと目で分かりますが、ジョブは正常終了しているものの、内部的にエラーメッセージを吐いているケースがあります。
その場合は、ジョブを1つずつ選択して、確認していかなければならず、非常に手間の掛かる作業です。
Log Analyticsを活用して検知させてみます。
OMSワークスペース作成
Cloud Shell起動
Cloud Shell PowerShellを選択します。手順は公式ページ参照。
Cloud Shell クイックスタート
OMSワークスペースとAutomationアカウントの統合
- Cloud Shellで以下のコマンドを実行し、アラート検知したいAutomationアカウントのリソースIDを取得します
出力結果の、ResourceIdを保存しておきます
Find-AzureRmResource -ResourceType "Microsoft.Automation/automationAccounts"
- OMSワークスペースのリソースIDを取得します
出力結果の、ResourceIdを保存しておきます
Find-AzureRmResource -ResourceType "Microsoft.OperationalInsights/workspaces"
- OMSとAutomationを統合します
Set-AzureRmDiagnosticSetting -ResourceId $automationAccountId -WorkspaceId $workspaceId -Enabled $true
- 結果確認
Get-AzureRmDiagnosticSetting -ResourceId $automationAccountId
- 以下のようにEnabledがTrueになっていればOKです
Logs
Category : JobLogs
Enabled : True
RetentionPolicy
Enabled : False
Days : 0
Category : JobStreams
Enabled : True
RetentionPolicy
Enabled : False
Days : 0
Category : DscNodeStatus
Enabled : True
RetentionPolicy
Enabled : False
Days : 0
- Log Analyticsと統合されていないAutomationアカウントの場合は、以下のようにEnabledがFalse表示になります
Logs
Category : JobLogs
Enabled : False
RetentionPolicy
Enabled : False
Days : 0
Category : JobStreams
Enabled : False
RetentionPolicy
Enabled : False
Days : 0
Category : DscNodeStatus
Enabled : False
RetentionPolicy
Enabled : False
Days : 0
ログ確認
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.AUTOMATION"
アラート設定
Job失敗アラート
- 以下クエリを実行します
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.AUTOMATION" and Category == "JobLogs" and (ResultType == "Failed" or ResultType == "Suspended")
-
カスタムJSONペイロードの設定例
{
"attachments": [
{
"title":"OMS Alerts",
"fields": [
{
"title": "Alert Rule Name",
"value": "#alertrulename"},
{
"title": "Link To SearchResults",
"value": "<#linktosearchresults|OMS Search Results>"},
{
"title": "Search Interval",
"value": "#searchinterval"},
{
"title": "Threshold Operator",
"value": "#thresholdoperator"},
{
"title": "Threshold Value",
"value": "#thresholdvalue"}
],
"color": "danger"
}
],
"username": "Azure OMS Alert",
"icon_emoji": ":ghost:"
}
Job Streamsエラーアラート
- ログ検索画面で、以下のクエリを実行します
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.AUTOMATION" and Category == "JobStreams" and StreamType_s == "Error"
| summarize AggregatedValue = count() by JobId_g
- Job失敗アラートと同様にアラートを設定します
特定のRunbookのみをアラート対象にする場合
- 以下のクエリを実行し、アラート設定します
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.AUTOMATION" and Category == "JobStreams" and StreamType_s == "Error"
| where RunbookName_s == "[Runbook名]"
アラート通知結果
メール
Slack
Log Analyticsのアラート設定(時間枠とアラート頻度について)
時間枠:過去何分以内の結果を対象とするか
アラート頻度:アラートを確認する頻度
AutomationからLog Analyticsへの転送間隔については定義することができません。
(何度か試した結果、大体10分以内には転送されていましたが)
で、ここで時間枠とアラート頻度の設定に気を付けないといけないのですが、
例えば、時間枠10分、アラート頻度10分、の設定にしていて、Automationからのログ転送が15分掛かった場合、
10分前のログにしか遡ってくれないため、15分前のエラーログは検知してくれないのです。
なので、アラート頻度を10分より短くしたい場合、時間枠は15分以上に延ばしたほうがよいと思います。
ただ、これも10分以内に転送されると仮定した場合の話しです。
公式だとLog Analyticsへの転送は、SLAが6時間以内になっています。
時間枠とアラート頻度は要件に応じて検討する必要があります。
Log Analyticsは本来分析用途なので、リアルタイムでの監視が必要な場合は、Runbook内に自分で確認のロジックを書くしかなさそうです。