プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Traffic Directorの管理
12c (12.2.1.3.0)
E90199-04
目次へ移動
目次

前
次

14 イベント通知の管理

Oracle Traffic Directorでは、検出されたイベントに関する通知をサブスクライブすることができます。こうした通知を受け取るには、選択したHTTPエンドポイントのURLを指定します。Oracle Traffic Directorは、検出したイベントに関する情報をHTTP POSTメッセージを介してこのURLに送信します。

HTTP POSTリクエストにはイベント情報がJSON形式で含まれます。Oracle Traffic Directorは、次の2つのイベントに関する通知をサポートしています。

オリジン・サーバーのステータス変更イベント

Oracle Traffic Directorが、オリジン・サーバーのステータス変更を検出した時に、構成されたHTTPエンドポイントURLに通知を送信する方法を確認します。

オリジン・サーバーのステータス変更イベントは、次の2つのイベントのうちの1つが発生した場合に生じると考えられています。

  • OTDがオリジン・サーバーをオフラインとしてマークする。

  • OTDがオリジン・サーバーのマーク付けをオフラインからオンラインに戻す。

通知メッセージは、構成の一部であるいずれかのオリジン・サーバーのステータスが変更された時に送信されます。通知をサブスクライブしながら、関心のある特定のオリジン・サーバーに関する通知を受け取ることはできません。

複数のオリジン・サーバー・プールまたは複数のOracle Traffic Directorインスタンスの一部であるオリジン・サーバーのステータスが変更された場合、複数の通知が送信されることがあります。

Fusion Middleware Controlを使用したオリジン・サーバーのステータス・イベントのサブスクライブ

  1. 「グラフィカル・ユーザー・インタフェース - Fusion Middleware Control」の説明に従って、Traffic DirectorのFusion Middleware Controlにログインします。

  2. ページの左上隅または右上隅にある「WebLogicドメイン」ボタンをクリックします。

  3. 「管理」→「OTD構成」を選択します。

    使用可能なOTD構成のリストが表示されます。

    イベント・サブスクリプションを有効化する構成を選択します。

  4. 「構成」→「詳細構成」→「イベント・サブスクリプション」を選択します。

    「イベント・サブスクリプション」ページが表示されます。

  5. 「共通タスク」ペインで、「イベント・サブスクリプション」の下の「作成」をクリックします。

    新規イベント・サブスクリプション・ウィザードが開きます。

    画面上のプロンプトに従い、前に決定済みの詳細(サブスクリプション名、URLなど)を使用して、イベント・サブスクリプションの作成を完了します。

  6. 「結果」画面で、「OK」をクリックします。

    イベント・サブスクリプションが作成されたら、「新規イベント・サブスクリプション」ウィザードの「結果」画面にイベント・サブスクリプションの作成成功を確認するメッセージが表示されます。

WLSTを使用したオリジン・サーバーのステータス変更イベントのサブスクライブ

  • イベント・サブスクリプションの作成

    イベント・サブスクリプションを作成するには、例に示すように、otd_createEventSubscriptionコマンドを実行します。

    props = {}
    props['configuration'] = 'foo'
    props['event-subscription'] = 'bar'
    props['url'] = 'http://example.com:7777/subscriber'
    otd_createEventSubscription(props)

    最初のコマンドはURL: http://example.com:7777/subscriberをサブスクライブします。

  • イベント・サブスクリプションのリストの表示

    サブスクライブされているイベント・サブスクリプションのリストを表示するには、otd_listEventSubscriptionsコマンドを実行します。

    たとえば、構成のインスタンスにスケジュールされているイベント・サブスクリプションを表示するには、次のようにします。

    props = {}
    props['configuration'] = 'foo'
    otd_listEventSubscriptions(props)
  • イベント・サブスクリプションの削除

    イベント・サブスクリプションを削除するには、例に示すように、otd_deleteEventSubscriptionコマンドを実行します。

    props = {}
    props['configuration'] = 'foo'
    props['event-subscription'] = 'bar'
    otd_deleteEventSubscription(props)
  • イベント・サブスクリプションのプロパティの設定

    イベント・サブスクリプションを作成すると、それは自動的に有効になります。

    「enabled」を「false」に設定したコマンドotd_setEventSubscriptionPropertiesは、イベント・サブスクリプションを無効化するために使用できます。

    イベントを無効にするには、enabledプロパティをfalseに設定します。

    props = {}
    props['configuration'] = 'foo'
    props['event-subscription'] = 'bar'
    props['enabled'] = 'true'
    otd_setEventSubscriptionProperties(props)
  • イベント・サブスクリプションのプロパティの取得

    「enabled」を「true」に設定したコマンドotd_getEventSubscriptionPropertiesは、イベント・サブスクリプションのプロパティを取得するために使用されます。

    イベントを有効にするには、enabledプロパティを次にようにtrueに設定します。

    props = {}
    props['configuration'] = 'foo'
    props['event-subscription'] = 'bar'
    otd_getEventSubscriptionProperties(props)

