Watcher HTTP 输入编辑

使用 http 输入向 HTTP 端点提交请求,并在触发监视时将响应加载到监视执行上下文中。有关所有支持的属性,请参阅 HTTP 输入属性

使用 http 输入,您可以

  • 查询外部 Elasticsearch 集群。http 输入提供了一种向 Watcher 运行所在的集群以外的集群提交搜索请求的方法。当您运行专用 Watcher 集群或需要搜索运行不同 Elasticsearch 版本的集群时,这非常有用。
  • 查询除搜索 API 之外的 Elasticsearch API。例如,您可能希望从 节点统计信息集群运行状况集群状态 API 加载数据。
  • 查询外部 Web 服务。http 输入使您能够从任何公开 HTTP 端点的服务加载数据。这提供了 Elasticsearch 集群与其他系统之间的桥梁。

查询外部 Elasticsearch 集群编辑

要查询外部 Elasticsearch 集群,请指定集群的 hostport 属性,并将索引的搜索端点指定为 path。如果省略搜索主体,则请求将返回指定索引中的所有文档

"input" : {
  "http" : {
    "request" : {
      "host" : "example.com",
      "port" : 9200,
      "path" : "/idx/_search"
    }
  }
}

您可以使用完整的 Elasticsearch 查询 DSL 来执行更复杂的搜索。例如,以下 http 输入检索 category 字段中包含 event 的所有文档

"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 属性

"input" : {
  "http" : {
    "request" : {
      "host" : "host.domain",
      "port" : 9200,
      "path" : "/_cluster/stats",
      "params" : {
        "human" : "true" 
      }
    }
  }
}

启用此属性将以人类可读的格式返回响应中的 bytes 值。

调用外部 Web 服务编辑

您可以使用 http 输入从任何外部 Web 服务获取数据。http 输入支持基本身份验证。例如,以下输入提供用户名和密码来访问 myservice

"input" : {
  "http" : {
    "request" : {
      "host" : "host.domain",
      "port" : 9200,
      "path" : "/myservice",
      "auth" : {
        "basic" : {
          "username" : "user",
          "password" : "pass"
        }
      }
    }
  }
}

您还可以通过 params 属性传递特定于服务的 API 密钥和其他信息。例如,以下 http 输入从 OpenWeatherMap 服务加载阿姆斯特丹的当前天气预报

"input" : {
  "http" : {
    "request" : {
      "url" : "http://api.openweathermap.org/data/2.5/weather",
      "params" : {
        "lat" : "52.374031",
        "lon" : "4.88969",
        "appid" : "<your openweathermap appid>"
      }
    }
  }
}

使用基于令牌的身份验证编辑

您还可以使用 Bearer 令牌 而不是基本身份验证来调用 API。request.headers 对象包含 HTTP 标头

"input" : {
  "http" : {
    "request" : {
      "url": "https://api.example.com/v1/something",
      "headers": {
        "authorization" : "Bearer ABCD1234...",
        "content-type": "application/json"
        # other headers params..
        },
      "connection_timeout": "30s"
    }
  }
}

使用模板编辑

http 输入支持模板化。您可以在指定 pathbody、标头值和参数值时使用 模板

例如,以下代码段使用模板来指定要查询的索引,并将结果限制为在过去五分钟内添加的文档

"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 方案。有效值为:httphttps

request.host

-

要连接到的主机。

request.port

-

http 服务正在侦听的端口。

request.path

-

URL 路径。路径可以是静态文本,也可以包含 mustache 模板。URL 查询字符串参数必须通过 request.params 属性指定。

request.method

get

HTTP 方法。支持的值为:headgetpostputdelete

request.headers

-

HTTP 请求标头。标头值可以是静态文本,也可以包含 mustache 模板

request.params

-

URL 查询字符串参数。参数值可以是静态文本,也可以包含 mustache 模板

request.url

-

允许您通过指定真实的 URL(例如 https://www.example.org:1234/mypath?foo=bar)一次性设置 request.schemerequest.hostrequest.portrequest.params。不能与这四个参数中的任何一个组合使用。由于设置了这些参数,因此单独指定它们可能会覆盖它们。

request.auth.basic.username

-

HTTP 基本身份验证用户名

request.auth.basic.password

-

HTTP 基本身份验证密码

request.proxy.host

-

连接到主机时要使用的代理主机。

request.proxy.port

-

连接到主机时要使用的代理端口。

request.connection_timeout

10 秒

建立 http 连接的超时时间。如果在此时间内无法建立连接,则输入将超时并失败。

request.read_timeout

10 秒

从 http 连接读取数据的超时时间。如果在此时间内未收到任何响应,则输入将超时并失败。

request.body

-

HTTP 请求正文。正文可以是静态文本,也可以包含 mustache 模板

extract

-

要从输入响应中提取并用作负载的 JSON 键数组。在输入生成大量响应的情况下,可以使用它来过滤要用作负载的相关响应部分。

response_content_type

json

响应正文将包含的预期内容类型。支持的值为 jsonyamltext。如果格式为 text,则 extract 属性不能存在。请注意,这将覆盖 HTTP 响应中返回的标头。如果将其设置为 text,则响应正文将被分配并可通过负载的 _value 变量访问。

在指定 pathparamsheadersbody 值时,您可以在执行上下文中引用以下变量

名称 描述

ctx.watch_id

当前正在执行的监视的 ID。

ctx.execution_time

此监视开始执行的时间。

ctx.trigger.triggered_time

触发此监视的时间。

ctx.trigger.scheduled_time

此监视应该被触发的时间。

ctx.metadata.*

与监视关联的任何元数据。