Http_poller 输入插件

编辑
  • 插件版本:v5.6.0
  • 发布日期:2024-06-19
  • 更新日志

有关其他版本,请参阅版本化的插件文档

获取帮助

编辑

如有关于插件的问题,请在Discuss论坛中开一个主题。如有错误或功能请求,请在Github中开一个 issue。有关 Elastic 支持的插件列表,请查阅Elastic 支持矩阵

描述

编辑

这个 Logstash 输入插件允许您调用一个 HTTP API,将它的输出解码为事件,然后将它们发送出去。这个插件背后的想法来自于读取 springboot 指标端点的需求,而不是配置 jmx 来监控我的 java 应用程序的内存/gc 等。

示例

编辑

从 URL 列表读取,并使用编解码器解码响应主体。配置应如下所示

input {
  http_poller {
    urls => {
      test1 => "https://127.0.0.1:9200"
      test2 => {
        # Supports all options supported by ruby's Manticore HTTP client
        method => get
        user => "AzureDiamond"
        password => "hunter2"
        url => "https://127.0.0.1:9200/_cluster/health"
        headers => {
          Accept => "application/json"
        }
     }
    }
    request_timeout => 60
    # Supports "cron", "every", "at" and "in" schedules by rufus scheduler
    schedule => { cron => "* * * * * UTC"}
    codec => "json"
    # A hash of request metadata info (timing, response headers, etc.) will be sent here
    metadata_target => "http_poller_metadata"
  }
}

output {
  stdout {
    codec => rubydebug
  }
}

将 HTTP poller 与自定义 CA 或自签名证书一起使用。

如果您有自签名证书,您需要将服务器的证书转换为有效的 .jks.p12 文件。一个简单的方法是运行以下单行命令,将占位符 MYURLMYPORT 替换为您的服务器 URL。

openssl s_client -showcerts -connect MYURL:MYPORT </dev/null 2>/dev/null|openssl x509 -outform PEM > downloaded_cert.pem; keytool -import -alias test -file downloaded_cert.pem -keystore downloaded_truststore.jks

上面的代码片段将创建两个文件 downloaded_cert.pemdownloaded_truststore.jks。在此过程中,系统将提示您为 jks 文件设置密码。要配置 logstash,请使用如下所示的配置。

 http_poller {
   urls => {
     myurl => "https://myhostname:1234"
   }
   truststore => "/path/to/downloaded_truststore.jks"
   truststore_password => "mypassword"
   schedule => { cron => "* * * * * UTC"}
 }

事件元数据和 Elastic Common Schema (ECS)

编辑

此输入将关于 HTTP 连接本身的元数据添加到每个事件。

当禁用 ECS 兼容性时,元数据被添加到各种非标准的顶级字段,这可能会在下游造成混淆和模式冲突。

使用 ECS 兼容模式,我们可以确保管道在事件的整个生命周期中保持对该元数据的访问,而不会污染顶级命名空间。

以下是 ECS 兼容模式如何影响输出。

禁用 ECS ECS v1 可用性 描述

[@metadata][host]

[@metadata][input][http_poller][request][host][hostname]

总是

主机名

[@metadata][code]

[@metadata][input][http_poller][response][status_code]

当服务器响应有效状态代码时

HTTP 响应代码

[@metadata][response_headers]

[@metadata][input][http_poller][response][headers]

当服务器响应标头时

响应的 HTTP 标头

[@metadata][response_message]

[@metadata][input][http_poller][response][status_message]

当服务器响应状态行时

HTTP 标头的状态行消息

[@metadata][runtime_seconds]

[@metadata][input][http_poller][response][elapsed_time_ns]

当服务器响应有效状态代码时

调用端点所花费的时间。ECS v1 以纳秒为单位显示。

[http_request_failure][runtime_seconds]

[event][duration]

当服务器抛出异常时

调用端点所花费的时间。ECS v1 以纳秒为单位显示。

[@metadata][times_retried]

[@metadata][input][http_poller][request][retry_count]