コマンドと各パラメータ/オプションの詳細を確認するには、下に示すように、helpを使用します。

 help('otd_createEventSubscription') 

通知形式

サブスクライブされているURLに対する通知が送信された場合、Content-typeヘッダーの値にはapplication/jsonが設定されます。イベントが発生すると、OTDはHTTP POSTをエンドポイントに送信します。そのメッセージ本文には、この項で説明したように、名前/値のペアを持つJSONドキュメントが含まれています。

表14-1 すべてのイベントに共通するJSONプロパティ

JSONプロパティ 説明

event-type

イベントのタイプ。値: origin-server-status-change

domain-name

Oracle Traffic Directorインスタンスが構成されたドメインの名前。

instance-name

Oracle Traffic Directorインスタンスの名前。

timestamp

イベントが発生し、OTDによって検出された時間。

表14-2 origin-server-status-changeイベントに固有のJSONプロパティ

JSONプロパティ 説明

pool-name

オリジン・サーバーが関連付けられているオリジン・サーバー・プールの名前。

host

ステータスが送信されているオリジン・サーバーのホスト。

port

オリジン・サーバーのポート。

status

オンラインまたはオフライン。

reason

Oracle Traffic Directorがオリジン・サーバーをオフラインまたはオンラインとしてマークしている理由。

protocol

使用されているヘルス・チェック・プロトコル。

JSONスキーマ

{   
   "$schema":"http://json-schema.org/draft-04/schema#",
   "id":"",
   "type":"object",
   "properties":{   
      "v1.0":{   
         "id":"/v1.0",
         "type":"object",
         "properties":{   
            "event-type":{   
               "id":"/v1.0/event-type",
               "type":"string"
            },
            "domain-name":{   
               "id":"/v1.0/domain-name",
               "type":"string"
            },
            "instance-name":{   
               "id":"/v1.0/instance-name",
               "type":"string"
            },
            "origin-server":{   
               "id":"/v1.0/origin-server",
               "type":"object",
               "properties":{   
                  "pool-name":{   
                     "id":"/v1.0/origin-server/pool-name",
                     "type":"string"
                  },
                  "host":{   
                     "id":"/v1.0/origin-server/host",
                     "type":"string"
                  },
                  "port":{   
                     "id":"/v1.0/origin-server/port",
                     "type":"integer"
                  },
                  "health-check":{   
                     "id":"/v1.0/origin-server/health-check",
                     "type":"object",
                     "properties":{   
                        "protocol":{   
                           "id":"/v1.0/origin-server/health-check/protocol",
                           "type":"string"
                        },
                        "status":{   
                           "id":"/v1.0/origin-server/health-check/status",
                           "type":"string"
                        },
                        "reason":{   
                           "id":"/v1.0/origin-server/health-check/reason",
                           "type":"string"
                        }
                     },
                     "required":[   
                        "status"
                     ]
                  }
               },
               "required":[   
                  "host",
                  "port",
                  "health-check"
               ]
            },
            "timestamp":{   
               "id":"/v1.0/timestamp",
               "type":"string"
            }
         },
         "required":[   
            "event-type",
            "domain-name",
            "instance-name",
            "origin-server",
            "timestamp"
         ]
      }
   },
   "required":[   
      "v1.0"
   ]
}

