EMCCからSNMPトラップを飛ばす設定とその動作確認

EMCC 13.5からSNMPトラップを送信し、ちゃんと送信できていることをテストする。

SNMPマネージャの準備

SNMPトラップを受信する側に何かしらのSNMPマネージャソフトウェアを入れておく必要がある。

Windows上で使えるものを適当に探してみると、TWSNMPというものがあったのでこれを使ってみる。

Twise Labo. Inc. | TWSNMP公式サイト (linkclub.jp)

旧バージョンとされている TWSNMP v4.11.7 をダウンロードしてインストールしたら、管理MAPを起動して、[編集] → [MAPプロパティ] → [TRAP 設定] 欄の [TRAPポート] から 162 を選んでおく。

MIBファイルの準備

EMCC用のMIBファイルを取得しておく。これはEMCCをインストールした以下の場所に配置されている。

$ORACLE_HOME/network/doc/omstrap.v1

このファイルをTWSNWPを動かすマシン上にコピーしておく。

MIBファイルの登録

[SNMP管理] → [MIBツール] を開き、[読み込んだMIBファイル]欄の[追加]を押し、先ほど準備したMIBファイルを追加する。

すると、以下のように「ORACLE-ENTERPRISE-MANAGER-4-MIB」として新たに登録される。

MIBツリーにも、1.3.6.1.4.1.111.15 の OID が表示される。13c では oraEMNGEvent のトラップが送信されることになる。

Enterprise Manager MIBの変数の解釈 (oracle.com)

EMCC側の準備

[設定] → [通知] → [スクリプトとSNMPv1トラップ] の画面を開き、[追加] のプルダウンから [SNMPv1トラップ] を選択して [実行]を押す。

トラップの送信先として先ほど準備したSNMPマネージャのIPアドレスとポート番号を指定して、[SNMPトラップのテスト]を押してみる。

すると、TWSNMP 側でトラップが受信される。

ちゃんと受信されることが確認出来たら、EMCCのSNMP設定画面で[OK]を押して確定する。

インシデントに対してSNMP通知の設定を行う

上記はとりあえずテストでトラップを発行しているが、実際に発生するインシデントでSNMP通知が行われるようにするにはさらに設定が必要。

インシデントルールを作成

[設定] → [インシデント] → [インシデント・ルール] の画面を開き、[ルール・セットの作成] を押す。

この画面で、通知を発行したいターゲットや、通知のルールを設定していく。とりあえず、データベースインスタンスのターゲットに対して、ターゲット可用性のイベントが発生した際にSNMP通知を出すような設定にしてみる。

[ターゲット] に適当な監視対象のインスタンスを選択。

[ルール] の作成画面では、 [タイプ] に [ターゲット可用性] を選び、[アクションの追加] 画面の [拡張通知] 欄から作成していたSNMPトラップの名前を選択する。

上記でルールを保存すれば、インスタンスの可用性に問題が発生した際にトラップが送信されることになる。

テスト

インシデントルールを設定したインスタンスを意図的に停止してみると、以下のようなトラップが送信される。