当 poller 成功调用服务器时

来自 http 客户端库的重试计数

[@metadata][name] / [http_request_failure][name]

[@metadata][input][http_poller][request][name]

总是

来自 poller 配置的 urls 的键

[@metadata][request] / [http_request_failure][request]

[@metadata][input][http_poller][request][original]

总是

来自 poller 配置的 urls 的整个对象

[http_request_failure][error]

[error][message]

当服务器抛出异常时

错误消息

[http_request_failure][backtrace]

[error][stack_trace]

当服务器抛出异常时

错误堆栈跟踪

--

[url][full]

当服务器抛出异常时

端点的 URL

--

[http][request][method]

当服务器抛出异常时

HTTP 请求方法

--

[host][hostname]

当服务器抛出异常时

主机名

Http_poller 输入配置选项

编辑

此插件支持以下配置选项,以及稍后描述的通用选项

另请参阅通用选项,获取所有输入插件支持的选项列表。

 

automatic_retries

编辑
  • 值类型为数字
  • 默认值为1

客户端应重试失败 URL 的次数。如果启用了 keepalive,我们强烈建议不要将此值设置为零。某些服务器会过早地错误地结束 keepalive,需要重试!注意:如果设置了 retry_non_idempotent,则只会重试 GET、HEAD、PUT、DELETE、OPTIONS 和 TRACE 请求。

cacert

编辑

在 5.5.0 中已弃用。

已替换为ssl_certificate_authorities

  • 值类型为路径
  • 此设置没有默认值。

如果您需要使用自定义 X.509 CA(.pem 证书),请在此处指定该证书的路径

client_cert

编辑

在 5.5.0 中已弃用。

已替换为ssl_certificate

  • 值类型为路径
  • 此设置没有默认值。

如果您想使用客户端证书(请注意,大多数人不需要此功能),请在此处设置 x509 证书的路径

client_key

编辑

在 5.5.0 中已弃用。

已替换为ssl_key

  • 值类型为路径
  • 此设置没有默认值。

如果您正在使用客户端证书,请在此处指定加密密钥的路径

connect_timeout

编辑
  • 值类型为数字
  • 默认值为10

等待建立连接的超时时间(以秒为单位)。默认为 10s

cookies

编辑

启用 cookie 支持。启用此功能后,客户端将像普通 Web 浏览器一样在请求之间保留 cookie。默认启用

ecs_compatibility

编辑
  • 值类型为字符串
  • 支持的值为

    • disabled:在根级别添加非结构化数据
    • v1:使用与 Elastic Common Schema 兼容的 errorurlhttp 字段

控制此插件与Elastic Common Schema (ECS) 的兼容性。有关详细信息,请参阅事件元数据和 Elastic Common Schema (ECS)

输出示例

示例输出:禁用 ECS

{
    "http_poller_data" => {
        "@version" => "1",
        "@timestamp" => 2021-01-01T00:43:22.388Z,
        "status" => "UP"
    },
    "@version" => "1",
    "@timestamp" => 2021-01-01T00:43:22.389Z,
}

示例输出:启用 ECS

{
    "http_poller_data" => {
        "status" => "UP",
        "@version" => "1",
        "event" => {
            "original" => "{\"status\":\"UP\"}"
        },
        "@timestamp" => 2021-01-01T00:40:59.558Z
    },
    "@version" => "1",
    "@timestamp" => 2021-01-01T00:40:59.559Z
}

示例错误输出:启用 ECS

{
    "@timestamp" => 2021-07-09T09:53:48.721Z,
    "@version" => "1",
    "host" => {
        "hostname" => "MacBook-Pro"
    },
    "http" => {
        "request" => {
            "method" => "get"
        }
    },
    "event" => {
        "duration" => 259019
    },
    "error" => {
        "stack_trace" => nil,
        "message" => "Connection refused (Connection refused)"
    },
    "url" => {
        "full" => "https://127.0.0.1:8080/actuator/health"
    },
    "tags" => [
        [0] "_http_request_failure"
    ]
}

