はじめに
AzureのApplication Insightsを使えばWebサイトの生き死にを簡単に監視することができます。
また、通知手段も電話やメール、SMSなど様々な通知方法が選べます。
以降では、監視対象のWebサイトがパブリック環境かプライベート環境かで手順が異なるので、それぞれ解説していきます。
パブリック環境の場合
Webサイトがパブリックに公開されている場合は非常に簡単です。Azure portalから監視の設定ができます。
Application Insightsのリソースを作成して「可用性」タブから「標準テストの追加」を選ぶだけです。
「URL」に監視したいサイトのURLを入れればOKです。簡単ですね。
参考
プライベート環境の場合
実は手順自体はMSLearnに書いてあります。
該当箇所
ちょっとこれだけだとわかりづらいですね。以下では、詳細を解説していきます。
流れ
- Azure Storageアカウントの作成
- Azure LogAnalyticsの作成
- Azure Functionsの作成
- Azure Application Insightsの作成
- Azure Monitor Private Endpointの作成
- Log AnalyticsとApplication Insightsの接続
- Azure Functionsを可用性監視対象の内部VMと同じVNetにVNet統合
- Application Insightsにてアラートルールとアクショングループを作成
ポイント
- Azure Private LinkとAzure Monitor Private Link Scopeを使用してApplication InsightsをカスタムVNetに接続します
- 先ほどMSLearnに書いてあったTrackAvailability()というApplication InsightsのAPIを定期的に呼び出すAzure Functionsのタイマートリガー関数を作成します
- 今回監視対象のIPはプライベート環境(カスタムVNet内)にいるため、該当のVNetに対してAzure FunctionsをVNet統合する必要があります
以下ではポイントに絞って手順を解説していきます。
Storageアカウントの作成
Azure Functionsを作成するために、設定ファイルやソースファイルそのものを置いておくための場所としてStorageアカウントが必要。
作成方法は以下の記事を参考。
ちなみにストレージアカウントのネットワークは「すべてのネットワークから有効」にする。
「選択した仮想ネットワークとIPから有効」にするとFunctionsをデプロイするときにErrorになる。
Log Analyticsの作成
こちらも基本的にportalからポチポチ押していけば作れます。
Azure Functionsの作成
以下に沿ってportalからポチポチ作りましょう。言語は「.NET」でやってみます。
作れたら、ブラウザから関数を編集できる「App Service Editor」が便利です(作成したFunctionsのタブからいけます)。
コーディング
こちらも以下を参考に進めていきます。
using System.Net.Http;
public async static Task RunAvailabilityTestAsync(ILogger log)
{
using (var httpClient = new HttpClient())
{
// TODO: Replace with your business logic
await httpClient.GetStringAsync("https://www.bing.com/");
}
}
httpClient.GetStringAsync()の引数に指定するURLに対して外形監視ができます。
ちなみにこの時点で、パブリックなURLに対してであれば監視ができます(プライベート環境のURLを指定すると接続できず失敗します)。
サンプルの通りbingに対して外形監視した様子
3回やったので「成功」が3件でていますね。
Application InsightsとVNetをつなぐ(Private Link)
PrivateEndPointを接続
あと最終的には公式ドキュメント等にも書いてある通り、Appilcation InsightsとLog Analyticsスペースのパブリックアクセスをオフにする。
VNet統合する
Azure FunctionsとAzure VMが所属しているVNetを接続する必要があるため、VNet統合する。
コードの修正
確認
アラートの追加
Application Insightsの「アラート」からアラートルールとアクショングループを作成する。Function「Time Trigger1 Successes」が0以下になったとき(=アラートルール)、メールで通知するという設定(=アクショングループ)を追加してみた。
なお、アクショングループでは通知ではなくWebhookなどのアクションを選択することもできる。