Facebook Twitter
お問い合わせ
TOPICS
更新情報
ホーム > ブログ > Oracle Cloud > 【Oracle Cloud】Enterprise ManagerのアラートをOCI Notificationsに飛ばしてみた

【Oracle Cloud】Enterprise ManagerのアラートをOCI Notificationsに飛ばしてみた

ブログ
Oracle Cloud
2026.07.03

皆様、こんにちは。y.kobayashiです。

今回は、Enterprise Manager(以下EM)で検知したアラートを、OS Command通知メソッドを使用してOCI Notificationsへ連携する方法をご紹介します。


 

全体の構成

 

BaseDB(PDB)でメトリックのしきい値を超過すると、EMエージェントがこれを検知してOracle Management Service(以下OMS)へ通知します。

OMSはこの通知を受けてインシデント・ルールを評価し、ルールにマッチした場合はOS Command通知メソッドを実行します。

実際には、OMSサーバ上でシェルスクリプトが起動し、スクリプト内のoci-cliがOCI Notificationsのトピックへメッセージをパブリッシュ(publish)します。

最終的に、そのトピックに登録されたサブスクリプション(メールなど)へ通知が配信される、という流れになります。

なお、マルチOMS環境では、どのOMSノードが通知を処理するかは一定ではありません。

そのため、すべてのOMSノードに同じパスでスクリプトを配置しておく必要があります。

前提

EMとBaseDBは構築済みで、ターゲット登録も完了していることを前提とします。

本記事では、EMとBaseDBの構築手順、EMへのターゲット登録手順は扱いません。

事前準備

トピックの作成

トピックの作成方法は以下のドキュメントをご参照ください。

【OCI】通知を受け取るためのお知らせサブスクリプションの作成 #oracle - Qiita

ポリシー設定

EMからインスタンスプリシンパルでOCI Notificationsを利用するためには、EMがインストールされているインスタンスに以下の動的グループとポリシーを設定する必要があります。

No 種別 設定値 説明
1 動的グループ instance.id = '<EMがインストールされているインスタンスのOCID>' OCI Notificationsへの通知を実行するEMのインスタンスを動的グループに関連付ける
2 ポリシー allow dynamic-group <動的グループ名> to use ons-topics in compartment <コンパートメント名> EMが通知先のNotiticationsトピックへメッセージをpublishするために必要な権限

oci-cliのインストール

本記事では、OMSサーバのOSにOracle Linux8を使用しているため、以下のコマンドでoci-cliをインストールします。

sudo dnf install python36-oci-cli -y

通知スクリプトの作成

 

スクリプト本体

以下のスクリプトを任意のディレクトリに配置します。

EMのOS Command通知では、アラートの情報はすべて環境変数として渡されます。

スクリプト内で使用している「TARGET_NAME」や「SEVERITY_CODE」といった変数の詳細は以下のドキュメントをご参照ください。

Event Notification-Specific Environment Variables

#!/bin/bash
TOPIC_OCID="<トピックのOCID>"
LOG="<任意のパス>"
# 件名
TITLE="[${SEVERITY_CODE}] EM Alert: ${SEVERITY}:${TARGET_NAME} - ${MESSAGE}"

# 本文
BODY="ターゲット・タイプ = ${TARGET_TYPE}
ターゲット名     = ${TARGET_NAME}
ホスト名         = ${HOST_NAME}
メッセージ       = ${MESSAGE}"
if [ -n "${ACTION_MSG}" ]; then
  BODY="${BODY}
対処方法         = ${ACTION_MSG}"
fi
BODY="${BODY}
重大度           = ${SEVERITY}
イベント発生時刻 = ${EVENT_REPORTED_TIME}"
if [ -n "${TARGET_LIFECYCLE_STATUS}" ]; then
  BODY="${BODY}
ライフサイクル   = ${TARGET_LIFECYCLE_STATUS}"
fi
if [ -n "${ASSOC_INCIDENT_ID}" ]; then
  BODY="${BODY}
インシデントID   = ${ASSOC_INCIDENT_ID}
インシデント状況 = ${ASSOC_INCIDENT_STATUS}
インシデント所有者 = ${ASSOC_INCIDENT_OWNER}"
fi
BODY="${BODY}
イベント・タイプ = ${EVENT_TYPE}
イベント名       = ${EVENT_NAME}"

