Http_poller 输入插件
编辑Http_poller 输入插件编辑
- 插件版本:v5.5.1
- 发布日期:2023-11-13
- 变更日志
有关其他版本,请参阅 版本化插件文档。
获取帮助编辑
如果您对插件有任何疑问,请在 Discuss 论坛中发起主题讨论。对于错误或功能请求,请在 Github 中提交问题。有关 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 轮询器和自定义 CA 或自签名证书。
如果您有自签名证书,则需要将服务器的证书转换为有效的# .jks
或 .p12
文件。一个简单的方法是运行以下单行命令,将服务器的 URL 替换为占位符 MYURL
和 MYPORT
。
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.pem
和 downloaded_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] |
当轮询器成功调用服务器时 |
来自 http 客户端库的重试次数 |
[@metadata][name] / [http_request_failure][name] |
[@metadata][input][http_poller][request][name] |
始终 |
轮询器配置中 |
[@metadata][request] / [http_request_failure][request] |
[@metadata][input][http_poller][request][original] |
始终 |
轮询器配置中 |
[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 请求。
client_cert
编辑
在 5.5.0 中已弃用。
已替换为 ssl_certificate
- 值类型为 路径
- 此设置没有默认值。
如果您想使用客户端证书(注意,大多数人都不想使用),请在此处设置 x509 证书的路径。
ecs_compatibility
编辑
- 值类型为 字符串
-
支持的值为
-
disabled
:在根级别添加非结构化数据 -
v1
:使用与 Elastic Common Schema 兼容的error
、url
和http
字段
-
控制此插件与 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" ] }
keepalive
编辑
- 值类型为 布尔值
- 默认值为
true
启用此选项以启用 HTTP keepalive 支持。我们强烈建议将 automatic_retries
设置为至少 1,以修复与损坏的 keepalive 实现的交互。
keystore
编辑
在 5.5.0 中已弃用。
已替换为 ssl_keystore_path
- 值类型为 路径
- 此设置没有默认值。
如果您需要使用自定义密钥库(.jks
),请在此处指定该密钥库。这与 .pem 密钥不兼容!
keystore_password
编辑
在 5.5.0 中已弃用。
- 值类型为 password
- 此设置没有默认值。
在此指定密钥库密码。请注意,大多数使用 keytool 创建的 .jks 文件都需要密码!
keystore_type
edit
在 5.5.0 中已弃用。
已替换为 ssl_keystore_type
- 值类型为 字符串
- 默认值为
"JKS"
在此指定密钥库类型。可以是 JKS
或 PKCS12
。默认值为 JKS
proxy
edit
- 值类型为 字符串
- 此设置没有默认值。
如果您想使用 HTTP 代理。这支持多种配置语法
- 代理主机格式:
http://proxy.org:1234
- 代理主机格式:
{host => "proxy.org", port => 80, scheme => 'http', user => 'username@host', password => 'password'}
- 代理主机格式:
{url => 'http://proxy.org:1234', user => 'username@host', password => 'password'}
schedule
edit
- 值类型为 hash
- 此设置没有默认值。
定期从 URL 轮询的计划格式:一个哈希,其中 + 键: "cron" | "every" | "in" | "at" + 值: 字符串 例子: a) { "every" ⇒ "1h" } b) { "cron" ⇒ "* * * * * UTC" } 请参阅: rufus/scheduler 以了解有关不同计划选项和值字符串格式的详细信息
ssl_certificate
edit
- 值类型为 路径
- 此设置没有默认值。
用于对客户端进行身份验证的 SSL 证书。此证书应为 OpenSSL 风格的 X.509 证书文件。
仅当设置了 ssl_key
时才能使用此设置。
ssl_key
edit
- 值类型为 路径
- 此设置没有默认值。
与 ssl_certificate
相对应的 OpenSSL 风格的 RSA 私钥。
仅当设置了 ssl_certificate
时才能使用此设置。
ssl_supported_protocols
edit
- 值类型为 字符串
- 允许的值为:
'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_verification_mode
edit
- 值类型为 字符串
- 支持的值为:
full
、none
- 默认值为
full
控制服务器证书的验证。 full
选项验证提供的证书是否由受信任的颁发机构 (CA) 签署,以及服务器的主机名(或 IP 地址)是否与证书中标识的名称匹配。
none
设置不执行服务器证书的任何验证。此模式会禁用 SSL/TLS 的许多安全优势,应谨慎考虑后才使用。它主要用作尝试解决 TLS 错误时的临时诊断机制。强烈建议不要在生产环境中使用 none
。
target
edit
- 值类型为 字符串
- 此设置没有默认值。
定义用于放置接收数据的目标字段。如果省略此设置,则数据将存储在事件的根(顶层)。
当启用 ECS 时,在编解码器中设置 target
(如果编解码器具有 target
选项)。例如:codec => json { target => "TARGET_FIELD_NAME" }
truststore
edit
在 5.5.0 中已弃用。
已替换为 ssl_truststore_path
- 值类型为 路径
- 此设置没有默认值。
如果您需要使用自定义信任库 (.jks
),请在此指定。这与 .pem 证书不兼容!
truststore_password
edit
在 5.5.0 中已弃用。
- 值类型为 password
- 此设置没有默认值。
在此指定信任库密码。请注意,大多数使用 keytool 创建的 .jks 文件都需要密码!
truststore_type
edit
在 5.5.0 中已弃用。
已由 ssl_truststore_type
替换。
- 值类型为 字符串
- 默认值为
"JKS"
在此指定信任库类型。可以选择 JKS
或 PKCS12
。默认值为 JKS
。
urls
edit
- 这是必需设置。
- 值类型为 hash
- 此设置没有默认值。
以以下格式表示的 URL 哈希:"name" => "url"
。名称和 URL 将传递到输出事件中。
urls 中的值可以是
- 字符串 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
这样的布尔类型选项能够正确支持。字符串true
或false
可能会被传递,而在 ruby 中,任何字符串都是“真值”。 - 我们对该插件的实现排除了将 auth[:eager] 指定为除 true 之外的任何其他值的能力。
validate_after_inactivity
edit
- 值类型为 数字
- 默认值为
200
在检查过时连接以确定是否需要保持活动请求之前等待的时间。如果您经常遇到连接错误,请考虑将此值设置为低于默认值,可能设置为 0。
此客户端基于 Apache Commons 的 HTTP 实现。以下是 Apache Commons 文档 对此选项的描述:“定义在将持久连接租赁给使用者之前必须重新验证的非活动时间(以毫秒为单位)。传递给此方法的非正值将禁用连接验证。此检查有助于检测在池中保持非活动状态时已变得过时的(半关闭)连接。”
通用选项edit
以下配置选项受所有输入插件支持