AzureのIPsec S2S VPNをLog Analyticsで死活監視しよう(多分日本初記事)

# はじめに
### この情報は2023年6月13日時点のものです。

最近FSDに入社した初心者エンジニアです。誤りがあればご指摘ください。~~影で咽び泣いてます。~~
本記事では、Azureの仮想ネットワークゲートウェイと対向先ルーターを結ぶSite to Site (S2S) VPNをLog Analyticsを使用して死活監視する方法について解説します。

## なぜLog Analyticsなの？
Network WatcherやAzure Automationを使用する手法もありますが、前者にはAzure ARCが必要になりLog Analyticsと別に料金がかかります。
後者には1回あたりの課金も発生します。今回の手法であれば、Log Analyticsの従量課金のみで済むためお財布的にも非常にやさしくオススメです。追加でちょっと払えば1分単位の死活監視も可能です。

## 前提条件
- グローバル管理者権限を持つユーザーが操作可能であること(そこまで権限要らないかもしれないけど)
- 仮想ネットワークゲートウェイの構築、S2S VPNの接続が完了していること。

# 目次
1. Log Analyticsワークスペースの追加
2. Log Analyticsの仮想ネットワークゲートウェイへの有効化
3. アラート発報の設定

## 1. Log Analyticsワークスペースの追加

1.1. ブラウザを開き、Azure ADのグローバル管理者として portal.azure.com にログインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/533b2332-e360-a506-7a0b-06dadd5eb781.png)

1.2. 適切なリソースグループを選択し、"作成"をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/d412ac37-d348-148c-59c7-3ce9717bf40b.png)

1.3. 検索ボックスに"Log Analytics ワークスペース"と入力し、"ログ分析(OMS)"を選択して作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/ad8a383e-7004-8f40-11b7-a3778d13748b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/0ba8a80a-deac-2161-77bb-435dfc678f2c.png)

1.4. 名前を一意に指定し、適切な内容を設定して作成します（デプロイには約1分かかります）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/c3c54c07-6aa6-5035-42ee-26d69d79f703.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/8a161f5d-3a3a-3028-1172-a76fe2c84751.png)

## 2. Log Analyticsの仮想ネットワークゲートウェイへの有効化

2.1. 左ペインから"モニター"、"診断設定"を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/5db1512a-434e-89dd-3940-02f72af2194b.png)

2.2. リソースグループを選択し、リソースタイプで"仮想ネットワーク ゲートウェイ"を選択し、監視対象の仮想ネットワークゲートウェイをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/529fe4b7-2f9f-d182-4cf8-abfe71c229aa.png)

2.3. 初期状態の場合、診断設定が定義されていないため、"診断設定を追加する"をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/380bf75e-3c31-190e-5955-07d9ed69d7c8.png)

2.4. "診断設定の名前"を適宜入力し、ログカテゴリで"Tunnel Diagnostic Logs"を選択します。宛先の詳細のLog Analytics ワークスペースは、前述で作成したものを選択して保存します。
(allLogs、allMetricでも良いですが、従量課金なのでｹﾁｹﾁS2Sの死活監視だけならこれだけでOKです。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/ccae4a2d-d447-2bab-60fd-8182c9497b99.png)

2.5. ログを追加するため、10分程待ってから設定済みのS2S VPNの切断と接続を行います。(しなくてもいいです)

## 3. アラート発報の設定

3.1. 監視対象の仮想ネットワークゲートウェイの管理画面にアクセスし、"監視"→"警告"を開き、"作成"→"アラートルール"をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/3196d2e9-20f3-b24f-43e6-0075713805ed.png)

3.2. シグナルの選択で"カスタム ログ検索"をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/86ae8059-7d55-f995-c296-c885a73364f0.png)

