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 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

10s

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

request.read_timeout

10s

从 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.*

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