follow_redirects

编辑

是否应跟随重定向?默认为 true

keepalive

编辑

启用此功能以启用 HTTP keepalive 支持。我们强烈建议将 automatic_retries 设置为至少 1,以修复与 broken keepalive 实现的交互。

keystore

编辑

在 5.5.0 中已弃用。

已替换为ssl_keystore_path

  • 值类型为路径
  • 此设置没有默认值。

如果您需要使用自定义密钥库 (.jks),请在此处指定。这不适用于 .pem 密钥!

keystore_password

编辑

在 5.5.0 中已弃用。

已替换为ssl_keystore_password

  • 值类型为密码
  • 此设置没有默认值。

在此处指定密钥库密码。请注意,使用 keytool 创建的大多数 .jks 文件都需要密码!

keystore_type

编辑

在 5.5.0 中已弃用。

已被 ssl_keystore_type 取代

在此指定密钥库类型。 可以是 JKSPKCS12。 默认值为 JKS

metadata_target

编辑
  • 值类型为字符串
  • 默认值是 "@metadata"

如果你想使用请求/响应元数据。将此值设置为你想要存储嵌套元数据哈希的字段名称。

password

编辑
  • 值类型为密码
  • 此设置没有默认值。

user 结合使用进行 HTTP 身份验证的密码。

pool_max

编辑
  • 值类型为数字
  • 默认值是 50

最大并发连接数。默认为 50

pool_max_per_route

编辑
  • 值类型为数字
  • 默认值是 25

到单个主机的最大并发连接数。默认为 25

proxy

编辑
  • 值类型为字符串
  • 此设置没有默认值。

如果你想使用 HTTP 代理。 这支持多种配置语法

  1. 代理主机,格式为:http://proxy.org:1234
  2. 代理主机,格式为:{host => "proxy.org", port => 80, scheme => 'http', user => 'username@host', password => 'password'}
  3. 代理主机,格式为:{url => 'http://proxy.org:1234', user => 'username@host', password => 'password'}

request_timeout

编辑
  • 值类型为数字
  • 默认值是 60

整个请求的超时时间(以秒为单位)。

retry_non_idempotent

编辑

如果启用了 automatic_retries,这将导致重试非幂等的 HTTP 动词(如 POST)。

schedule

编辑
  • 值类型是 hash
  • 此设置没有默认值。

定期从 URL 进行轮询的时间表。格式:包含 + 键:"cron" | "every" | "in" | "at" 的哈希 + 值:字符串 示例:a) { "every" ⇒ "1h" } b) { "cron" ⇒ "* * * * * UTC" } 有关不同计划选项和值字符串格式的详细信息,请参见:rufus/scheduler

socket_timeout

编辑
  • 值类型为数字
  • 默认值为10

等待套接字上数据的超时时间(以秒为单位)。默认为 10s

ssl_certificate

编辑
  • 值类型为路径
  • 此设置没有默认值。

用于验证客户端身份的 SSL 证书。 此证书应为 OpenSSL 样式的 X.509 证书文件。

仅当设置了 ssl_key 时,才能使用此设置。

ssl_certificate_authorities

编辑
  • 值类型是 path 的列表
  • 此设置没有默认值

用于验证服务器证书的 .cer 或 .pem CA 文件。

ssl_cipher_suites

编辑
  • 值类型是 string 的列表
  • 此设置没有默认值

要使用的密码套件列表,按优先级列出。 支持的密码套件取决于 Java 和协议版本。

ssl_enabled

编辑

启用 SSL/TLS 安全通信。 必须为 true,其他 ssl_ 选项才能生效。

ssl_key

编辑
  • 值类型为路径
  • 此设置没有默认值。

ssl_certificate 相对应的 OpenSSL 样式的 RSA 私钥。

仅当设置了 ssl_certificate 时,才能使用此设置。

ssl_keystore_password

编辑
  • 值类型为密码
  • 此设置没有默认值。

设置密钥库密码

ssl_keystore_path