BODY="${BODY}
ルール名         = ${RULE_NAME}
ルール所有者     = ${RULE_OWNER}
コンソールURL    = ${MESSAGE_URL}"

# ログ出力
echo "[$(date '+%Y-%m-%d %H:%M:%S')] START - Target:${TARGET_NAME} Severity:${SEVERITY_CODE}" >> "${LOG}" 2>&1
oci ons message publish \
  --topic-id "${TOPIC_OCID}" \
  --title "${TITLE}" \
  --body "${BODY}" \
  --auth instance_principal \
  >> "${LOG}" 2>&1
echo "[$(date '+%Y-%m-%d %H:%M:%S')] END" >> "${LOG}" 2>&1

スクリプト配置後に実行権限を付与します。

chmod +x <任意のパス>

EM側の設定

通知メソッドの登録

EMコンソールから「設定」→「通知」→「スクリプトとSNMPv1トラップ」をクリックします。

画面右上の追加プルダウンで「OSコマンド」を選択した状態で「実行」をクリックします。

OSコマンド入力画面が開くので以下の項目を入力し、「OK」をクリックします。

  • 名前:任意(OCI_Notifications_Alert)
  • 説明:任意(OCI Notificationsへアラートを送信)
  • OSコマンド:任意(/home/oracle/scripts/oci_notify.sh)

 

インシデント・ルールへの紐づけ

EMコンソールから「設定」→「インシデント」→「インシデント・ルール」をクリックします。

「ルール・セットの作成」をクリックし、以下の項目を入力します。

  • 名前:任意(OCI_Notifications_RuleSet
  • 説明:任意(OCI Notificationsへアラートを送信するルールセット
  • 適用先:ターゲット
  • 有効:✔
  • タイプ:エンタープライズ
  • ターゲット:すべてのターゲット
  • ルール:受信イベントおよびイベントの更新
  • Event CompressionAllow policies to compress events within the same rule (Rule Level Compression)

ルールの項目の「作成」をクリックします。

作成するルールのタイプで「受信イベントおよびイベントの更新」を選択し、「続行」をクリックします。

新規ルールの作成:イベントの選択画面が表示されるので以下の項目を入力し「次へ」をクリックします。

  • イベントタイプ:メトリック・アラート
  • タイプメトリック:タイプメトリック・アラートのすべてのイベント

アクションの追加画面が表示されるので「追加」をクリックします。

以下の項目を入力し、「続行」をクリックします。

  • アクションの条件:常にアクションを実行
  • 拡張通知:✔ OCI_Notifications_Alert (OSコマンド)

アクションが追加されていることを確認し、「次」へをクリックします。

名前と説明の指定画面が表示されるので、以下の項目を入力し、「次」へをクリックします。

  • 名前:任意(OCI_Notifications_Rule)
  • 説明:任意(メトリック・アラートをOCI Notificationsへ送信するルール)

新規ルールの内容を確認し問題がなければ、「続行」をクリックします。

ルール・セットの作成画面で、「保存」をクリックします。

以上で、EM側の設定は完了です。

動作確認

実際にアラートを発報させるため、対象PDBの表領域使用率のしきい値を一時的に下げます。

「メトリックと収集設定」から対象メトリックを編集し、警告を15%に変更しました。

以下のように警告のメールが発報されます。

さいごに

本記事では、EMで検知したアラートをOCI Notificationsへ連携する方法をご紹介しましたが、いかがでしたでしょうか。

この仕組みにより、EMのアラートをOCI Notifications経由でメール通知できるようになり、さらにSlackなどへも拡張可能な形で構成できます。

OCI MonitoringではカバーしきれないDB内部の異常検知をEMが担うことで、DBの運用監視体制をもう一段階強化できるはずです。

本記事が、その一助となれば幸いです。

参考

以下のドキュメントもあわせてご参照ください。

OSコマンドおよびスクリプトを使用した通知の送信

 


この記事が気に入ったら
「いいね!」

この記事を書いた人


関連コンテンツ

CONTACT お問い合わせ

Cloudiiのサービスやプロダクトについて
興味をお持ちの方は、
お気軽にお問い合わせください。