Content-Type: application/json
 
Content:
 
{   
   "v1.0":{   
      "event-type":"origin-server-status-change",
      "domain-name":"base_domain",
      "instance-name":"otd1",
      "origin-server":{   
         "pool-name":"testpool",
         "host":"slc06cdz",
         "port":7777,
         "health-check":{   
            "protocol":"HTTP",
            "status":"offline",
            "reason":"Server not reachable"
         }
      },
      "timestamp":"Mon, 18 Apr 2016 04:34:23 -07:00"
   }
}

エラー処理

サブスクライバがエラー・コードを使用して応答する場合、Oracle Traffic Directorは次のことを実行します。

  • 次の警告メッセージをサーバー・ログに記録する。

    • イベント・ディスパッチャ: サブスクライバ<subscription_url>から受け取った応答コード<http_response_code>

    • イベント・ディスパッチャ: サブスクライバ<subscription_url>にイベント<json_notification_data>をポストできません

    • イベントを破棄する。

サブスクライバを使用できない場合、Oracle Traffic Directorは次のことを実行します。

  • イベントの再ポストを3回試行する。

  • 次の警告メッセージをサーバー・ログに記録する。

    • イベント・ディスパッチャ: サブスクライバ<subscription_url>から応答を受け取ることができません

    • イベント・ディスパッチャ: サブスクライバ<subscription_url>にイベント<json_notification_data>をポストできません

  • イベントを破棄する。

リクエスト制限超過イベント

リクエスト制限の超過イベントは、仮想サーバーに対して構成されたリクエスト制限を超えた場合に発生します。OTDは、リクエスト制限が指定された時間間隔(event-notification-interval)で超過していたかどうかをチェックし、構成されたHTTPエンドポイントに通知メッセージを送信します。

event-notification-intervalは、その通知をサブスクライブしながら、リクエスト制限に対してユーザーが設定できる構成可能なパラメータです。通知メッセージは、構成されたリクエスト制限を超えたあらゆるリクエスト制限に関して送信されます。リクエスト制限は、そのリクエスト制限の構成時に指定された名前を使用して識別されます。

リクエストを監視するためにリクエスト制限でmonitor属性が使用されている場合、通知メッセージにはしきい値を超えたすべての監視のJSON配列が含まれます。

仮想サーバーが指定されたリクエスト制限を超えた場合、OTDはmonitor属性に一致するすべての後続リクエストを拒否します。通知メッセージには、各監視で拒否されたリクエスト数に関する情報が含まれます。

注意:

リクエスト制限を超えた場合、OTDは通知を即座に送信しません。

高いバーストトラフィックが発生している場合、リクエスト制限は短い時間間隔で複数回超過する場合があります。リクエスト制限を超えるたびにOTDが通知メッセージを送信すると、多くの通知メッセージが発生することになります。これを回避するために、OTDはリクエスト制限がある時間間隔で超過したかどうかを確認し、制限を超えたことを検出した場合は通知メッセージを送信します。

WLSTを使用したリクエスト制限の超過イベントのサブスクライブ

  • イベント・サブスクリプションを作成します。「WLSTを使用したオリジン・サーバーのステータス変更イベントのサブスクライブ」を参照してください。

  • リクエスト制限の超過イベントの有効化

    指定されたリクエスト制限のイベントを有効化するには、例に示すように、otd_enableRequestLimitEventsコマンドを実行します。

    props = {}
    props['configuration'] = 'foo'
    props['virtual-server'] = 'bar'
    props['request-limit'] = 'request-limit-1'
    props['event-notification-interval'] = '60'
    otd_enableRequestLimitEvents(props)
  • リクエスト制限の超過イベントの無効化

    指定されたリクエスト制限のイベントを無効化するには、例に示すように、otd_disableRequestLimitEventsコマンドを実行します。

    props = {}
    props['configuration'] = 'foo'
    props['virtual-server'] = 'bar'
    props['request-limit'] = 'request-limit-1'
    otd_disableRequestLimitEvents(props)
  • リクエスト制限の超過イベントのプロパティの表示

    指定されたリクエスト制限のプロパティを表示するには、otd_getRequestLimitPropertiesコマンドを実行します。

