HTTP POSTリクエストにはイベント情報がJSON形式で含まれます。Oracle Traffic Directorは、次の2つのイベントに関する通知をサポートしています。
Oracle Traffic Directorは、オリジン・サーバーのステータス変更を検出した時に、構成されたHTTPエンドポイントURLに通知を送信します。
オリジン・サーバーのステータス変更イベントは、次の2つのイベントのうちの1つが発生した場合に生じると考えられています。
OTDがオリジン・サーバーをオフラインとしてマークする。
OTDがオリジン・サーバーのマーク付けをオフラインからオンラインに戻す。
通知メッセージは、構成の一部であるいずれかのオリジン・サーバーのステータスが変更された時に送信されます。通知をサブスクライブしながら、関心のある特定のオリジン・サーバーに関する通知を受け取ることはできません。
複数のオリジン・サーバー・プールまたは複数のOracle Traffic Directorインスタンスの一部であるオリジン・サーバーのステータスが変更された場合、複数の通知が送信されることがあります。
イベント・サブスクリプションの作成
イベント・サブスクリプションを作成するには、例に示すように、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)
この項で説明したWLSTコマンドの詳細は、『Oracle Traffic Director WebLogic Scripting Toolコマンドライン・リファレンス』を参照してください。
コマンドと各パラメータ/オプションの詳細を確認するには、下に示すように、helpを使用します。
help('otd_createEventSubscription')
「Fusion Middleware Controlの表示」の説明に従って、Traffic DirectorのFusion Middleware Controlにログインします。
ページの左上隅または右上隅にある「WebLogicドメイン」ボタンをクリックします。
「管理」→「OTD構成」を選択します。
使用可能なOTD構成のリストが表示されます。
イベント・サブスクリプションを有効化する構成を選択します。
「構成」→「詳細構成」→「イベント・サブスクリプション」を選択します。
「イベント・サブスクリプション」ページが表示されます。
「共通タスク」ペインで、「イベント・サブスクリプション」の下の「作成」をクリックします。
「新規イベント・サブスクリプション」ウィザードが開始されます。

画面上のプロンプトに従い、前に決定済みの詳細(サブスクリプション名、URLなど)を使用して、イベント・サブスクリプションの作成を完了します。
「結果」画面で、「OK」をクリックします。
イベント・サブスクリプションが作成されたら、「新規イベント・サブスクリプション」ウィザードの「結果」画面にイベント・サブスクリプションの作成成功を確認するメッセージが表示されます。
サブスクライブされているURLに対する通知が送信された場合、Content-typeヘッダーの値にはapplication/jsonが設定されます。イベントが発生すると、OTDはHTTP POSTをエンドポイントに送信します。そのメッセージ本文には、この項で説明したように、名前/値のペアを持つJSONドキュメントが含まれています。
表15-1 すべてのイベントに共通するJSONプロパティ
| JSONプロパティ | 説明 |
|---|---|
event-type |
イベントのタイプ。値: |
domain-name |
Oracle Traffic Directorインスタンスが構成されたドメインの名前。 |
instance-name |
Oracle Traffic Directorインスタンスの名前。 |
timestamp |
イベントが発生し、OTDによって検出された時間。 |
表15-2 origin-server-status-changeイベントに固有のJSONプロパティ
| JSONプロパティ | 説明 |
|---|---|
pool-name |
オリジン・サーバーが関連付けられているオリジン・サーバー・プールの名前。 |
host |
ステータスが送信されているオリジン・サーバーのホスト。 |
port |
オリジン・サーバーのポート。 |
status |
オンラインまたはオフライン。 |
reason |
Oracle Traffic Directorがオリジン・サーバーをオフラインまたはオンラインとしてマークしている理由。 |
protocol |
使用されているヘルス・チェック・プロトコル。 |
{
"$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を使用したオリジン・サーバーのステータス変更イベントのサブスクライブ」を参照してください。
リクエスト制限の超過イベントの有効化
指定されたリクエスト制限のイベントを有効化するには、例に示すように、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ドキュメントが含まれています。
表15-3 すべてのイベントに共通するJSONプロパティ
| JSONプロパティ | 説明 |
|---|---|
event-type |
イベントのタイプ。値: |
domain-name |
Oracle Traffic Directorインスタンスが構成されたドメインの名前。 |
instance-name |
Oracle Traffic Directorインスタンスの名前。 |
表15-4 request-limit-exceededからの通知に固有のJSONプロパティ
| JSONプロパティ | 説明 |
|---|---|
time-begin |
イベント通知間隔の始まりを示すタイムスタンプ。 |
time-end |
イベント通知間隔の終わりを示すタイムスタンプ。 |
virtual-server |
リクエスト制限を有効化した仮想サーバーの名前。 |
request-limit-rule |
この通知メッセージを生成したリクエスト制限ルールを特定します。 |
monitor |
監視されているリクエスト属性の値。 たとえば、-request-limitルールでmonitor=$ipが指定されている場合、JSONプロパティ request-limitルールでmonitorが指定されていない場合、このプロパティには |
total-queue-overflows |
キューのオーバーフローが原因で拒否されたリクエスト総数。 |
total-queue-timeouts |
キュー内での待機時のタイムアウトが原因で拒否されたリクエスト総数。 |
{
"$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
}
}
]
}
}