Elasticsearch 输入插件
编辑Elasticsearch 输入插件
编辑- 插件版本: v4.20.4
- 发布日期: 2024-08-23
- 更新日志
其他版本,请参阅版本化的插件文档。
获取帮助
编辑有关插件的问题,请在讨论论坛中打开一个主题。对于错误或功能请求,请在Github中打开一个问题。有关 Elastic 支持的插件列表,请参阅Elastic 支持矩阵。
描述
编辑基于搜索查询结果从 Elasticsearch 集群读取数据。这对于重放测试日志、重新索引等非常有用。您可以使用 cron 语法(请参阅 schedule
设置)定期安排摄取,或者运行一次查询将数据加载到 Logstash 中。
示例
input { # Read all documents from Elasticsearch matching the given query elasticsearch { hosts => "localhost" query => '{ "query": { "match": { "statuscode": 200 } }, "sort": [ "_doc" ] }' } }
这将创建一个具有以下格式的 Elasticsearch 查询
curl 'https://127.0.0.1:9200/logstash-*/_search?&scroll=1m&size=1000' -d '{ "query": { "match": { "statuscode": 200 } }, "sort": [ "_doc" ] }'
调度
编辑此插件的输入可以按照特定的计划定期运行。此调度语法由rufus-scheduler提供支持。该语法类似于 cron,但有一些特定于 Rufus 的扩展(例如时区支持)。
示例
|
将在 1 月至 3 月的每天凌晨 5 点的每一分钟执行。 |
|
将在每天的每小时的第 0 分钟执行。 |
|
将在每天的早上 6:00 (UTC/GMT -5) 执行。 |
有关此语法的更多文档,请在此处找到这里。
授权
编辑对安全 Elasticsearch 集群进行授权需要索引级别的 read
权限和集群级别的 monitoring
权限。集群级别的 monitoring
权限是执行定期连接检查所必需的。
与 Elastic Common Schema (ECS) 的兼容性
编辑当禁用 ECS 兼容性时,docinfo_target
默认使用 "@metadata"
字段,启用 ECS 后,插件使用命名约定 "[@metadata][input][elasticsearch]"
作为放置文档信息的默认目标。
当启用 ECS 且未设置 target
时,插件会记录警告。
设置 target
选项以避免潜在的模式冲突。
Elasticsearch 输入配置选项
编辑此插件支持以下配置选项,以及稍后描述的通用选项和Elasticsearch 输入已弃用的配置选项。
设置 | 输入类型 | 必需 |
---|---|---|
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
字符串,以下之一 |
否 |
|
否 |
||
否 |
||
否 |
||
字符串,以下之一 |
否 |
|
否 |
||
否 |
||
否 |
||
路径列表 |
否 |
|
字符串列表 |
否 |
|
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
字符串,以下之一 |
否 |
|
否 |
||
否 |
||
否 |
||
否 |
另请参阅通用选项,获取所有输入插件支持的选项列表。
api_key
编辑- 值类型是 密码
- 此设置没有默认值。
使用 Elasticsearch API 密钥进行身份验证。请注意,此选项还需要启用 ssl_enabled
选项。
格式为 id:api_key
,其中 id
和 api_key
由 Elasticsearch Create API key API 返回。
ca_trusted_fingerprint
编辑- 值类型是 字符串,并且必须包含正好 64 个十六进制字符。
- 此设置没有默认值。
- 使用此选项需要 Logstash 8.3+
要信任的 SSL 证书颁发机构的 SHA-256 指纹,例如 Elasticsearch 集群的自动生成的自签名 CA。
cloud_auth
编辑- 值类型是 密码
- 此设置没有默认值。
云身份验证字符串("<用户名>:<密码>" 格式)是 user
/password
对的替代方案。
有关更多信息,请查看Logstash-to-Cloud 文档。
cloud_id
编辑- 值类型是 字符串
- 此设置没有默认值。
来自 Elastic Cloud Web 控制台的 Cloud ID。如果设置了此项,则不应使用 hosts
。
有关更多信息,请查看Logstash-to-Cloud 文档。
connect_timeout_seconds
编辑- 值类型是 数字
- 默认值为
10
建立与 Elasticsearch 的连接时要等待的最大时间(以秒为单位)。当 Elasticsearch 或中间代理服务器因请求过载而耗尽其连接池时,通常会发生连接超时。
docinfo
编辑- 值类型是 布尔值
- 默认值为
false
如果设置,则在事件中包括 Elasticsearch 文档信息,例如索引、类型和 ID。
关于元数据,需要注意的是,如果您正在提取文档以重新索引它们(或只是更新它们),则 elasticsearch 输出中的 action
选项需要知道如何处理这些事情。可以使用添加到元数据的字段动态分配它。
示例
input { elasticsearch { hosts => "es.production.mysite.org" index => "mydata-2018.09.*" query => '{ "query": { "query_string": { "query": "*" } } }' size => 500 scroll => "5m" docinfo => true docinfo_target => "[@metadata][doc]" } } output { elasticsearch { index => "copy-of-production.%{[@metadata][doc][_index]}" document_type => "%{[@metadata][doc][_type]}" document_id => "%{[@metadata][doc][_id]}" } }
如果设置,您可以在 add_field
通用选项中使用元数据信息。
示例
input { elasticsearch { docinfo => true docinfo_target => "[@metadata][doc]" add_field => { identifier => "%{[@metadata][doc][_index]}:%{[@metadata][doc][_type]}:%{[@metadata][doc][_id]}" } } }
docinfo_fields
编辑- 值类型是 数组
- 默认值为
["_index", "_type", "_id"]
如果通过启用 docinfo
选项请求文档元数据存储,则此选项列出要保存在当前事件中的元数据字段。有关更多信息,请参阅 Elasticsearch 文档中的元字段。
docinfo_target
编辑- 值类型是 字符串
-
默认值取决于是否启用了
ecs_compatibility
- 禁用 ECS 兼容性:
"@metadata"
- 启用 ECS 兼容性:
"[@metadata][input][elasticsearch]"
- 禁用 ECS 兼容性:
如果通过启用 docinfo
选项请求文档元数据存储,则此选项命名将元数据字段存储为子字段的字段。
ecs_compatibility
编辑- 值类型是 字符串
-
支持的值为
-
disabled
:在根级别添加 CSV 数据 -
v1
,v8
:符合 Elastic Common Schema 的行为
-
-
默认值取决于运行的 Logstash 版本
- 当 Logstash 提供
pipeline.ecs_compatibility
设置时,其值用作默认值 - 否则,默认值为
disabled
- 当 Logstash 提供
控制此插件与Elastic Common Schema (ECS)的兼容性。
hosts
编辑- 值类型是 数组
- 此设置没有默认值。
用于查询的一个或多个 Elasticsearch 主机列表。每个主机可以是 IP、HOST、IP:port 或 HOST:port。端口默认为 9200。
password
编辑- 值类型是 密码
- 此设置没有默认值。
与 user
选项中的用户名一起使用,以便在向 Elasticsearch 服务器进行身份验证时使用的密码。如果设置为空字符串,则将禁用身份验证。
query
编辑- 值类型是 字符串
- 默认值为
'{ "sort": [ "_doc" ] }'
要执行的查询。阅读Elasticsearch 查询 DSL 文档了解更多信息。
当 search_api
解析为 search_after
且查询未指定 sort
时,默认排序 '{ "sort": { "_shard_doc": "asc" } }'
将添加到查询中。请参考Elasticsearch search_after参数了解更多信息。
response_type
编辑- 值可以是以下之一:
hits
、aggregations
- 默认值为
hits
在处理查询响应时,将结果的哪一部分转换为 Logstash 事件。默认的 hits
将为每个返回的文档(即“hit”)生成一个事件。当设置为 aggregations
时,将生成一个 Logstash 事件,其中包含查询响应的 aggregations
对象的内容。在这种情况下,hits
对象将被忽略。无论此插件中设置的默认值还是用户定义的值如何,参数 size
将始终设置为 0。
request_timeout_seconds
编辑- 值类型是 数字
- 默认值为
60
单个请求发送到 Elasticsearch 的最大时间(以秒为单位)。当单个数据页非常大时,例如当它包含大型负载文档和/或 size
被指定为较大的值时,往往会发生请求超时。
retries
编辑- 值类型是 数字
- 默认值为
0
第一次失败后重新运行查询的次数。如果所有重试后查询仍然失败,则会记录错误消息。默认值为 0(不重试)。该值应大于或等于零。
部分失败(例如,所有切片子集中出现错误)可能导致整个查询被重试,这可能导致数据重复。避免这种情况需要 Logstash 将查询的整个结果集存储在内存中,这通常是不可能的。
schedule
编辑- 值类型是 字符串
- 此设置没有默认值。
定期运行语句的时间表,使用 Cron 格式,例如:“* * * * *”(每分钟执行一次查询,在整分钟时执行)
默认情况下没有时间表。如果没有给出时间表,则该语句只运行一次。
search_api
编辑- 值可以是以下任何一个:
auto
、search_after
、scroll
- 默认值为
auto
当设置为 auto
时,对于 Elasticsearch 版本 8.0.0
或更高版本,插件将使用 search_after
参数,否则将使用 scroll
API。
search_after
使用 时间点 和排序值进行搜索。如 query
参数中所述,查询至少需要一个 sort
字段。
scroll
使用 scroll API 进行搜索,不再推荐使用。
slices
编辑- 值类型是 数字
- 没有默认值。
- 合理的取值范围为 2 到 8 左右。
在某些情况下,通过使用 切片滚动 同时使用多个不同的查询切片,可以提高整体吞吐量,尤其是在管道花费大量时间等待 Elasticsearch 提供结果时。
如果设置了 slices
参数,则该参数会告诉插件将工作划分为多少个切片,并且将并行生成切片的事件,直到所有切片都完成滚动为止。
Elasticsearch 手册指出,当滚动查询使用的切片数量多于索引中的分片数量时,可能会对查询和 Elasticsearch 集群产生负面性能影响。
如果 slices
参数未设置,则插件将不会将切片指令注入到查询中。
ssl_certificate
编辑- 值类型为 路径
- 此设置没有默认值。
用于对客户端进行身份验证的 SSL 证书。此证书应为 OpenSSL 样式的 X.509 证书文件。
只有在设置 ssl_key
时才能使用此设置。
ssl_certificate_authorities
编辑- 值类型是 路径 列表
- 此设置没有默认值
用于验证服务器证书的 .cer
或 .pem
文件。
您不能同时使用此设置和 ssl_truststore_path
。
ssl_enabled
编辑- 值类型是 布尔值
- 此设置没有默认值。
启用与 Elasticsearch 集群的 SSL/TLS 安全通信。不指定此项将使用在 hosts
中列出的 URL 中指定的方案,或者从 cloud_id
中提取的方案。如果没有指定显式协议,则将使用纯 HTTP。
ssl_key
编辑- 值类型为 路径
- 此设置没有默认值。
与 ssl_certificate
对应的 OpenSSL 样式的 RSA 私钥。
只有在设置 ssl_certificate
时才能使用此设置。
ssl_supported_protocols
编辑- 值类型是 字符串
- 允许的值为:
'TLSv1.1'
、'TLSv1.2'
、'TLSv1.3'
- 默认值取决于所使用的 JDK。对于最新的 Logstash,默认值为
['TLSv1.2', 'TLSv1.3']
。'TLSv1.1'
被认为是不安全的,仅为旧应用程序提供。
在建立与 Elasticsearch 集群的连接时要使用的允许的 SSL/TLS 版本列表。
对于 Java 8,只有从 8u262 (AdoptOpenJDK) 开始才支持 'TLSv1.3'
,但需要您在 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_path
编辑- 值类型为 路径
- 此设置没有默认值。
用于验证服务器证书的信任存储。它可以是 .jks 或 .p12。
您不能同时使用此设置和 ssl_certificate_authorities
。
ssl_verification_mode
编辑- 值可以是以下任何一个:
full
、none
- 默认值为
full
定义如何验证 TLS 连接中另一方提供的证书
full
验证服务器证书是否具有在 not_before 和 not_after 日期内的颁发日期;链接到受信任的证书颁发机构 (CA),并且具有与证书内的名称匹配的主机名或 IP 地址。
none
不执行证书验证。
将证书验证设置为 none
会禁用 SSL/TLS 的许多安全优势,这非常危险。有关禁用证书验证的更多信息,请阅读 https://www.cs.utexas.edu/~shmat/shmat_ccs12.pdf
socket_timeout_seconds
编辑- 值类型是 数字
- 默认值为
60
在没有附加数据的情况下,等待 Elasticsearch 的不完整响应的最大时间(以秒为单位)。套接字超时通常发生在等待响应的第一个字节时,例如在执行特别复杂的查询时。
Elasticsearch 输入已弃用的配置选项
编辑此插件支持以下已弃用的配置。
已弃用的选项可能会在未来的版本中删除。
设置 | 输入类型 | 已替换为 |
---|---|---|
一个有效的文件系统路径 |
||
ssl
编辑在 4.17.0 版本中已弃用。
已替换为 ssl_enabled
- 值类型是 布尔值
- 默认值为
false
如果启用,则在与 Elasticsearch 服务器通信时将使用 SSL(即,将使用 HTTPS 而不是普通的 HTTP)。
ssl_certificate_verification
编辑在 4.17.0 版本中已弃用。
- 值类型是 布尔值
- 默认值为
true
用于验证服务器证书的选项。禁用此选项会严重损害安全性。当禁用证书验证时,此插件会隐式信任给定地址解析的计算机,而不验证其身份证明。在这种情况下,插件可能会将凭据传输到不可信的中间人或其他受损的基础设施,或从中处理数据。有关证书验证重要性的更多信息:https://www.cs.utexas.edu/~shmat/shmat_ccs12.pdf。
常用选项
编辑所有输入插件都支持这些配置选项
codec
编辑- 值类型为 codec
- 默认值为
"json"
用于输入数据的编解码器。输入编解码器是一种方便的方法,可以在数据进入输入之前对其进行解码,而无需在 Logstash 管道中使用单独的过滤器。