通知形式

エンドポイントに送信されるPOSTメッセージのメッセージ本文には、この項で説明した名前/値のペアを持つJSONドキュメントが含まれています。

表14-3 すべてのイベントに共通するJSONプロパティ

JSONプロパティ 説明

event-type

イベントのタイプ。値: request-limit-exceeded

domain-name

Oracle Traffic Directorインスタンスが構成されたドメインの名前。

instance-name

Oracle Traffic Directorインスタンスの名前。

表14-4 request-limit-exceededからの通知に固有のJSONプロパティ

JSONプロパティ 説明

time-begin

イベント通知間隔の始まりを示すタイムスタンプ。

time-end

イベント通知間隔の終わりを示すタイムスタンプ。

virtual-server

リクエスト制限を有効化した仮想サーバーの名前。

request-limit-rule

この通知メッセージを生成したリクエスト制限ルールを特定します。

monitor

監視されているリクエスト属性の値。

たとえば、-request-limitルールでmonitor=$ipが指定されている場合、JSONプロパティmonitorには「$ip」変数の値(つまり、クライアントIPアドレス)が設定されます。

request-limitルールでmonitorが指定されていない場合、このプロパティにはunnamedが設定されます。

total-queue-overflows

キューのオーバーフローが原因で拒否されたリクエスト総数。

total-queue-timeouts

キュー内での待機時のタイムアウトが原因で拒否されたリクエスト総数。

JSONスキーマ

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "id": "/",
  "type": "object",
  "properties": {
    "v1.0": {
      "id": "v1.0",
      "type": "object",
      "properties": {
        "event-type": {
          "id": "event-type",
          "type": "string"
        },
        "domain-name": {
          "id": "domain-name",
          "type": "string"
        },
        "instance-name": {
          "id": "instance-name",
          "type": "string"
        },
        "event-notification-interval": {
          "id": "event-notification-interval",
          "type": "object",
          "properties": {
            "time-begin": {
              "id": "time-begin",
              "type": "string"
            },
            "time-end": {
              "id": "time-end",
              "type": "string"
            }
          }
        },
        "virtual-server": {
          "id": "virtual-server",
          "type": "string"
        },
        "request-limit-rule": {
          "id": "request-limit-rule",
          "type": "string"
        },
        "monitors": {
          "id": "monitors",
          "type": "array",
          "items": {
            "id": "0",
            "type": "object",
            "properties": {
              "monitor": {
                "id": "monitor",
                "type": "string"
              },
              "total-rejects": {
                "id": "total-rejects",
                "type": "object",
                "properties": {
                  "total-queue-overflows": {
                    "id": "total-queue-overflows",
                    "type": "integer"
                  },
                  "total-queue-timeouts": {
                    "id": "total-queue-timeouts",
                    "type": "integer"
                  }
                }
              }
            }
          }
        }
      },
      "required": [
        "event-type",
        "domain-name",
        "instance-name",
        "event-notification-interval",
        "virtual-server",
        "request-limit-rule",
        "monitors"
      ]
    }
  },
  "required": [
    "v1.0"
  ]
}

{
"v1.0": {
  "event-type": "request-limit-exceeded",
  "domain-name": "base domain",
  "instance-name": "otd1",
  "event-notification-interval": {
    "time-begin": "Mon, 18 Apr 2016 04:34:23 -07:00",
    "time-end": "Mon, 18 Apr 2016 04:35:23 -07:00"
  },
  "virtual-server": "1.example.com",
  "request-limit-rule": "request-limit-1",
  "monitors": [
  {
    "monitor": "16.181.76.89",
   "total-rejects": {
   "total-queue-overflows": 2,
   "total-queue-timeouts": 3
   }
 }
 ]
}
}