タイムスタンプ(エージェント起動からの経過時間(1/100秒単位)) =  34012
  TRAP種別 = oraEMNGEvent
  oraEMNGEventNotifType.1 = STRING: "NOTIF_NORMAL"
  oraEMNGEventMessage.1 = STRING: データベース・インスタンスへの接続に失敗しました: Failed to connect: java.sql.SQLException: Listener refused the connection with the following error: ORA-12528, TNS:listener: all appropriate instances are blocking new connections  。
  oraEMNGEventMessageURL.1 = STRING: "https://em135win.dn.home:7799/em/redirect?pageType=sdk-core-event-console-detailEvent&issueID=EADE09EAF2A34FAC9BF25389F63F0C41"
  oraEMNGEventSeverity.1 = STRING: 致命的
  oraEMNGEventSeverityCode.1 = STRING: "FATAL"
  oraEMNGEventRepeatCount.1 = STRING: "0"
  oraEMNGEventActionMsg.1 = ""
  oraEMNGEventOccurrenceTime.1 = ""
  oraEMNGEventReportedTime.1 = STRING: "2024/09/09 14:23:41 JST"
  oraEMNGEventCategories.1 = STRING: 可用性
  oraEMNGEventCategoryCodes.1 = STRING: "Availability"
  oraEMNGEventType.1 = STRING: ターゲット可用性
  oraEMNGEventName.1 = STRING: "Status"
  oraEMNGAssocIncidentId.1 = STRING: "163"
  oraEMNGAssocIncidentOwner.1 = ""
  oraEMNGAssocIncidentAcked.1 = STRING: いいえ
  oraEMNGAssocIncidentStatus.1 = STRING: 新規
  oraEMNGAssocIncidentPriority.1 = STRING: なし
  oraEMNGAssocIncidentEscLevel.1 = STRING: "0"
  oraEMNGEventTargetName.1 = STRING: "orcl"
  oraEMNGEventTargetNameURL.1 = STRING: "https://em135win.dn.home:7799/em/redirect?pageType=TARGET_HOMEPAGE&targetName=orcl&targetType=oracle_database"
  oraEMNGEventTargetType.1 = STRING: "Database Instance"
  oraEMNGEventHostName.1 = STRING: "em135win.dn.home"
  oraEMNGEventTargetOwner.1 = STRING: "SYSMAN"
  oraEMNGEventTgtLifeCycleStatus.1 = ""
  oraEMNGEventTargetVersion.1 = STRING: "19.19.0.0.0"
  oraEMNGEventUserDefinedTgtProp.1 = STRING: オペレーティング・システム=Windows, プラットフォーム=x64 (AMD or Intel)
  oraEMNGEventSourceObjName.1 = ""
  oraEMNGEventSourceObjNameURL.1 = ""
  oraEMNGEventSourceObjType.1 = ""
  oraEMNGEventSourceObjSubType.1 = ""
  oraEMNGEventSourceObjOwner.1 = ""
  oraEMNGEventCAJobName.1 = ""
  oraEMNGEventCAJobStatus.1 = ""
  oraEMNGEventCAJobOwner.1 = ""
  oraEMNGEventCAJobStepOutput.1 = ""
  oraEMNGEventCAJobType.1 = ""
  oraEMNGEventRuleSetName.1 = STRING: "test_rule"
  oraEMNGEventRuleName.1 = STRING: "test_rule,rule 165"
  oraEMNGEventRuleOwner.1 = STRING: "SYSMAN"
  oraEMNGEventSequenceId.1 = STRING: "EADE09EAF2A34FAC9BF25389F63F0C41"
  oraEMNGEventRCADetails.1 = ""
  oraEMNGEventContextAttrs.1 = ""
  oraEMNGEventUserComments.1 = ""
  oraEMNGEventUpdates.1 = STRING: データベース・インスタンスへの接続に失敗しました: Failed to connect: java.sql.SQLException: Listener refused the connection with the following error: ORA-12528, TNS:listener: all appropriate instances are blocking new connections  。, ルール(名前 = すべてのターゲットのインシデント管理ルール・セット、停止中のターゲットの可用性ステータスのインシデント作成ルール [システム生成ルール])によってインシデントが作成されました。
  oraEMNGEventTotalOccurrenceCount.1 = ""
  oraEMNGEventCurrOccurrenceCount.1 = ""
  oraEMNGEventCurrFirstOccurDate.1 = ""
  oraEMNGEventCurrLastOccurDate.1 = ""
  oraEMNGEventRCAStatus.1 = STRING: 原因および兆候ではない
  oraEMNGEventTypeAttr1.1 = STRING: 可用性ステータス=停止中
  oraEMNGEventTypeAttr2.1 = STRING: 重大度GUID=289E349011B04CD69C16BCD3DFDB09C4
  oraEMNGEventTypeAttr3.1 = STRING: 可用性サブステータス=99
  oraEMNGEventTypeAttr4.1 = STRING: 遷移重大度=25
  oraEMNGEventTypeAttr5.1 = STRING: レスポンス・メトリックGUID=3BF84446B273FE1F5743FD6293C7E192
  oraEMNGEventTypeAttr6.1 = STRING: 可用性サイクルの最初の重大度の重大度GUID=289E349011B04CD69C16BCD3DFDB09C4
  oraEMNGEventTypeAttr7.1 = ""
  oraEMNGEventTypeAttr8.1 = ""
  oraEMNGEventTypeAttr9.1 = ""
  oraEMNGEventTypeAttr10.1 = ""
  oraEMNGEventTypeAttr11.1 = ""
  oraEMNGEventTypeAttr12.1 = ""
  oraEMNGEventTypeAttr13.1 = ""
  oraEMNGEventTypeAttr14.1 = ""
  oraEMNGEventTypeAttr15.1 = ""
  oraEMNGEventTypeAttr16.1 = ""
  oraEMNGEventTypeAttr17.1 = ""
  oraEMNGEventTypeAttr18.1 = ""
  oraEMNGEventTypeAttr19.1 = ""
  oraEMNGEventTypeAttr20.1 = ""
  oraEMNGEventTypeAttr21.1 = ""
  oraEMNGEventTypeAttr22.1 = ""
  oraEMNGEventTypeAttr23.1 = ""
  oraEMNGEventTypeAttr24.1 = ""
  oraEMNGEventTypeAttr25.1 = ""
oraEMNGEventReportedState.1 = STRING: "DOWN"

とりあえず、どのようにSNMPトラップが送信されるのかはこれで確認可能。

コメント