Watcher HTTP入力
`````http`````入力を使用すると、次のことができます:
- 外部Elasticsearchクラスターをクエリします。`````http`````入力は、Watcherが実行されているクラスター以外のクラスターに検索リクエストを送信する方法を提供します。これは、専用のWatcherクラスターを実行している場合や、異なるElasticsearchバージョンを実行しているクラスターを検索する必要がある場合に便利です。
- 検索API以外のElasticsearch APIをクエリします。たとえば、[ノード統計](/read/elasticsearch-8-15/b347631483fdb07e.md)、[クラスターの健康](/read/elasticsearch-8-15/f5a22e73b1d30cf1.md)、または[クラスターの状態](/read/elasticsearch-8-15/e10698792eb0bc6d.md) APIからデータをロードしたい場合があります。
- 外部Webサービスをクエリします。`````http`````入力を使用すると、HTTPエンドポイントを公開している任意のサービスからデータをロードできます。これにより、Elasticsearchクラスターと他のシステムとの間に橋が架かります。
## 外部Elasticsearchクラスターのクエリ
外部Elasticsearchクラスターをクエリするには、クラスターの`````host`````および`````port`````属性と、インデックスの検索エンドポイントを`````path`````として指定します。検索ボディを省略すると、リクエストは指定されたインデックス内のすべてのドキュメントを返します:
#### Js
``````js
"input" : {
"http" : {
"request" : {
"host" : "example.com",
"port" : 9200,
"path" : "/idx/_search"
}
}
}
`
ElasticsearchのQuery DSLを使用して、より高度な検索を実行できます。たとえば、次のhttp
入力は、event
をcategory
フィールドに含むすべてのドキュメントを取得します:
Js
"input" : {
"http" : {
"request" : {
"host" : "host.domain",
"port" : 9200,
"path" : "/idx/_search",
"body" : "{\"query\" : { \"match\" : { \"category\" : \"event\"}}}"
}
}
}
Elasticsearch APIの呼び出し
他のElasticsearch APIからデータをロードするには、APIエンドポイントをpath
属性として指定します。params
属性を使用して、クエリ文字列パラメータを指定します。たとえば、次のhttp
入力は、クラスター統計 APIを呼び出し、human
属性を有効にします:
Js
"input" : {
"http" : {
"request" : {
"host" : "host.domain",
"port" : 9200,
"path" : "/_cluster/stats",
"params" : {
"human" : "true"
}
}
}
}
この属性を有効にすると、応答内のbytes 値が人間が読みやすい形式で返されます。 |
外部Webサービスの呼び出し
#### Js
``````js
"input" : {
"http" : {
"request" : {
"host" : "host.domain",
"port" : 9200,
"path" : "/myservice",
"auth" : {
"basic" : {
"username" : "user",
"password" : "pass"
}
}
}
}
}
`
サービス固有のAPIキーやその他の情報をparams
属性を通じて渡すこともできます。たとえば、次のhttp
入力は、OpenWeatherMapサービスからアムステルダムの現在の天気予報をロードします:
Js
"input" : {
"http" : {
"request" : {
"url" : "http://api.openweathermap.org/data/2.5/weather",
"params" : {
"lat" : "52.374031",
"lon" : "4.88969",
"appid" : "<your openweathermap appid>"
}
}
}
}
トークンベースの認証の使用
基本認証の代わりにBearer token
を使用してAPIを呼び出すこともできます。request.headers
オブジェクトにはHTTPヘッダーが含まれています:
Js
"input" : {
"http" : {
"request" : {
"url": "https://api.example.com/v1/something",
"headers": {
"authorization" : "Bearer ABCD1234...",
"content-type": "application/json"
# other headers params..
},
"connection_timeout": "30s"
}
}
}
テンプレートの使用
たとえば、次のスニペットは、クエリするインデックスを指定し、結果を過去5分以内に追加されたドキュメントに制限するためにテンプレートを使用します:
#### Js
``````js
"input" : {
"http" : {
"request" : {
"host" : "host.domain",
"port" : 9200,
"path" : "/{{ctx.watch_id}}/_search",
"body" : "{\"query\" : {\"range\": {\"@timestamp\" : {\"from\": \"{{ctx.trigger.triggered_time}}||-5m\",\"to\": \"{{ctx.trigger.triggered_time}}\"}}}}"
}
}
}
`
HTTP応答へのアクセス
応答ボディがJSONまたはYAML形式でフォーマットされている場合、それは解析され、実行コンテキストにロードされます。応答ボディがJSONまたはYAML形式でない場合、それはペイロードの_value
フィールドにロードされます。
条件、変換、およびアクションは、実行コンテキストを通じて応答データにアクセスします。たとえば、応答にmessage
オブジェクトが含まれている場合、ctx.payload.message
を使用してメッセージデータにアクセスできます。
さらに、応答のすべてのヘッダーはctx.payload._headers
フィールドを使用してアクセスでき、ctx.payload._status_code
を使用して応答のHTTPステータスコードにもアクセスできます。
HTTP入力属性
名前 | 必須 | デフォルト | 説明 |
---|---|---|---|
request.scheme |
いいえ | http | URLスキーム。有効な値は:http またはhttps です。 |
request.host |
はい | - | 接続するホスト。 |
request.port |
はい | - | httpサービスがリッスンしているポート。 |
request.path |
いいえ | - | URLパス。パスは静的テキストであるか、mustache |
テンプレートを含むことができます。URLクエリ文字列パラメータはrequest.params
属性を介して指定する必要があります。 |
| request.method
| いいえ | get | HTTPメソッド。サポートされている値は:head
、get
、post
、put
およびdelete
です。 |
| request.headers
| いいえ | - | HTTPリクエストヘッダー。ヘッダー値は静的テキストであるか、mustache
テンプレートを含むことができます。 |
| request.params
| いいえ | - | URLクエリ文字列パラメータ。パラメータ値は静的テキストであるか、mustache
テンプレートを含むことができます。 |
| request.url
| いいえ | - | request.scheme
、request.host
、request.port
およびrequest.params
を指定することで、実際のURLを指定して一度に設定できます。たとえば、https://www.example.org:1234/mypath?foo=bar
のように。これらの4つのパラメータのいずれかと組み合わせることはできません。これらのパラメータが設定されると、個別に指定すると上書きされる可能性があります。 |
| request.auth.basic.username
| いいえ | - | HTTP基本認証のユーザー名 |
| request.auth.basic.password
| いいえ | - | HTTP基本認証のパスワード |
| request.proxy.host
| いいえ | - | ホストに接続する際に使用するプロキシホスト。 |
| request.proxy.port
| いいえ | - | ホストに接続する際に使用するプロキシポート。 |
| request.connection_timeout
| いいえ | 10s | http接続のセットアップのタイムアウト。この時間内に接続を設定できなかった場合、入力はタイムアウトし、失敗します。 |
| request.read_timeout
| いいえ | 10s | http接続からデータを読み取る際のタイムアウト。この時間内に応答が受信されなかった場合、入力はタイムアウトし、失敗します。 |
| request.body
| いいえ | - | HTTPリクエストボディ。ボディは静的テキストであるか、mustache
テンプレートを含むことができます。 |
| extract
| いいえ | - | 入力応答から抽出し、ペイロードとして使用するJSONキーの配列。入力が大きな応答を生成する場合、これを使用して応答の関連部分をフィルタリングし、ペイロードとして使用できます。 |
| response_content_type
| いいえ | json | 応答ボディが含むことが期待されるコンテンツタイプ。サポートされている値はjson
、yaml
およびtext
です。形式がtext
の場合、extract
属性は存在できません。
この設定は、HTTP応答で返されるヘッダーを上書きします。これがtext
に設定されている場合、応答のボディはペイロードの_value
変数に割り当てられ、アクセス可能になります。 |
path
、params
、headers
およびbody
の値を指定する際に、実行コンテキスト内で次の変数を参照できます:
名前 | 説明 |
---|---|
ctx.watch_id |
現在実行中のウォッチのID。 |
ctx.execution_time |
このウォッチの実行が開始された時間。 |
ctx.trigger.triggered_time |
このウォッチがトリガーされた時間。 |
ctx.trigger.scheduled_time |
このウォッチがトリガーされる予定だった時間。 |
ctx.metadata.* |
ウォッチに関連するメタデータ。 |