编辑
  • 值类型为路径
  • 此设置没有默认值。

用于向服务器提供证书的密钥库。 可以是 .jks.p12

ssl_keystore_type

编辑
  • 值可以是:jkspkcs12
  • 如果未提供,则将从密钥库文件名推断该值。

密钥库文件的格式。必须为 jkspkcs12

ssl_supported_protocols

编辑
  • 值类型为字符串
  • 允许的值为:'TLSv1.1''TLSv1.2''TLSv1.3'
  • 默认值取决于所使用的 JDK。 使用最新的 Logstash,默认值为 ['TLSv1.2', 'TLSv1.3']'TLSv1.1' 被认为是不安全的,仅为旧版应用程序提供。

建立与 HTTP 端点的连接时要使用的允许的 SSL/TLS 版本列表。

对于 Java 8,'TLSv1.3' 仅在 8u262 (AdoptOpenJDK) 之后才支持,但要求你在 Logstash 中设置 LS_JAVA_OPTS="-Djdk.tls.client.protocols=TLSv1.3" 系统属性。

如果在任何最近的 JVM(例如与 Logstash 打包的 JVM)上配置插件以使用 'TLSv1.1',则默认情况下该协议处于禁用状态,并且需要通过更改 $JDK_HOME/conf/security/java.security 配置文件中的 jdk.tls.disabledAlgorithms 来手动启用。 也就是说,需要从列表中删除 TLSv1.1

ssl_truststore_password

编辑
  • 值类型为密码
  • 此设置没有默认值。

设置信任库密码

ssl_truststore_path

编辑
  • 值类型为路径
  • 此设置没有默认值。

用于验证服务器证书的信任库。可以是 .jks.p12

ssl_truststore_type

编辑
  • 值可以是:jkspkcs12
  • 如果未提供,则将从信任库文件名推断该值。

信任库文件的格式。必须为 jkspkcs12

ssl_verification_mode

编辑
  • 值类型为字符串
  • 支持的值为:fullnone
  • 默认值是 full

控制服务器证书的验证。full 选项验证所提供的证书是否由受信任的机构 (CA) 签名,并且服务器的主机名(或 IP 地址)与证书中标识的名称匹配。

none 设置不执行服务器证书的验证。 此模式禁用了 SSL/TLS 的许多安全优势,仅应在谨慎考虑后使用。 它主要用作尝试解决 TLS 错误时的临时诊断机制。强烈建议不要在生产环境中使用 none

target

编辑
  • 值类型为字符串
  • 此设置没有默认值。

定义用于放置接收数据的目标字段。 如果省略此设置,数据将存储在事件的根(顶层)位置。

启用 ECS 后,在编解码器中设置 target(如果编解码器具有 target 选项)。示例:codec => json { target => "TARGET_FIELD_NAME" }

truststore

编辑

在 5.5.0 中已弃用。

已被 ssl_truststore_path 取代

  • 值类型为路径
  • 此设置没有默认值。

如果你需要使用自定义信任库 (.jks),请在此处指定。 这不适用于 .pem 证书!

truststore_password

编辑

在 5.5.0 中已弃用。

已被 ssl_truststore_password 取代

  • 值类型为密码
  • 此设置没有默认值。

在此处指定信任库密码。请注意,大多数使用 keytool 创建的 .jks 文件都需要密码!

truststore_type

编辑

在 5.5.0 中已弃用。

已被 ssl_truststore_type 取代

在此处指定信任库类型。可以是 JKSPKCS12。默认值为 JKS

urls

编辑
  • 这是一个必需设置。
  • 值类型是 hash
  • 此设置没有默认值。

此格式的 URL 哈希:"name" => "url"。名称和 URL 将在输出事件中传递。

