Watcher HTTP入力

  1. `````http`````入力を使用すると、次のことができます:
  2. - 外部Elasticsearchクラスターをクエリします。`````http`````入力は、Watcherが実行されているクラスター以外のクラスターに検索リクエストを送信する方法を提供します。これは、専用のWatcherクラスターを実行している場合や、異なるElasticsearchバージョンを実行しているクラスターを検索する必要がある場合に便利です。
  3. - 検索API以外のElasticsearch APIをクエリします。たとえば、[ノード統計](/read/elasticsearch-8-15/b347631483fdb07e.md)、[クラスターの健康](/read/elasticsearch-8-15/f5a22e73b1d30cf1.md)、または[クラスターの状態](/read/elasticsearch-8-15/e10698792eb0bc6d.md) APIからデータをロードしたい場合があります。
  4. - 外部Webサービスをクエリします。`````http`````入力を使用すると、HTTPエンドポイントを公開している任意のサービスからデータをロードできます。これにより、Elasticsearchクラスターと他のシステムとの間に橋が架かります。
  5. ## 外部Elasticsearchクラスターのクエリ
  6. 外部Elasticsearchクラスターをクエリするには、クラスターの`````host`````および`````port`````属性と、インデックスの検索エンドポイントを`````path`````として指定します。検索ボディを省略すると、リクエストは指定されたインデックス内のすべてのドキュメントを返します:
  7. #### Js
  8. ``````js
  9. "input" : {
  10. "http" : {
  11. "request" : {
  12. "host" : "example.com",
  13. "port" : 9200,
  14. "path" : "/idx/_search"
  15. }
  16. }
  17. }
  18. `

ElasticsearchのQuery DSLを使用して、より高度な検索を実行できます。たとえば、次のhttp入力は、eventcategoryフィールドに含むすべてのドキュメントを取得します:

Js

  1. "input" : {
  2. "http" : {
  3. "request" : {
  4. "host" : "host.domain",
  5. "port" : 9200,
  6. "path" : "/idx/_search",
  7. "body" : "{\"query\" : { \"match\" : { \"category\" : \"event\"}}}"
  8. }
  9. }
  10. }

Elasticsearch APIの呼び出し

他のElasticsearch APIからデータをロードするには、APIエンドポイントをpath属性として指定します。params属性を使用して、クエリ文字列パラメータを指定します。たとえば、次のhttp入力は、クラスター統計 APIを呼び出し、human属性を有効にします:

Js

  1. "input" : {
  2. "http" : {
  3. "request" : {
  4. "host" : "host.domain",
  5. "port" : 9200,
  6. "path" : "/_cluster/stats",
  7. "params" : {
  8. "human" : "true"
  9. }
  10. }
  11. }
  12. }
この属性を有効にすると、応答内のbytes値が人間が読みやすい形式で返されます。

外部Webサービスの呼び出し

  1. #### Js
  2. ``````js
  3. "input" : {
  4. "http" : {
  5. "request" : {
  6. "host" : "host.domain",
  7. "port" : 9200,
  8. "path" : "/myservice",
  9. "auth" : {
  10. "basic" : {
  11. "username" : "user",
  12. "password" : "pass"
  13. }
  14. }
  15. }
  16. }
  17. }
  18. `

サービス固有のAPIキーやその他の情報をparams属性を通じて渡すこともできます。たとえば、次のhttp入力は、OpenWeatherMapサービスからアムステルダムの現在の天気予報をロードします:

Js

  1. "input" : {
  2. "http" : {
  3. "request" : {
  4. "url" : "http://api.openweathermap.org/data/2.5/weather",
  5. "params" : {
  6. "lat" : "52.374031",
  7. "lon" : "4.88969",
  8. "appid" : "<your openweathermap appid>"
  9. }
  10. }
  11. }
  12. }

トークンベースの認証の使用

基本認証の代わりにBearer tokenを使用してAPIを呼び出すこともできます。request.headersオブジェクトにはHTTPヘッダーが含まれています:

Js

  1. "input" : {
  2. "http" : {
  3. "request" : {
  4. "url": "https://api.example.com/v1/something",
  5. "headers": {
  6. "authorization" : "Bearer ABCD1234...",
  7. "content-type": "application/json"
  8. # other headers params..
  9. },
  10. "connection_timeout": "30s"
  11. }
  12. }
  13. }

テンプレートの使用

  1. たとえば、次のスニペットは、クエリするインデックスを指定し、結果を過去5分以内に追加されたドキュメントに制限するためにテンプレートを使用します:
  2. #### Js
  3. ``````js
  4. "input" : {
  5. "http" : {
  6. "request" : {
  7. "host" : "host.domain",
  8. "port" : 9200,
  9. "path" : "/{{ctx.watch_id}}/_search",
  10. "body" : "{\"query\" : {\"range\": {\"@timestamp\" : {\"from\": \"{{ctx.trigger.triggered_time}}||-5m\",\"to\": \"{{ctx.trigger.triggered_time}}\"}}}}"
  11. }
  12. }
  13. }
  14. `

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メソッド。サポートされている値は:headgetpostputおよびdeleteです。 |
| request.headers | いいえ | - | HTTPリクエストヘッダー。ヘッダー値は静的テキストであるか、mustache テンプレートを含むことができます。 |
| request.params | いいえ | - | URLクエリ文字列パラメータ。パラメータ値は静的テキストであるか、mustache テンプレートを含むことができます。 |
| request.url | いいえ | - | request.schemerequest.hostrequest.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 | 応答ボディが含むことが期待されるコンテンツタイプ。サポートされている値はjsonyamlおよびtextです。形式がtextの場合、extract属性は存在できません。
この設定は、HTTP応答で返されるヘッダーを上書きします。これがtextに設定されている場合、応答のボディはペイロードの_value変数に割り当てられ、アクセス可能になります。 |

pathparamsheadersおよびbodyの値を指定する際に、実行コンテキスト内で次の変数を参照できます:

名前 説明
ctx.watch_id 現在実行中のウォッチのID。
ctx.execution_time このウォッチの実行が開始された時間。
ctx.trigger.triggered_time このウォッチがトリガーされた時間。
ctx.trigger.scheduled_time このウォッチがトリガーされる予定だった時間。
ctx.metadata.* ウォッチに関連するメタデータ。