はじめに
IBM Cloudでは新しいログ監視ツールとしてIBM Cloud Logsが提供されています。
旧ログ監視ツールであるLog Analysisの後続として位置するソリューションとなっており、ログの保存・管理・検索やICOSへのアーカイブ、アラートの設定等様々な機能が備わっています。
本稿ではCloud Logsのログから特定のログを収集するアラートを作成し、Event Notificationsを通じてメール送信する手順を紹介します。
手順としてはこちらのdocs : IBM Cloud LogsとIBM Cloud Event Notificationsを接続するアウトバウンド統合の設定を参考に作成しています。
使用するソリューション紹介
IBM Cloud Logs
IBM Cloud Logsは、Coralogix社 からライセンス提供された技術をもとに、IBM Cloud Observability Teamが所有・作成・運用・保守を実施しているログやアクティビティイベントの監視ツールです。
可観測性サービスを提供するため、アクティビティー・トラッキング・イベントおよびロギング・アクティビティーを表示、分析、およびアラートすることができます。
ロギング・データとして大きく分けてアクティビティ・トラッキングログ(監査ログ)、クラウドプラットフォームログ、操作ログの3種類が取得可能です。
アクティビティ・トラッキングログはIBM Cloudアカウントで生成されるアクティビティトラッキングイベントをActivity Tracker Event Routingを使用してCloud Logsへルーティングすることで取得できます。
クラウドプラットフォームログも同じように、IBM Cloudアカウントで生成されるプラットフォームログをLogs Routingを使用してCloud Logsへルーティングできます。
インフラストラクチャとアプリケーションのログ(操作ログ)を送信するには、ロギング・エージェントを使用するか、REST APIを使用します。 Linuxサーバ上のLinux ロギング・エージェントを構成して、Syslogデータを収集し、IBM Cloud Logsインスタンスにルーティングすることもできます。
Event Notifications
IBM Cloud Event Notifications は、 IBM Cloud アカウントで発生する重要なイベントに関する情報を提供したり、Webhook を使用して自動化アクションをトリガーしたりするルーティング・サービスです。 モニターなどの IBM Cloud サービスから、E メール、SMS、Webhook などの通信チャネルにイベント通知をフィルタリングしてルーティングできます。
実装手順
本稿で実施する手順は以下の通りとなります。
1. Cloud LogsとEvent Notificationsの接続作成
2. Cloud Logsのアラート設定
3. Event Notificationsのトピック作成
4. Event Notificationsのサブスクリプション作成
5. 通知メールの確認
Cloud Logsで設定したアラート(今回はevent notificationsの文字列が含まれているログ)を通知メールとして送信することを目的とします。
事前準備
事前に以下の環境は作成してあるものとします。
- Cloud Logsインスタンス(Standardプラン, 東京リージョン, 7日間の保存設定)
- Logs RoutingによるCloud Logsへのルーティング
- Event Notificationsインスタンス(Standardプラン, 東京リージョン)
Cloud Logs, Logs Routingの設定方法は以下のページをご参考ください。
docs : Cloud Logs インスタンスのプロビジョニング
docs : リージョン内のIBM Cloud LogsインスタンスにプラットフォームログをルーティングするIBM Cloud Logs Routingサービスの設定
また、設定手順でサービス間許可を作成する必要があるのでCloud Logs・Event Notificationsの管理者権限が必要になります。
Cloud LogsとEvent Notificationsのインスタンスは同じリージョンでないと接続ができないので注意してください。
1. Cloud LogsとEvent Notificationsの接続作成
接続作成画面までの推移
まずはじめに通知用のソリューションであるEvent Notificationsとの接続を作成します。
ポータルの左側メニューから可観測性→ロギングを選択します。
ロギング・インスタンスの画面から上部のタブがクラウド・ログになっていることを確認し、事前に作成したCloud Logsインスタンスの右側のダッシュボードをクリックし、ダッシュボードを開きます。
ダッシュボードが表示されたら左側メニューのintegrations→outbound integrationsを選択し、外部接続作成画面へ移行します。
Outbound integrationsとして現時点ではEvent Notificationsのみとなっています。
右側の青いAddボタンを選択します。
作成されたEvent NotificationsとのIntegrations一覧が表示されます。
右上の青いAdd newボタンから新しいIntegrationを作成します。
接続作成
Event Notificationsとの接続作成画面ではAuthorization setupとSettingsの2つの設定を実施します。
まずはCloud LogsとEvent Notifications間の権限を設定します。すでに設定している場合は右下のNextボタンを選択してください。
新しく作成する場合は青文字のIAM Authorizationsから設定できます。
権限設定
IAM AuthorizationsをクリックするとIAMの許可の管理画面に遷移します。
この画面ではCloud LogsからEvent Notificationsへの接続のためにサービス間の権限設定を行います。
右上の青い作成ボタンを選択し、新しい権限を作成します。
サービス間権限設定ではソースとターゲットそれぞれの対象を設定します。
まずはソースに関して設定を行います。
ソース・アカウントは当該アカウントを選択し、次へを押します。
対象サービスとしてCloud Logsを選択し次へを押します。
リソースは特定のリソースを選択し、条件としてサービス・インスタンスが**(Cloud Logsのインスタンス名)**と指定し、次へを押します。
これでソースの設定が完了したので次にターゲットの設定を行います。
サービス対象としてはEvent Notificationsを選択し、次へを押します。
リソースは特定のリソースを選択し、serviceInstance string equals (Event Notificationsのインスタンス名) と条件を作成し、次へを押します。
最後にアクセス権限のレベルとしてロールの作成をします。
今回のCloud LogsとEvent Notificationsの接続に必要な権限はサービス・アクセスのEvent Source Managerとプラットフォーム・アクセスのビューワーのため、それらのチェックボックスにチェックを入れ、一番下の許可ボタンを押すことでサービス間権限の設定は完了です。
Event Notificationsとの接続作成
権限の作成が完了したら、再びCloud LogsのIntegrations作成画面に戻ります。
Authorization setupは完了したのでNextを選択します。
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ボタンを押して接続を作成できます。
接続設定ができているかの確認はEvent Notificatonsのインスタンス画面から可能です。
Event Notificationsインスタンス画面の左側Sourcesからソース一覧にCloud Logsインスタンスが表示されることを確認できます。
2. Cloud Logsのアラート設定
続いてCloud Logsで収集しているログからどのログをどの頻度で取るかをアラートで設定します。
アラートの設定方法についてはこちらのdocs : アラートの構成を参考にしています。
Cloud Logsのダッシュボード左側のAlert→Alert managementを選択します。
右上のNew Alertボタンを押して新しいアラートを作成します。
Details
まずはDetailsとしてアラートの名前とアラートの重大度(severity)を設定します。今回はEvent Notificationsのプラットフォームログを試しにアラートとして設定するのでAlert nameをalert-notification、 Alert severityをInfoに設定します。
ここで設定したアラートネームが通知メールのタイトルとなります。
Alert Type
Alert Typeではアラートの種類を選択できます。それぞれのアラートの特徴についてはdocs:アラートを参照ください。
今回はStandardを選択します。
Query
Queryではアラートされるログを特定する設定を行います。
Search queryではログのテキスト検索が可能です。
今回はシンプルに文字列としてevent-notificationsが含まれているログを条件とします。
より詳しくSearch queryの設定を実施したい場合はRegEx cheat sheetをクリックすることで詳細な検索方法を確認することが可能です。もしくはdocs : RegEx 式の作成を参照ください。
その他にも条件としてApplications、Subsystems、Severitiesなどでフィルタリングをかけることもできますが、今回は特に設定せずに進めます。
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にします。
Notifications
NotificationsではConditionsで検知したログの通知設定を行います。
発生したアラートの取得頻度を設定できるので、10Minutesに設定します。
右のNotify when resolvedをオンにするとアラートが解消したタイミングで通知を行う設定にできますが、今回は使用しません。
また、通知先の設定としてAdd integrationからIBM Cloud Event Notificationsを選択します。
設定項目は以上になります。
最後に上部にある青いCreate alertボタンを押してアラートを作成します。
以下今回は使用しませんが、アラートで使用できるその他のオプションについて紹介します。
Schedule
Scheduleではアラートの通知する時間、曜日の制限が可能です。
Notification content
Notification contentでは通知されるアラートの内容をJSON形式で指定できます。デフォルトですべてのログが含まれる設定となっています。
Verify alert
Verify alertでは過去24時間で設定したアラートの条件に合致するログの検索が行えます。
3. Event Notificationsのトピック作成
Cloud Logs側の設定が終わったので、残りのEvent Notifications側の設定を実施します。
まずはEvent Notificationsから通知メールの内容を設定するトピックを作成します。
Event Notificationsの左側メニューにあるTopicから右上の作成ボタンを押し新しいトピックを作成します。
トピックでは名前をtopic-test(任意の名前)として、ソースにIBM Cloud Logsを選択します。
また、通知するログのフィルタリングをイベントタイプ、イベントサブタイプ、重大度、もしくはJSONパスによる詳細な条件で設定可能です。
今回は設定しているアラートが一つだけのため特に設定しませんが、複数ある場合は特定のアラートのみに限定する必要があるため、これらのフィルタリングを設定する必要があります。
設定が完了したら下の作成ボタンからトピックを作成します。
4. Event Notificationsのサブスクリプション作成
最後に作成したトピックを通知させる先の設定としてサブスクリプションを作成します。
Event Notificationsの左側メニューにあるSubscriptionsから右上の作成ボタンを押して新規サブスクリプションを作成します。
サブスクリプションで設定する項目としてまずは名前をsubscription-test(任意の名前)、トピックを先ほど作成したトピック名topic-test、宛先としてIBM Cloud Eメール・サービスに設定します。
ここから通知メールの詳細設定を行います。
通知メールの本文にログの情報を載せるために通知ペイロードを追加するのチェックボックスにチェックを入れます。
次に名前の項目で通知メールの送信者名が設定できるのでnotification-mailとします。
返信先は通知メールに対して返信を行った際に自動で設定される返信先メールアドレスとなりますので名前に任意の名前、Eメールに任意の使用可能なEメールアドレスを入力します。
受信者の項目では通知メールを送る対象のメールアドレスを指定できます。
指定方法はEメール・アドレスの項目に送付先のEメールアドレスを入力し、右の追加ボタンを選択することで招待済みの欄に指定したアドレスが追加されます。
通知メールの送付先のメールアドレスがすべて招待済みになっていることを確認後、作成ボタンからサブスクリプションを作成します。
サブスクリプション作成後、登録したメールアドレスに以下のメールが送られるのでlink先のページでConfirmを選択します。
以上でメール通知の設定は完了です。
5. 通知メールの確認
通知メールの設定が完了したので、あとは実際にCloud Logsでアラートの条件が満たされて際に通知メールが送信されます。
送信されるメールの例として以下のようなメールが送られます。
メール本文に含まれている情報としては以下の通りです。
- トリガーされたアラートの名前
- アラートのトリガーされる条件
- アラートのURL
- アラートされたログの一部
また、メールで設定できる項目は以下の通りです。
- メールタイトル(alert-notification) →「2. Cloud Logsのアラート設定」にてアラートの名前で設定可能
- 差出人名(notification-mail) →「4. Event Notificationsのサブスクリプション作成」にて送信者の名前で設定可能
こちらのメールはEvent Notificationsのプラットフォームログで、メールが設定された宛先にうまく送信できたことを示しているようです。
メール本文にあるview_alertをクリックしてみるとCloud Logsのアラート画面に飛び、メールで通知されたアラートを確認できます。
実際に確認してみるとメール本文後半のlog_exampleの項目にあったものと同様のログが確認できます。今回のログに関しては内容が短かったため全文含まれていました。
メールの本文を編集したい場合はEvent Notificationsのテンプレート機能を利用する必要がありますが、テンプレート機能にはカスタムメール用のドメインが必要となります。
詳細はdocs : 作成するEvent Notificationsテンプレートを参照ください。
まとめ
本稿ではCloud Logsで収集したログをEvent Notificationsを通じて通知メールを設定する方法を記載しました。
今回はEメールで通知設定を実施しましたが、Event Notificationsを使用することでSlackやブラウザのプッシュ通知等にもアラートの通知を飛ばすことが可能ですのでそちらも是非お試しください。
Cloud Logsは新しいサービスで、様々な機能が備わっているのでまた便利な機能をご紹介できればと考えております。