URL 中的值可以是

  • 字符串 URL(将作为 HTTP GET 发出)。
  • 包含 Manticore 后端提供的许多有用键的子哈希

    • url:字符串 URL
    • method:(可选)要使用的 HTTP 方法(默认为 GET)
    • user:(可选)HTTP 基本身份验证用户。该用户必须在 Manticore 的 auth 子哈希下,但此插件也接受这种方式。
    • password:(可选)HTTP 基本身份验证密码。该密码必须在 Manticore 的 auth 子哈希下,但此插件也接受这种方式。
    • headers:一个包含键值对标头的哈希。
    • body:一个字符串(仅在 POST 和 PUT 请求上支持)
    • 可能在 Manticore 文档中提到的其他选项。请注意,如果更换后端,上面未明确记录的 Manticore 选项未经充分测试,因此可能会以意外的方式中断。

备注

  • urls 中指定的密码容易在插件日志输出中暴露。该插件不会将它们声明为密码,因此不会像我们在其他地方那样将它们包装在减少泄漏的包装器中。
  • 我们不保证像 Manticore 的 follow_redirects 这样的布尔类型选项能被正确支持。字符串 truefalse 可能会被传递,而在 Ruby 中,任何字符串都被认为是“真值”。
  • 我们对这个插件的实现使得无法将 auth[:eager] 指定为 true 以外的任何值。

user

编辑
  • 值类型为字符串
  • 此设置没有默认值。

用于所有请求的 HTTP 身份验证的用户名。请注意,您也可以为每个 URL 设置此项。如果设置此项,您还必须设置 password 选项。

validate_after_inactivity

编辑
  • 值类型为数字
  • 默认值是 200

在检查是否需要保持连接的请求之前,等待多长时间来检查过时的连接。如果您经常遇到连接错误,请考虑将此值设置得低于默认值,甚至设置为 0。

此客户端基于 Apache Commons 的 HTTP 实现。以下是 Apache Commons 文档 对此选项的描述:“定义不活动的时间(以毫秒为单位),超过此时间后,必须重新验证持久连接,然后才能将其租借给使用者。传递给此方法的非正值将禁用连接验证。此检查有助于检测在池中保持不活动状态时已过时(半关闭)的连接。”

通用选项

编辑

所有输入插件都支持以下配置选项

设置 输入类型 必需

add_field

哈希

codec

codec

enable_metric

布尔值

id

字符串

tags

array

type

字符串

add_field

编辑
  • 值类型是 hash
  • 默认值是 {}

向事件添加一个字段

codec

编辑
  • 值类型是 codec
  • 默认值是 "json"

用于输入数据的编解码器。输入编解码器是一种方便的方法,可以在数据进入输入之前对其进行解码,而无需在 Logstash 管道中单独的过滤器。

enable_metric

编辑
  • 值类型是 boolean
  • 默认值为true

禁用或启用此特定插件实例的指标日志记录,默认情况下我们会记录所有可以记录的指标,但是您可以禁用特定插件的指标收集。

  • 值类型是 string
  • 此设置没有默认值。

向插件配置添加唯一的 ID。如果未指定 ID,Logstash 将生成一个。强烈建议您在配置中设置此 ID。当您有两个或多个相同类型的插件时,这尤其有用,例如,如果您有 2 个 http_poller 输入。在这种情况下添加命名 ID 将在使用监控 API 时帮助监控 Logstash。

input {
  http_poller {
    id => "my_plugin_id"
  }
}

id 字段中的变量替换仅支持环境变量,不支持使用来自密钥存储的值。

tags

编辑
  • 值类型是 array
  • 此设置没有默认值。

向您的事件添加任意数量的标签。

这有助于稍后的处理。

type

编辑
  • 值类型是 string
  • 此设置没有默认值。

向此输入处理的所有事件添加 type 字段。

类型主要用于过滤器激活。

类型存储为事件本身的一部分,因此您也可以使用类型在 Kibana 中搜索它。

如果您尝试在已具有类型的事件上设置类型(例如,当您将事件从 shipper 发送到 indexer 时),则新的输入将不会覆盖现有的类型。在 shipper 设置的类型在事件的整个生命周期中都保留在该事件中,即使发送到另一个 Logstash 服务器也是如此。