Cloud LogsのEvent Notificationsを使用したメール通知方法について

# はじめに
IBM Cloudでは新しいログ監視ツールとしてIBM Cloud Logsが提供されています。
旧ログ監視ツールであるLog Analysisの後続として位置するソリューションとなっており、ログの保存・管理・検索やICOSへのアーカイブ、アラートの設定等様々な機能が備わっています。


本稿ではCloud Logsのログから特定のログを収集するアラートを作成し、Event Notificationsを通じてメール送信する手順を紹介します。

手順としてはこちらの[docs : IBM Cloud LogsとIBM Cloud Event Notificationsを接続するアウトバウンド統合の設定](https://cloud.ibm.com/docs/cloud-logs?topic=cloud-logs-event-notifications-configure)を参考に作成しています。

# 使用するソリューション紹介
## IBM Cloud Logs
IBM Cloud Logsは、Coralogix社 からライセンス提供された技術をもとに、IBM Cloud Observability Teamが所有・作成・運用・保守を実施しているログやアクティビティイベントの監視ツールです。

可観測性サービスを提供するため、アクティビティー・トラッキング・イベントおよびロギング・アクティビティーを表示、分析、およびアラートすることができます。 
ロギング・データとして大きく分けてアクティビティ・トラッキングログ(監査ログ)、クラウドプラットフォームログ、操作ログの3種類が取得可能です。

アクティビティ・トラッキングログはIBM Cloudアカウントで生成されるアクティビティトラッキングイベントをActivity Tracker Event Routingを使用してCloud Logsへルーティングすることで取得できます。

![telemetry-events.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/d0690799-8a2d-8cae-7593-fb3f2a1f8324.png)

クラウドプラットフォームログも同じように、IBM Cloudアカウントで生成されるプラットフォームログをLogs Routingを使用してCloud Logsへルーティングできます。

![telemetry-platform-logs.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/56dc82de-17d2-31dd-7330-d3ccf572a0b8.png)

インフラストラクチャとアプリケーションのログ(操作ログ)を送信するには、ロギング・エージェントを使用するか、REST APIを使用します。 Linuxサーバ上のLinux ロギング・エージェントを構成して、Syslogデータを収集し、IBM Cloud Logsインスタンスにルーティングすることもできます。

![スクリーンショット 2025-02-07 2.22.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/df44669e-0804-e728-5d53-bbb7f4a3e92d.png)

## Event Notifications
IBM Cloud Event Notifications は、 IBM Cloud アカウントで発生する重要なイベントに関する情報を提供したり、Webhook を使用して自動化アクションをトリガーしたりするルーティング・サービスです。 モニターなどの IBM Cloud サービスから、E メール、SMS、Webhook などの通信チャネルにイベント通知をフィルタリングしてルーティングできます。

![en-topleveldiagram.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/8e92c84c-c224-20e5-6f26-db18418e1261.png)



# 実装手順

本稿で実施する手順は以下の通りとなります。

1\. Cloud LogsとEvent Notificationsの接続作成
2\. Cloud Logsのアラート設定
3\. Event Notificationsのトピック作成
4\. Event Notificationsのサブスクリプション作成
5\. 通知メールの確認

![スクリーンショット 2025-02-07 15.34.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/412b07bf-61f0-c80b-4f63-1b2d9d7aaf71.png)


Cloud Logsで設定したアラート(今回はevent notificationsの文字列が含まれているログ)を通知メールとして送信することを目的とします。

## 事前準備
事前に以下の環境は作成してあるものとします。
- Cloud Logsインスタンス(Standardプラン, 東京リージョン, 7日間の保存設定)
- Logs RoutingによるCloud Logsへのルーティング
- Event Notificationsインスタンス(Standardプラン, 東京リージョン)

Cloud Logs, Logs Routingの設定方法は以下のページをご参考ください。

[docs : Cloud Logs インスタンスのプロビジョニング](https://cloud.ibm.com/docs/cloud-logs?topic=cloud-logs-instance-provision&interface=ui)
[docs : リージョン内のIBM Cloud LogsインスタンスにプラットフォームログをルーティングするIBM Cloud Logs Routingサービスの設定](https://cloud.ibm.com/docs/logs-router?topic=logs-router-target-cloud-logs)

https://qiita.com/Sungyun_Moon/items/1a51879fd2fd478ec84d


また、設定手順でサービス間許可を作成する必要があるので**Cloud Logs・Event Notificationsの管理者権限**が必要になります。


:::note warn
Cloud LogsとEvent Notificationsのインスタンスは同じリージョンでないと接続ができないので注意してください。
:::

## 1. Cloud LogsとEvent Notificationsの接続作成

### 接続作成画面までの推移

まずはじめに通知用のソリューションであるEvent Notificationsとの接続を作成します。
ポータルの左側メニューから**可観測性**→**ロギング**を選択します。

![スクリーンショット_2025-02-06_1_26_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/904d3e0a-8fa4-b4de-99da-7a67d73a75ec.png)

ロギング・インスタンスの画面から上部のタブが**クラウド・ログ**になっていることを確認し、事前に作成したCloud Logsインスタンスの右側の**ダッシュボード**をクリックし、ダッシュボードを開きます。

![スクリーンショット_2025-02-06_1_28_36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/f7cacb3e-4b69-ead5-0bf8-712e5342577e.png)

ダッシュボードが表示されたら左側メニューの**integrations**→**outbound integrations**を選択し、外部接続作成画面へ移行します。

![スクリーンショット_2025-02-06_1_31_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/d4329330-3baf-0aa0-2b25-b6d27747ca07.png)

Outbound integrationsとして現時点ではEvent Notificationsのみとなっています。
右側の青い**Add**ボタンを選択します。

![スクリーンショット_2025-02-06_1_34_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/55b60823-bbef-ae70-6915-8e7a702e5fac.png)

作成されたEvent NotificationsとのIntegrations一覧が表示されます。
右上の青い**Add new**ボタンから新しいIntegrationを作成します。

![スクリーンショット_2025-01-15_11_30_36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/65d9cf8a-1589-a30e-c075-48bc11dcf3ac.png)

### 接続作成
Event Notificationsとの接続作成画面ではAuthorization setupとSettingsの2つの設定を実施します。

まずはCloud LogsとEvent Notifications間の権限を設定します。すでに設定している場合は右下の**Next**ボタンを選択してください。
新しく作成する場合は青文字の**IAM Authorizations**から設定できます。

![スクリーンショット_2025-01-15_11_30_51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/03897c3d-fa7e-1e02-c186-1fd2d8c53e3a.png)

#### 権限設定
**IAM Authorizations**をクリックするとIAMの許可の管理画面に遷移します。
この画面ではCloud LogsからEvent Notificationsへの接続のためにサービス間の権限設定を行います。
右上の青い**作成**ボタンを選択し、新しい権限を作成します。

![スクリーンショット_2025-02-06_2_39_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/69b08226-430a-4f0f-c972-07973c98611b.png)

サービス間権限設定ではソースとターゲットそれぞれの対象を設定します。

まずはソースに関して設定を行います。
ソース・アカウントは**当該アカウント**を選択し、**次へ**を押します。

![スクリーンショット_2025-02-06_2_18_43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/d5ee4938-8ec7-d91e-4fd8-f63659c6f5d6.png)

対象サービスとして**Cloud Logs**を選択し**次へ**を押します。

![スクリーンショット_2025-02-06_2_19_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/7627f89e-3bb7-a8a4-72bf-3c4160df97a7.png)

リソースは**特定のリソース**を選択し、条件として**サービス・インスタンス**が**(Cloud Logsのインスタンス名)**と指定し、次へを押します。

![スクリーンショット_2025-02-06_2_19_37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/f9d10f3e-bc2f-986d-ed12-50df42a1f952.png)

これでソースの設定が完了したので次にターゲットの設定を行います。
サービス対象としては**Event Notifications**を選択し、**次へ**を押します。


![スクリーンショット_2025-02-06_2_19_52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/23080e81-1951-8cf7-c6c9-e918f18bbad9.png)

リソースは**特定のリソース**を選択し、**serviceInstance** **string equals** **(Event Notificationsのインスタンス名)** と条件を作成し、**次へ**を押します。

![スクリーンショット_2025-02-06_2_20_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/4497d64f-febd-64b8-4b40-2271d7c9fd89.png)

最後にアクセス権限のレベルとしてロールの作成をします。
今回のCloud LogsとEvent Notificationsの接続に必要な権限はサービス・アクセスの**Event Source Manager**とプラットフォーム・アクセスの**ビューワー**のため、それらのチェックボックスにチェックを入れ、一番下の**許可**ボタンを押すことでサービス間権限の設定は完了です。

![スクリーンショット_2025-02-06_2_21_33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/e00c5168-693c-9e09-bfa9-aa20e3776192.png)

#### Event Notificationsとの接続作成
権限の作成が完了したら、再びCloud LogsのIntegrations作成画面に戻ります。
Authorization setupは完了したので**Next**を選択します。

![スクリーンショット_2025-01-15_11_30_51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/fd053523-e959-5be3-2988-6a6b594afe37.png)

Settingでは接続先のEvent Notificationsを指定します。

Integration nameはデフォルトのままIBM Cloud Event Notificationsとし、Event Notifications Instanceは先ほど作成した権限設定によってCloud Logs側からEvent Notificationsのインスタンス名が自動選択されています。(こちらが表示されない場合は権限設定がうまくいっていないのでもう一度設定を見直してみてください)

Endpoint Typeは作成したEvent NotificationsのEndpoint Typeに合ったものを選択します。今回はEvent NotificationsをPrivate Endpointのみで構成しているため**Private**を選択し、右下の**Save**ボタンを押して接続を作成できます。


![スクリーンショット 2025-01-15 17.38.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/8e8936e6-cfbc-8675-a1b2-872421c1c0bb.png)


接続設定ができているかの確認はEvent Notificatonsのインスタンス画面から可能です。
Event Notificationsインスタンス画面の左側**Sources**からソース一覧にCloud Logsインスタンスが表示されることを確認できます。

![スクリーンショット_2025-02-06_10_03_44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/513ab4d7-d406-bc26-e749-6c4ef7a08864.png)

## 2. Cloud Logsのアラート設定

続いてCloud Logsで収集しているログからどのログをどの頻度で取るかをアラートで設定します。
アラートの設定方法についてはこちらの[docs : アラートの構成](https://cloud.ibm.com/docs/cloud-logs?topic=cloud-logs-alerts-config)を参考にしています。


Cloud Logsのダッシュボード左側の**Alert**→**Alert management**を選択します。

![スクリーンショット_2025-02-06_10_23_55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/45999edc-8739-7cbe-d81a-e6645e5aeba7.png)

右上の**New Alert**ボタンを押して新しいアラートを作成します。

![スクリーンショット_2025-02-06_10_25_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/1c7ffab6-505e-1a10-b0fe-8a4ce5a38535.png)

### Details

まずはDetailsとしてアラートの名前とアラートの重大度(severity)を設定します。今回はEvent Notificationsのプラットフォームログを試しにアラートとして設定するのでAlert nameを**alert-notification**、　Alert severityを**Info**に設定します。

:::note info
ここで設定したアラートネームが通知メールのタイトルとなります。
:::

![スクリーンショット_2025-02-06_13_07_47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/51de3d54-cc9e-fa18-8ea4-c8826c6575f1.png)

### Alert Type
Alert Typeではアラートの種類を選択できます。それぞれのアラートの特徴については[docs:アラート](https://cloud.ibm.com/docs/cloud-logs?topic=cloud-logs-alerts#alert-types)を参照ください。

今回は**Standard**を選択します。

![スクリーンショット 2025-02-06 13.08.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/01350e44-95fa-55c5-2f0b-6a5a6622b1ef.png)

### Query
Queryではアラートされるログを特定する設定を行います。
Search queryではログのテキスト検索が可能です。
今回はシンプルに文字列として**event-notifications**が含まれているログを条件とします。
より詳しくSearch queryの設定を実施したい場合はRegEx cheat sheetをクリックすることで詳細な検索方法を確認することが可能です。もしくは[docs : RegEx 式の作成](https://cloud.ibm.com/docs/cloud-logs?topic=cloud-logs-parse-rules-regex)を参照ください。


その他にも条件としてApplications、Subsystems、Severitiesなどでフィルタリングをかけることもできますが、今回は特に設定せずに進めます。

![スクリーンショット_2025-02-06_13_41_47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/97a22edf-4f59-9234-2bb3-bf05567198a5.png)


![スクリーンショット 2025-02-06 13.47.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/8693dbbc-976a-9a52-b21e-dda3923e8ae2.png)
<font color="gray">RegEx cheat sheet</font>

### Conditions

ConditionsではQueryをトリガーする条件を設定します。
アラートの条件としては発生時即時通知を行う**Notify Immediately**、時間あたりに設定した閾値を超えた場合に通知する**More Than**、逆に閾値を下回った場合に通知する**Less Than**、異常な数のログが発生した場合に通知する**More Than Usual**の4種類が存在します。

今回はデフォルトのAlert whenが**More Than**、Occurrencesが**1**、Time windowが**10minutes**(10分間に1回以上ログが流れたら通知)で設定します。

また、More Thanを選択した場合のみTime windowの設定をRolling window(10分毎に閾値の判定)とDynamic window(どの10分間でも閾値を超えた場合すぐに通知)を選択できます。
今回は**Rolling window**を選択します。

Group byでは最大2つのJSONフィールドを設定でき、その値が閾値を超えていた場合に通知できます。(例：massage.serviceNameを設定→ログの中でサービスネームが含まれているものを検知)

今回はこの機能を使用しないため、デフォルトの**None**にします。

![スクリーンショット 2025-02-06 14.39.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/f8bdb111-8e4b-1519-7552-42a0a1ce2e1b.png)

### Notifications

NotificationsではConditionsで検知したログの通知設定を行います。

発生したアラートの取得頻度を設定できるので、**10Minutes**に設定します。
右のNotify when resolvedをオンにするとアラートが解消したタイミングで通知を行う設定にできますが、今回は使用しません。

また、通知先の設定として**Add integration**から**IBM Cloud Event Notifications**を選択します。

![スクリーンショット_2025-02-06_14_57_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/0203c7f2-06b5-09f8-b0bf-d6a7ac01b943.png)

設定項目は以上になります。
最後に上部にある青い**Create alert**ボタンを押してアラートを作成します。

![スクリーンショット_2025-02-06_15_11_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/536b0d57-9730-5153-5585-57bf6ef14366.png)


以下今回は使用しませんが、アラートで使用できるその他のオプションについて紹介します。

### Schedule
Scheduleではアラートの通知する時間、曜日の制限が可能です。

![スクリーンショット 2025-02-06 15.04.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/3a81adf2-e9b8-cfb0-182a-c5be1c3b4909.png)

### Notification content
Notification contentでは通知されるアラートの内容をJSON形式で指定できます。デフォルトですべてのログが含まれる設定となっています。

![スクリーンショット 2025-02-06 15.07.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/b5818aeb-02a7-21be-0c8d-fb0d69ae66d1.png)

### Verify alert

Verify alertでは過去24時間で設定したアラートの条件に合致するログの検索が行えます。

![スクリーンショット 2025-02-06 15.06.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/d6360abf-0c58-1e22-f0c9-e6e69c090d6e.png)

## 3. Event Notificationsのトピック作成
Cloud Logs側の設定が終わったので、残りのEvent Notifications側の設定を実施します。

まずはEvent Notificationsから通知メールの内容を設定するトピックを作成します。
Event Notificationsの左側メニューにある**Topic**から右上の**作成**ボタンを押し新しいトピックを作成します。

![スクリーンショット_2025-02-06_15_46_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/49f2fbbf-12be-bf3f-a810-35f7a4c66d10.png)

トピックでは名前を**topic-test**(任意の名前)として、ソースに**IBM Cloud Logs**を選択します。

また、通知するログのフィルタリングをイベントタイプ、イベントサブタイプ、重大度、もしくはJSONパスによる詳細な条件で設定可能です。

今回は設定しているアラートが一つだけのため特に設定しませんが、複数ある場合は特定のアラートのみに限定する必要があるため、これらのフィルタリングを設定する必要があります。


![スクリーンショット_2025-02-10_13_40_35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/9b160357-288b-8f23-ac23-128c40755702.png)


設定が完了したら下の**作成**ボタンからトピックを作成します。

## 4. Event Notificationsのサブスクリプション作成

最後に作成したトピックを通知させる先の設定としてサブスクリプションを作成します。
Event Notificationsの左側メニューにある**Subscriptions**から右上の**作成**ボタンを押して新規サブスクリプションを作成します。

![スクリーンショット_2025-02-06_17_48_40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/6597a3a2-606a-7538-f7fe-cf75337b81e5.png)

サブスクリプションで設定する項目としてまずは名前を**subscription-test**(任意の名前)、トピックを先ほど作成したトピック名**topic-test**、宛先として**IBM Cloud Eメール・サービス**に設定します。

![スクリーンショット_2025-02-06_22_17_53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/3148b2a7-51ca-28e7-d66d-5e97a50927ae.png)

ここから通知メールの詳細設定を行います。

通知メールの本文にログの情報を載せるために**通知ペイロードを追加する**のチェックボックスにチェックを入れます。

次に名前の項目で通知メールの送信者名が設定できるので**notification-mail**とします。

返信先は通知メールに対して返信を行った際に自動で設定される返信先メールアドレスとなりますので名前に任意の名前、Eメールに任意の使用可能なEメールアドレスを入力します。

受信者の項目では通知メールを送る対象のメールアドレスを指定できます。
指定方法はEメール・アドレスの項目に送付先のEメールアドレスを入力し、右の**追加**ボタンを選択することで招待済みの欄に指定したアドレスが追加されます。

![スクリーンショット 2025-02-06 23.41.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/9eb21f10-9281-f8a6-ac36-80c5d9046863.png)

通知メールの送付先のメールアドレスがすべて招待済みになっていることを確認後、**作成**ボタンからサブスクリプションを作成します。

![スクリーンショット 2025-02-07 0.15.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/90b3821c-4ba5-a0f9-5a16-c77f4c682856.png)

サブスクリプション作成後、登録したメールアドレスに以下のメールが送られるのでlink先のページで**Confirm**を選択します。

![スクリーンショット_2025-02-07_0_33_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/fb04acf6-e32b-040b-b230-21f8d6156905.png)


![スクリーンショット_2025-02-07_0_33_46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/ba66a903-9ca2-1099-cf72-e82e4fd26a01.png)


![スクリーンショット_2025-02-07_0_33_52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/d2edbfcd-3d13-4f91-bb3d-6b5c604fabdb.png)

以上でメール通知の設定は完了です。

## 5. 通知メールの確認

通知メールの設定が完了したので、あとは実際にCloud Logsでアラートの条件が満たされて際に通知メールが送信されます。

送信されるメールの例として以下のようなメールが送られます。

![スクリーンショット_2025-02-07_9_03_49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/6f5500b7-049b-db18-fe12-39236ae2eb42.png)

![スクリーンショット_2025-02-07_9_16_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/eafe1819-3b28-e10a-ce4f-e157e332200b.png)


メール本文に含まれている情報としては以下の通りです。

- トリガーされたアラートの名前
- アラートのトリガーされる条件
- アラートのURL
- アラートされたログの一部

また、メールで設定できる項目は以下の通りです。
- メールタイトル(alert-notification) →「2. Cloud Logsのアラート設定」にてアラートの名前で設定可能
- 差出人名(notification-mail) →「4. Event Notificationsのサブスクリプション作成」にて送信者の名前で設定可能

こちらのメールはEvent Notificationsのプラットフォームログで、メールが設定された宛先にうまく送信できたことを示しているようです。

メール本文にあるview_alertをクリックしてみるとCloud Logsのアラート画面に飛び、メールで通知されたアラートを確認できます。

実際に確認してみるとメール本文後半のlog_exampleの項目にあったものと同様のログが確認できます。今回のログに関しては内容が短かったため全文含まれていました。

:::note info
メールの本文を編集したい場合はEvent Notificationsのテンプレート機能を利用する必要がありますが、テンプレート機能にはカスタムメール用のドメインが必要となります。
詳細は[docs : 作成するEvent Notificationsテンプレート](https://cloud.ibm.com/docs/event-notifications?topic=event-notifications-en-create-en-template)を参照ください。
:::

# まとめ
本稿ではCloud Logsで収集したログをEvent Notificationsを通じて通知メールを設定する方法を記載しました。

今回はEメールで通知設定を実施しましたが、Event Notificationsを使用することでSlackやブラウザのプッシュ通知等にもアラートの通知を飛ばすことが可能ですのでそちらも是非お試しください。

Cloud Logsは新しいサービスで、様々な機能が備わっているのでまた便利な機能をご紹介できればと考えております。