Watcher HTTP 输入

编辑

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

使用 http 输入,您可以:

  • 查询外部 Elasticsearch 集群。http 输入提供了一种向运行 Watcher 的集群之外的集群提交搜索请求的方法。当您运行专用的 Watcher 集群或者需要搜索运行不同 Elasticsearch 版本的集群时,这非常有用。
  • 查询 Elasticsearch API 而不是搜索 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 token 而不是基本身份验证来调用 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.*

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