3.3. 次のコードをクエリエディタに貼り付けます。
※切断時と接続時の判定に応じてコメントを削除します。
```
AzureDiagnostics 
| where TimeGenerated > ago(5m) //検索対象期間
// | where Category == "TunnelDiagnosticLog" and (status_s == "Disconnected") //切断時検出
// | where Category == "TunnelDiagnosticLog" and (status_s == "Connected")   //接続時検出
| project TimeGenerated, Resource , status_s, remoteIP_s, stateChangeReason_s //ここは別にたくさん出さなくてもいいです
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/b6b0800c-612a-9663-904e-94729a36caaf.png)

3.4. 適宜調整後実行し、"アラートの編集を続行する"を押してエディタを閉じます。
(結果が出てこなくても問題有りません)

3.5. アラートロジックの設定を以下のように変更します。
- 演算子: 次の値より大きい
- しきい値: お好みの数値(1以上)
- 評価の頻度: 5分(1分にもできますが実行コストが増えます。逆に減らすと安くなります。)

変更が完了したら、"次へ:アクション"をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/5951374e-7beb-4f37-80fe-d5d83833c8b2.png)

3.6. アクショングループを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/ca8cdced-aa70-9024-804b-9ccc822bcac9.png)

3.7. アクショングループ名を設定し、"次へ:通知"をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/bcf7b497-d3d1-c587-0bb9-67e75a6cc2f4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/b2da0720-16e1-eb47-c82a-de733367bba8.png)

3.8. 通知タイプで"電子メール/SMS メッセージ/プッシュ/音声"をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/8e09199e-8802-4ab7-f308-075695d873a3.png)

3.9. 電子メールにチェックを入れ、通知対象のメールアドレスを入力して”OK”をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/7fd5cad2-7d62-fd28-cdda-7f4973b9c5a8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/0afe80b6-813a-86d1-86e9-14a9732e48da.png)

3.10. 通知に名前をつけ、”確認と作成”をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/9838af12-1d80-964a-7698-3a8bb2508372.png)

3.11. 設定を検証し、エラーがなければ”作成”をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/60556443-ee2b-8dac-75f8-05775c181651.png)

3.12. 設定したメールアドレスに対しazure-noreply@microsoft.comより下記のようなメールが届いた事を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/49ddbdcc-023e-eefb-9d34-ab012ae0b212.png)

3.13	実際にIPsec VPN接続をダウンさせ、下記メールのようなアラートが送信されることを確認します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/1ee38079-a70a-9a50-fa4d-76325baf81bc.png)
ちなみにメール内で表示される内容及びタイムゾーンは固定されているので、もし独自のフォーマットによるメッセージ配信をご希望の場合はアラートアクションからWebHookで叩いてもらうようにすると幸せになれるかもしれません。
また、現時点では切断もしくは接続のみに反応するので、分けて発報させる場合はもう一方のロジックも追加で作成してください。
以上で作業は終了です。お疲れ様でした。

# 最後に
- アラートルールの測定とロジックの関係性について
クエリ内のage(5m)は、Log Analyticsから取得する期間を指します。
集計粒度は、その集計したデータを何分ごとに区切って合計を算出するかを指します。
評価頻度はクエリとアラートのチェック頻度を指します。ここは1分にするとコストが増えます。
下のGIF見てもらったらわかりやすいかな～と思います。(頑張ってExcelVBAで作りました)
![ezgif-3-49136e55fc.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/e281f596-0003-ebb0-e9b8-7571c2cfe6fd.gif)

- アラートが発動しない・ログが見れない場合
実際にログが蓄積されるまで少し時間がかかることがあります。
長いと1時間くらい待たされます。
Microsoftさんもうちょっとバグフィックス早くしてください。(LNGWのFQDNとか)


タイトルにもある通り、実は日本語でこのサービス(Azure Log Analyticsを使用したS2S VPNの死活監視)を実装している記事が一つもなかったので試しに書いてみました。
@hidekko さんの監修の元、勉強させていただきました。この場を借りて御礼申し上げます。