【Azure】大量のメトリックアラートを一発で作る方法(リソーステンプレート編):Tech TIPS
Azureの仮想マシンなどには、CPU使用率やメモリ空き容量といった「メトリック(測定値)」をほぼリアルタイムで確認できる機能がある。このメトリックの値が上限/下限を超えたときに「メトリックアラート」として警告するように設定することで、不具合や障害に素早く気付き、速やかに対処しやすくなる。しかしGUIで作るには手間がかかりすぎることも。リソーステンプレートからのデプロイによって効率よく大量生成できる方法を紹介する。
対象:Azure Virtual Machine(仮想マシン)などのリソース、Bicep
AzureのメトリックアラートをいちいちPortalで作るのが面倒くさい!
Azure上のリソースには、それが消費しているCPUやメモリ、ディスク、ネットワークなどの状態を常時監視/測定する機能「メトリック」が備わっている。その測定値が指定のしきい値を超えたときに警告する機能を「メトリックアラート」と呼ぶ。
例えば、CPU使用率が90%を超えたり、利用可能なメモリ容量が10%を切ったり、といった条件が満たされたら、即座に警告をメールやSMSなどで通知するように設定できる(こうした一連の設定をまとめたものを「アラートルール」と呼ぶ)。適切に設定しておくと、予期せぬトラブルが生じたときに警告の通知を受け取ることで、速やかに対処しやすくなる。
メトリックアラートはAzure PortalからGUIで手軽に生成できるため、一度は作ったことがあるという人も多いのではないだろうか。
ただ、複数のメトリックアラートを作らなければならない場合、GUIだとかなりの手間が掛かる。また、複数のリソースに対して、似たようなメトリックアラートを複数生成するような場合、GUIで間違えることなく正確にパラメーターの指定を繰り返すのは非常に面倒で困難な作業だ。
そのような場合は、コマンドラインで一括生成した方がはるかに効率的だ。本Tech TIPSでは、Azureのリソーステンプレートを使って複数のメトリックアラートを1回のデプロイで生成する基本的な手順について説明する。リソーステンプレートの記述にはBicepを利用する。説明を単純化するため、アラートルールのしきい値は静的(Static)のみとし、アラートルールごとの条件は1種類だけに限定する。
メトリックアラート自体の詳細については都度説明しないので、Microsoft Learnの「Azure Monitor の警告とは」から始まるセクションを参照していただきたい。
■執筆時の各種ツール/APIのバージョン
- Azure CLI: Ver. 2.52.0
- Bicep CLI: Ver. 0.21.1
- Bicepでのデプロイ時のAPIバージョン: 2023-01-01(アクショングループ)、2018-03-01(メトリックアラート)
通知先を設定する「アクショングループ」を作成する
まずは「アクショングループ」を作成する。メトリックアラートの警告の具体的な通知先は、このアクショングループで設定する必要があるからだ。
アクショングループでは、通知先として電子メールやSMS、スマートフォン向けに提供されている「Microsoft Azure」アプリのプッシュ通知の他、Azureの各種リソースも指定できる。ここでは電子メールとSMS、Azureアプリのプッシュ通知を例に挙げる。
param location string = 'Global' // 特別な理由がない限り「Global」とする
param actionGroupName string // アクショングループの名前
param actionGroupShortName string // Azure Portalでは「表示名」。SMSのメッセージ冒頭に挿入される
// 電子メールで通知
param emailReceivers array = [
{
name: 'emailToMyCorpAddr' // このメール通知に付ける名称。他の名称との重複は不可
emailAddress: 'hiromichi@example.jp' // 通知先のメールアドレス
useCommonAlertSchema: false
}
]
// スマートフォン向けの「Microsoft Azure」アプリにプッシュ通知
param azureAppPushReceivers array = [
{
name: 'azureAppToMyCorpAccount' // このアプリ通知に付ける名称
emailAddress: 'hiromichi@example.jp' // アプリにひも付けているAzureアカウント名
}
]
// SMSで通知
param smsReceivers array = [
{
name: 'smsToMyPrivateNumber' // このSMS通知に付ける名前
countryCode: '81' // SMS宛先の国別コード。日本なら「81」
phoneNumber: '09000000000' // SMS宛先の携帯電話番号
}
]
// リソース生成: アクショングループ(警告などの通知設定)
resource actionGroup 'Microsoft.insights/actionGroups@2023-01-01' = {
name: actionGroupName
location: location
properties: {
groupShortName: actionGroupShortName
enabled: true
emailReceivers: emailReceivers
smsReceivers: smsReceivers
azureAppPushReceivers: azureAppPushReceivers
voiceReceivers: [] // 音声通話による通知。日本(国別コード「81」)は未対応
armRoleReceivers: [] // 「所有者」などのロール所属ユーザーにメールで通知
webhookReceivers: [] // WebHookに伝達
automationRunbookReceivers: [] // Azure AutomationのRunbookに伝達
azureFunctionReceivers: [] // Azure Functionsに伝達
eventHubReceivers: [] // Azure Event Hubsに伝達
logicAppReceivers: [] // Azure Logic Appsに伝達
itsmReceivers: [] // Log AnalyticsのITSM Connectorに伝達
}
}
※Microsoftのレファレンス: Microsoft.Insights actionGroups
このリストで幾つか注意すべき点を以下で説明しよう。触れていない詳細については、Microsoft Learnの「アクション グループ」を参照していただきたい。
●アクショングループを配置するリージョンは原則「Global」
まず、アクショングループを配置するリージョンは、特別な理由がない限り「Global」となるだろう。この場合、2つ以上のリージョンをまたいだ冗長構成が自動的に作成される。
特定リージョンへの配置も可能なものの、執筆時点では日本リージョンには配置できないようだ。またリージョン間の冗長はなく、ゾーン冗長に限られる。
●メトリックアラートに合わせて通知先をグルーピングする
リソース定義の「properties.<通知先>Receivers」キーの値は配列であり、複数の通知先を指定できる。例えば同時に通知したいメールアドレスが複数あるなら、「properties.emailReceivers」キーの値には、その分のメールアドレスを列挙する必要がある。
その一方で、メトリックアラートの通知先は、アクショングループ単位で指定する点に注意したい。例えば、緊急のアラートは運用グループ用メールアドレス宛てにメールで知らせる一方で、そうでない通知は個人のメールだけにする場合は、メールアドレスごとに別々のアクショングループを用意して、各アラートへ別々に割り当てられるようにする必要がある。
●SMSを利用するなら「actionGroupShortName」に注意
パラメーター「actionGroupShortName」は、Azure Portalだと「表示名」に該当する短縮名で、以下のようにSMSで届くメッセージの冒頭に挿入される
- アラート発生時: <actionGroupShortName>:Fired:……
- アラート解消時: <actionGroupShortName>:Resolved:……
そのため、長い名称にすると、スマートウォッチのようにディスプレイが小さい端末でSMSを受信したとき、後続の文字列が省略されてアラートの実体が確認できないことがあるので注意しよう。
●音声通話による通知は実質的に使えない!?
アクショングループは、音声通話で通知する機能も備えている(リソース定義の「properties.voiceReceivers」キー)。ただし、執筆時点で「countryCode」キーすなわち国別コードに日本の「81」は指定できなかった。つまり、一般的な日本の電話番号には発信できないようだ。
「メトリックアラート」を作成する
ここからメトリックアラート自体の生成について説明する。
●メトリックアラートのパラメーターを配列にまとめる
まずは、メトリックアラートの種類や監視の間隔、しきい値などのパラメーターのセットをオブジェクトにまとめつつ、複数のそれを配列にまとめていく(以下のリストの変数「metricAlertParams」)。
Copyright© Digital Advantage Corp. All Rights Reserved.