Elasticsearch 输出插件
编辑Elasticsearch 输出插件
编辑- 插件版本:v11.22.9
- 发布日期:2024-09-13
- 更新日志
对于其他版本,请参阅版本化插件文档。
获取帮助
编辑有关插件的问题,请在Discuss论坛中打开一个主题。对于错误或功能请求,请在Github中打开一个问题。有关 Elastic 支持的插件列表,请查阅Elastic 支持矩阵。
描述
编辑Elasticsearch 为所有类型的数据提供近实时的搜索和分析。Elasticsearch 输出插件可以将时间序列数据集(例如日志、事件和指标)和非时间序列数据存储在 Elasticsearch 中。
您可以在网站登陆页面或Elasticsearch 文档中了解有关 Elasticsearch 的更多信息。
兼容性说明
当连接到 Elasticsearch 7.x 时,此插件的现代版本在插入文档时不会使用文档类型,除非用户显式设置了document_type
。
如果您使用的是早期版本的 Logstash 并希望连接到 Elasticsearch 7.x,请首先将 Logstash 升级到 6.8 版本,以确保它获取 Elasticsearch 索引模板的更改。
如果您正在使用自定义的template
,请确保您的模板在使用 _doc 文档类型之前连接到 Elasticsearch 7.x。
Logstash 到 Elasticsearch Serverless
编辑您可以使用此插件将您的 Logstash 数据发送到 Elasticsearch Serverless。Elasticsearch Serverless 和自管理 Elasticsearch 之间需要注意的一些区别
- 使用API 密钥从 Logstash 访问 Elastic Cloud Serverless。您的Elasticsearch 输出插件配置中的任何基于用户的安全设置都将被忽略,并可能导致错误。
- Elasticsearch Serverless 使用数据流和数据生命周期管理 (DLM),而不是索引生命周期管理 (ILM)。您的Elasticsearch 输出插件配置中的任何 ILM 设置都将被忽略,并可能导致错误。
- Logstash 监控可通过 Elastic Cloud Serverless 上的Elastic 可观察性中的Logstash 集成获得。
有关从 Logstash 发送数据到 Elasticsearch Serverless 的更多信息,请查看Elasticsearch Serverless 文档。
Elastic Cloud 上的托管 Elasticsearch 服务
编辑您可以在自己的硬件上运行 Elasticsearch,或者使用我们在 AWS、GCP 和 Azure 上提供的托管 Elasticsearch 服务。免费试用 Elasticsearch 服务。
与 Elastic 通用架构 (ECS) 的兼容性
编辑此插件会将事件持久化到 Elasticsearch 中,其形状由您的管道产生,并且不能用于将事件结构重塑为符合 ECS 的形状。要生成完全符合 ECS 的事件,您需要在整个管道定义中填充 ECS 定义的字段。
但是,它管理的 Elasticsearch 索引模板可以通过设置ecs_compatibility
来配置为与 ECS 兼容。通过使用与 ECS 兼容的模板,我们可以确保 Elasticsearch 准备好以与 ECS 兼容的方式创建和索引字段,并且会正确拒绝具有冲突且无法强制转换的字段的事件。
数据流
编辑Elasticsearch 输出插件可以将时间序列数据集(例如日志、事件和指标)和非时间序列数据存储在 Elasticsearch 中。
使用数据流选项将时间序列数据集(例如日志、指标和事件)索引到 Elasticsearch 和 Elasticsearch Serverless
必须启用ECS 兼容性(设置为v1
或v8
)才能使数据流正常工作。
数据流配置示例
编辑示例:基本默认配置
output { elasticsearch { hosts => "hostname" data_stream => "true" } }
此示例显示了处理数据流的最小设置。具有data_stream.*`
字段的事件将路由到相应的数据流。如果缺少这些字段,路由将默认为logs-generic-default
。
示例:自定义数据流名称
output { elasticsearch { hosts => "hostname" data_stream => "true" data_stream_type => "metrics" data_stream_dataset => "foo" data_stream_namespace => "bar" } }
写入不同索引:最佳实践
编辑当ilm_enabled
为true
且使用ilm_rollover_alias
时,不能使用动态变量替换。
如果您将事件发送到同一个 Elasticsearch 集群,但目标是不同的索引,您可以
- 使用不同的 Elasticsearch 输出,每个输出的
index
参数值不同 - 使用一个 Elasticsearch 输出,并对
index
参数使用动态变量替换
每个 Elasticsearch 输出都是连接到集群的新客户端
- 它必须初始化客户端并连接到 Elasticsearch(如果您有更多客户端,则重启时间会更长)
- 它具有关联的连接池
为了最大限度地减少到 Elasticsearch 的打开连接数,最大化批量大小并减少“小”批量请求的数量(这很容易填满队列),通常使用单个 Elasticsearch 输出会更有效。
示例
output { elasticsearch { index => "%{[some_field][sub_field]}-%{+YYYY.MM.dd}" } }
如果事件中没有包含目标索引前缀的字段,该怎么办?
您可以使用mutate
过滤器和条件来添加一个[@metadata]
字段,以设置每个事件的目标索引。[@metadata]
字段不会发送到 Elasticsearch。
示例
filter { if [log_type] in [ "test", "staging" ] { mutate { add_field => { "[@metadata][target_index]" => "test-%{+YYYY.MM}" } } } else if [log_type] == "production" { mutate { add_field => { "[@metadata][target_index]" => "prod-%{+YYYY.MM.dd}" } } } else { mutate { add_field => { "[@metadata][target_index]" => "unknown-%{+YYYY}" } } } } output { elasticsearch { index => "%{[@metadata][target_index]}" } }
重试策略
编辑重试策略在 8.1.1 版本中发生了重大变化。此插件使用 Elasticsearch 批量 API 来优化其导入到 Elasticsearch 的过程。这些请求可能会遇到部分或全部失败。批量 API 将一批请求发送到 HTTP 端点。HTTP 请求的错误代码与单个文档的错误代码的处理方式不同。
批量 API 的 HTTP 请求预计会返回 200 响应代码。所有其他响应代码都会无限期地重试。
以下文档错误的处理方式如下
- 400 和 404 错误会发送到死信队列 (DLQ),如果已启用。如果未启用 DLQ,则会发出日志消息,并且事件将被删除。有关更多信息,请参阅DLQ 策略。
- 409 错误(冲突)将作为警告记录并删除。
请注意,不再重试 409 异常。如果您遇到 409 异常,请设置更高的retry_on_conflict
值。Elasticsearch 重试这些异常比此插件的性能更高。
DLQ 策略
编辑来自 Elasticsearch 的映射 (404) 错误可能会导致数据丢失。不幸的是,如果不进行人工干预并且不查看导致映射不匹配的字段,则无法处理映射错误。如果启用了 DLQ,则导致映射错误的原始事件将存储在文件中,以便稍后处理。通常,可以删除违规字段并将其重新索引到 Elasticsearch。如果未启用 DLQ,并且发生映射错误,则会将问题记录为警告,并且会删除该事件。有关处理 DLQ 中事件的更多信息,请参阅死信队列 (DLQ)。接受 DLQ 的错误代码列表可以通过dlq_custom_codes
进行自定义,但应仅在有理由的情况下使用。
索引生命周期管理 (ILM)
编辑- 索引生命周期管理 (ILM) 功能不适用于 Elasticsearch Serverless。您的插件配置中的任何 ILM 设置都将被忽略,并可能导致错误。
- ILM 功能需要插件版本
9.3.1
或更高版本。 - 此功能需要至少具有基本许可证的 Elasticsearch 6.6.0 或更高版本的实例
Logstash 可以使用索引生命周期管理来自动管理随时间推移的索引。
索引生命周期管理的使用由ilm_enabled
设置控制。默认情况下,此设置会检测 Elasticsearch 实例是否支持 ILM,如果支持,则会使用它。ilm_enabled
也可以设置为true
或false
来覆盖自动检测或禁用 ILM。
这将覆盖索引设置,并调整 Logstash 模板,以便写入必要的设置,使该模板支持索引生命周期管理,包括要使用的索引策略和滚动别名。
Logstash 为要写入的索引创建一个滚动别名,包括实际索引的命名模式,除非已指定现有的 ILM 策略,否则还会创建一个默认策略。默认策略配置为当索引达到 50 GB 大小或达到 30 天时进行滚动,以先到者为准。
默认的滚动别名称为 logstash
,滚动索引的默认模式为 {now/d}-00001
,这将根据索引滚动的日期命名索引,后跟一个递增的数字。请注意,该模式必须以破折号和一个将递增的数字结尾。
有关命名的更多详细信息,请参阅 滚动 API 文档。
滚动别名、ilm 模式和策略可以修改。
请参阅下面的配置示例
output { elasticsearch { ilm_rollover_alias => "custom" ilm_pattern => "000001" ilm_policy => "custom_policy" } }
- 自定义 ILM 策略必须在 Elasticsearch 集群上存在,然后才能使用。
- 如果修改了滚动别名或模式,则需要覆盖索引模板,因为设置
index.lifecycle.name
和index.lifecycle.rollover_alias
会自动写入模板 - 如果在输出定义中提供了 index 属性,则它将被滚动别名覆盖。
批量大小
编辑此插件尝试将事件批次作为单个请求发送到 Elasticsearch Bulk API。但是,如果批次超过 20MB,我们会将其分解为多个批量请求。如果单个文档超过 20MB,则将其作为单个请求发送。
DNS 缓存
编辑此插件使用 JVM 查找 DNS 条目,并受 networkaddress.cache.ttl 的值的影响,这是 JVM 的全局设置。
例如,要将 DNS TTL 设置为 1 秒,可以将 LS_JAVA_OPTS
环境变量设置为 -Dnetworkaddress.cache.ttl=1
。
请记住,启用 keepalive 的连接在 keepalive 生效期间不会重新评估其 DNS 值。
HTTP 压缩
编辑此插件始终读取来自 Elasticsearch 的压缩响应。默认情况下,它将压缩的批量请求发送到 Elasticsearch。
如果您担心带宽,可以设置更高的 compression_level
,以用 CPU 容量换取网络 IO 的减少。
身份验证
编辑可以使用 user
/password
、cloud_auth
或 api_key
选项之一对安全的 Elasticsearch 集群进行身份验证。
授权
编辑对安全的 Elasticsearch 集群进行授权需要在索引级别具有 read
权限,在集群级别具有 monitoring
权限。集群级别的 monitoring
权限对于执行定期连接检查是必需的。
处理非 UTF-8 数据
编辑此插件使用 JSON API 将事件传输到 Elasticsearch,因此要求事件中的所有字符串值都是有效的 UTF-8。当事件中的字符串值包含一个或多个在 UTF-8 中无效的字节序列时,每个违规字节序列都将替换为 UTF-8 替换字符 (\uFFFD
)。
Elasticsearch 输出配置选项
编辑此插件支持以下配置选项,以及稍后描述的 常用选项和 Elasticsearch 输出已弃用的配置选项。
设置 | 输入类型 | 必需 |
---|---|---|
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
数字, |
否 |
|
否 |
||
字符串, |
否 |
|
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
字符串, |
否 |
|
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
字符串, |
否 |
|
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
路径列表 |
否 |
|
字符串列表 |
否 |
|
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
字符串, |
否 |
|
有效的文件系统路径 |
否 |
|
字符串, |
否 |
|
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
字符串, |
否 |
另请参阅 常用选项,了解所有输出插件支持的选项列表。
action
编辑- 值类型为 字符串
- 数据流的默认值为
create
,非时间序列数据的默认值为index
。
要执行的 Elasticsearch 操作。有效的操作有:
-
index
:索引一个文档(来自 Logstash 的一个事件)。 -
delete
:按 id 删除一个文档(此操作需要一个 id) -
create
:索引一个文档,如果索引中已存在具有该 id 的文档,则失败。 -
update
:按 id 更新一个文档。更新有一个特殊情况,您可以在其中执行 upsert,即如果文档不存在,则更新文档。请参阅doc_as_upsert
选项。注意:这在 Elasticsearch 1.x 中不起作用且不受支持。请升级到 ES 2.x 或更高版本,以将此功能与 Logstash 一起使用! - 一个 sprintf 样式字符串,用于根据事件的内容更改操作。值
%{[foo]}
将使用 foo 字段进行操作。如果解析的操作不在 [index
,delete
,create
,update
] 中,则该事件不会发送到 Elasticsearch。相反,该事件将发送到管道的 死信队列 (DLQ)(如果已启用),或者它将被记录并丢弃。
有关操作的更多详细信息,请查看 Elasticsearch bulk API 文档。
api_key
编辑- 值类型为 密码
- 此设置没有默认值。
使用 Elasticsearch API 密钥进行身份验证。请注意,此选项还需要 SSL/TLS,可以通过提供 cloud_id
、HTTPS hosts
列表或设置 ssl_enabled => true
来启用。
格式为 id:api_key
,其中 id
和 api_key
是 Elasticsearch 创建 API 密钥 API 返回的。
bulk_path
编辑- 值类型为 字符串
- 此设置的默认值为
/_bulk?filter_path=errors,items.*.error,items.*.status
执行 _bulk 请求的 HTTP 路径。* 此默认批量路径是 path
参数的值与 /_bulk?filter_path=errors,items.*.error,items.*.status
的连接。* filter_path
查询参数附加到批量路径,以减少 logstash 和 elasticsearch 之间的负载。但是,如果自定义 filter_path
查询参数包含在 bulk_path
设置中,则将使用该值。
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 文档。
compression_level
编辑- 值可以是:
0
、1
、2
、3
、4
、5
、6
、7
、8
、9
- 默认值为
1
gzip 压缩级别。将此值设置为 0
将禁用压缩。压缩级别必须在 1
(最佳速度)到 9
(最佳压缩)的范围内。
增加压缩级别将减少网络使用量,但会增加 CPU 使用量。
data_stream
编辑- 值可以是:
true
、false
和auto
- 在 Logstash 7.x 中,默认值为
false
;在 Logstash 8.0 及更高版本中,默认值为auto
。
定义是否将数据索引到 Elasticsearch 数据流中。只有启用此设置后,才会使用其他 data_stream_*
设置。
当提供的配置与数据流兼容且此值设置为 auto
时,Logstash 将输出作为数据流处理。请注意,要使数据流正常工作,必须启用ECS 兼容性(设置为 v1
或 v8
)。
data_stream_auto_routing
编辑- 值类型为 布尔值
- 默认值为
true
。
通过使用 %{[data_stream][type]}-%{[data_stream][dataset]}-%{[data_stream][namespace]}
格式,使用特定事件字段派生数据流名称,从而自动路由事件。
如果启用,data_stream.*
事件字段将优先于 data_stream_type
、data_stream_dataset
和 data_stream_namespace
设置,但如果事件中缺少任何字段,则会回退到它们。
data_stream_sync_fields
编辑- 值类型为 布尔值
- 默认值为
true
如果事件中缺少 data_stream.*
事件字段,则自动添加并同步这些字段。这确保字段与接收事件的数据流名称匹配。
如果现有 data_stream.*
事件字段与数据流名称不匹配,并且 data_stream_auto_routing
被禁用,则事件字段将被覆盖,并发出警告。
dlq_custom_codes
编辑- 值类型为 数字
- 默认值为
[]
。
Elasticsearch Bulk API 中,被视为有效,可以将事件移动到死信队列的单操作错误代码列表。此列表是对为此功能考虑的普通错误代码 400 和 404 的补充。重新使用相同的预定义代码表示成功、DLQ 或冲突被认为是配置错误。该选项接受与 HTTP 错误代码对应的自然数列表。
doc_as_upsert
编辑- 值类型为 布尔值
- 默认值为
false
为更新模式启用 doc_as_upsert
。如果 Elasticsearch 中不存在 document_id
,则使用 source 创建新文档。
document_type
编辑- 值类型为 字符串
- 此设置没有默认值。
- 此选项已弃用
由于Elasticsearch 6.0 中删除了类型,此选项已弃用。它将在 Logstash 的下一个主要版本中删除。
对于 Elasticsearch 集群 8.x
,此值将被忽略,并且没有效果。
此选项设置用于写入事件的文档类型。通常,您应该尝试将相似的事件写入同一类型。此处可以使用字符串扩展 %{foo}
。如果您没有为此选项设置值
- 对于 elasticsearch 集群 8.x:将不使用任何值;
- 对于 elasticsearch 集群 7.x:将使用 _doc 的值;
- 对于 elasticsearch 集群 6.x:将使用 doc 的值;
- 对于 elasticsearch 集群 5.x 及更低版本:将使用事件的 type 字段,如果该字段不存在,则将使用 doc 的值。
ecs_compatibility
编辑- 值类型为 字符串
-
支持的值包括
-
disabled
:不提供 ECS 兼容的模板 -
v1
,v8
:符合 Elastic Common Schema 的行为
-
-
默认值取决于正在运行的 Logstash 版本
- 当 Logstash 提供
pipeline.ecs_compatibility
设置时,其值将用作默认值 - 否则,默认值为
disabled
。
- 当 Logstash 提供
控制此插件与Elastic Common Schema (ECS)的兼容性,包括安装 ECS 兼容的索引模板。此设置的值会影响 默认 值
custom_headers
编辑- 值类型为 哈希
- 此设置没有默认值。
传递一组键值对作为发送到 Elasticsearch 节点的每个请求的标头。标头将用于任何类型的请求(_bulk 请求、模板安装、健康检查和嗅探)。这些自定义标头将被诸如 compression_level
之类的设置覆盖。
healthcheck_path
编辑- 值类型为 字符串
- 此设置没有默认值。
当后端被标记为不可用时,会将 HEAD 请求发送到此 HTTP 路径,该请求在后台发送,以查看它是否再次可用,然后再有资格再次服务请求。如果您有自定义防火墙规则,则可能需要更改此项
hosts
编辑- 值类型为 URI
- 默认值为
[//127.0.0.1]
设置远程实例的主机。如果给定一个数组,它将在 hosts
参数中指定的主机之间进行请求的负载均衡。请记住,http
协议使用 http 地址(例如,9200,而不是 9300)。
示例
`"127.0.0.1"` `["127.0.0.1:9200","127.0.0.2:9200"]` `["http://127.0.0.1"]` `["https://127.0.0.1:9200"]` `["https://127.0.0.1:9200/mypath"]` (If using a proxy on a subpath)
从 hosts
列表中排除专用的主节点,以防止 Logstash 将批量请求发送到主节点。此参数应仅引用 Elasticsearch 中的数据节点或客户端节点。
此处 URL 中存在的任何特殊字符都必须进行 URL 转义!这意味着例如 #
应输入为 %23
。
http_compression
编辑在 11.17.0 中已弃用。
已替换为 compression_level
- 值类型为 布尔值
- 默认值为
false
将 true
设置为启用请求上的 gzip 压缩级别 1。
此设置允许您通过压缩每个批量 请求 到 Elasticsearch,来减少此插件的出站网络流量。
无论此设置的值如何,此输出插件都会读取来自 Elasticsearch 的压缩 响应。
ilm_enabled
编辑- 值可以是:
true
,false
,auto
- 默认值为
auto
如果 Elasticsearch 集群运行的是 Elasticsearch 版本 7.0.0
或更高版本,并且启用了 ILM 功能,则 auto
的默认设置会自动启用索引生命周期管理,否则禁用它。
即使 Elasticsearch 集群支持 ILM,将此标志设置为 false
也将禁用索引生命周期管理功能。如果 Elasticsearch 集群支持索引生命周期管理功能,则将此标志设置为 true
将启用该功能。这是在早于 7.0.0
版本的 Elasticsearch 版本上启用索引生命周期管理所必需的。
此功能需要在 6.6.0 或更高版本的 Elasticsearch 集群上安装 Basic License 或更高版本。
ilm_pattern
编辑- 值类型为 字符串
- 默认值为
{now/d}-000001
用于生成由索引生命周期管理管理的索引的模式。模式中指定的值将被附加到写入别名,并在 ILM 创建新索引时自动递增。
指定 ilm 模式时可以使用日期数学,详情请参阅Rollover API 文档。
更新模式将需要重写索引模板。
该模式必须以破折号和一个数字结尾,该数字将在索引翻转时自动递增。
无论之前的索引名称如何,该模式都是一个由零填充的 6 位字符串。示例:000001。有关详细信息,请参阅Rollover 路径参数 API 文档。
ilm_policy
编辑- 值类型为 字符串
- 默认值为
logstash-policy
修改此设置以使用自定义索引生命周期管理策略,而不是默认策略。如果未设置此值,则默认策略将自动安装到 Elasticsearch 中。
如果指定此设置,则该策略必须已存在于 Elasticsearch 集群中。
ilm_rollover_alias
编辑- 值类型为 字符串
-
默认值取决于是否启用了
ecs_compatibility
- 禁用 ECS 兼容性:
logstash
- 启用 ECS 兼容性:
ecs-logstash
- 禁用 ECS 兼容性:
翻转别名是使用索引生命周期管理管理的索引将写入的别名。
如果同时指定了 index
和 ilm_rollover_alias
,则 ilm_rollover_alias
优先。
更新翻转别名将需要重写索引模板。
ilm_rollover_alias
不像 index
那样支持动态变量替换。
index
编辑- 值类型为 字符串
-
默认值取决于是否启用了
ecs_compatibility
- 禁用 ECS 兼容性:
"logstash-%{+yyyy.MM.dd}"
- 启用 ECS 兼容性:
"ecs-logstash-%{+yyyy.MM.dd}"
- 禁用 ECS 兼容性:
要将事件写入的索引目标。可以指向索引、别名或数据流。可以使用 %{foo}
语法进行动态设置。默认值将按天对索引进行分区,以便您可以更轻松地删除旧数据或仅搜索特定日期范围。索引不得包含大写字符。对于每周索引,建议使用 ISO 8601 格式,例如 logstash-%{+xxxx.ww}。Logstash 使用Joda 格式,并且每个事件的 @timestamp
字段用作日期的来源。
manage_template
编辑- 值类型为 布尔值
- 对于非时间序列数据,默认值为
true
,对于数据流,默认值为false
。
从 Logstash 1.3 开始,如果名为template_name
的模板尚不存在,则在 Logstash 启动期间将模板应用于 Elasticsearch。默认情况下,此模板的内容是 logstash-%{+YYYY.MM.dd}
的默认模板,它始终匹配基于模式 logstash-*
的索引。如果您需要支持其他索引名称,或者想更改模板中的映射,可以通过将 template
设置为模板文件的路径来指定自定义模板。
将 manage_template
设置为 false 会禁用此功能。如果您需要更好地控制模板创建(例如,根据字段名称动态创建索引),则应将 manage_template
设置为 false,并使用 REST API 手动应用模板。
parameters
编辑- 值类型为 哈希
- 此设置没有默认值。
将一组键值对作为 URL 查询字符串传递。此查询字符串将添加到 hosts 配置中列出的每个主机。如果 hosts 列表包含已具有查询字符串的 URL,则此处指定的查询字符串将被附加。
path
编辑- 值类型为 字符串
- 此设置没有默认值。
Elasticsearch 服务器所在的 HTTP 路径。如果您必须在代理之后运行 Elasticsearch,该代理会为 Elasticsearch HTTP API 的根路径重新映射,请使用此选项。请注意,如果您在 hosts 字段中使用路径作为 URL 的组成部分,则也不可以设置此字段。这会在启动时引发错误。
pipeline
编辑- 值类型为 字符串
- 没有默认值。
设置您希望为事件执行的摄取管道。您还可以在此处使用依赖于事件的配置,例如 pipeline => "%{[@metadata][pipeline]}"
。如果值解析为空字符串 (""),则不会设置 pipeline 参数。
pool_max
编辑- 值类型为 数字
- 默认值为
1000
虽然输出会尝试有效地重用连接,但我们有一个最大值。这将设置输出将创建的最大打开连接数。将此值设置得太低可能意味着频繁关闭/打开连接,这是不好的。
pool_max_per_route
编辑- 值类型为 数字
- 默认值为
100
虽然输出会尝试有效地重用连接,但每个端点都有一个最大值。这将设置输出将为每个端点创建的最大打开连接数。将此值设置得太低可能意味着频繁关闭/打开连接,这是不好的。
proxy
编辑- 值类型为 URI
- 此设置没有默认值。
设置转发 HTTP 代理的地址。此设置仅接受 URI 参数,以防止泄漏凭据。空字符串被视为未设置代理。当使用环境变量时,这很有用,例如 proxy => '${LS_PROXY:}'
。
script
编辑- 值类型为 字符串
- 默认值为
""
为脚本更新模式设置脚本名称
示例
output { elasticsearch { script => "ctx._source.message = params.event.get('message')" } }
script_lang
编辑- 值类型为 字符串
- 默认值为
"painless"
设置所用脚本的语言。在 Elasticsearch 6.0 及更高版本上使用索引(存储)脚本时,必须将此参数设置为 ""
(空字符串)。
silence_errors_in_log
编辑- 值类型为 数组
- 默认值为
[]
定义您不想记录的 Elasticsearch 错误列表。一个有用的示例是当您想跳过所有 409 错误(即 version_conflict_engine_exception
)时。
output { elasticsearch { silence_errors_in_log => ["version_conflict_engine_exception"] } }
sniffing
编辑- 值类型为 布尔值
- 默认值为
false
此设置会向 Elasticsearch 请求所有集群节点的列表,并将其添加到主机列表。对于 Elasticsearch 5.x 和 6.x,任何具有 http.enabled
(默认情况下启用)的节点都将被添加到主机列表,但仅限主节点除外。
sniffing_path
编辑- 值类型为 字符串
- 此设置没有默认值。
用于嗅探请求的 HTTP 路径,默认值是通过连接路径值和“_nodes/http”计算得出的,如果设置了 sniffing_path,则它将用作绝对路径,请勿在此处使用完整的 URL,仅使用路径,例如“/sniff/_nodes/http”
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 密钥。此密钥必须为 PKCS8 格式且采用 PEM 编码。您可以使用 openssl pkcs8 命令完成转换。例如,将 PEM 编码的 PKCS1 私钥转换为 PEM 编码的非加密 PKCS8 密钥的命令是:
openssl pkcs8 -inform PEM -in path/to/logstash.key -topk8 -nocrypt -outform PEM -out path/to/logstash.pkcs8.key
仅当设置了 ssl_certificate
时,才能使用此设置。
ssl_supported_protocols
编辑- 值类型为 字符串
- 允许的值为:
'TLSv1.1'
,'TLSv1.2'
,'TLSv1.3'
- 默认值取决于所使用的 JDK。对于最新的 Logstash,默认值为
['TLSv1.2', 'TLSv1.3']
。'TLSv1.1'
被认为是不安全的,仅为旧版应用程序提供。
建立与 Elasticsearch 集群的连接时要使用的允许的 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_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
template_api
编辑- 值可以是以下任意值:
auto
,legacy
,composable
- 默认值为
auto
auto
的默认设置将使用 索引模板 API 来创建索引模板,如果 Elasticsearch 集群正在运行 Elasticsearch 版本 8.0.0
或更高版本,否则将使用 旧版模板 API。
将此标志设置为 legacy
将使用旧版模板 API 创建索引模板。将此标志设置为 composable
将使用索引模板 API 创建索引模板。
提供给 template
的模板的格式需要与正在使用的模板 API 相匹配。
template_name
编辑- 值类型为 字符串
-
默认值取决于是否启用了
ecs_compatibility
- 禁用 ECS 兼容性:
logstash
- 启用 ECS 兼容性:
ecs-logstash
- 禁用 ECS 兼容性:
此配置选项定义模板在 Elasticsearch 中的命名方式。请注意,如果您使用了模板管理功能并随后更改了此项,则需要手动修剪旧模板,例如:
curl -XDELETE <https://127.0.0.1:9200/_template/OldTemplateName?pretty>
其中 OldTemplateName
是之前的设置。
template_overwrite
编辑- 值类型为 布尔值
- 默认值为
false
template_overwrite 选项将始终使用 template 指示的模板或包含的模板覆盖 Elasticsearch 中指示的模板。默认情况下,此选项设置为 false。如果您始终希望与 Logstash 提供的模板保持最新,则此选项对您可能非常有用。同样,如果您有由 puppet 管理的自己的模板文件(例如),并且您希望能够定期更新它,则此选项也可以提供帮助。
请注意,如果您使用的是 Logstash 模板 (logstash) 的自定义版本,则将此项设置为 true 将使 Logstash 覆盖 “logstash” 模板(即删除所有自定义设置)
validate_after_inactivity
编辑- 值类型为 数字
- 默认值为
10000
在检查是否需要保持活动请求的过时连接之前等待的时间。如果经常遇到连接错误,请考虑将此值设置得低于默认值,可能设置为 0。
此客户端基于 Apache Commons。以下是 Apache Commons 文档 对此选项的描述:“定义不活动期间(以毫秒为单位),在此期间,必须在持久连接租借给使用者之前重新验证这些连接。传递给此方法的非正值将禁用连接验证。此检查有助于检测在池中保持不活动状态时已过时(半关闭)的连接。”
Elasticsearch 输出已弃用的配置选项
编辑此插件支持以下已弃用的配置。
已弃用的选项可能会在以后的版本中删除。
设置 | 输入类型 | 替换为 |
---|---|---|
有效的文件系统路径 |
||
有效的文件系统路径 |
||
有效的文件系统路径 |
||
keystore
编辑在 11.14.0 中已弃用。
- 值类型为路径
- 此设置没有默认值。
用于向服务器提供证书的密钥库。它可以是 .jks 或 .p12
您不能同时使用此设置和 ssl_certificate
。
ssl
编辑在 11.14.0 中已弃用。
替换为 ssl_enabled
- 值类型为 布尔值
- 此设置没有默认值。
启用与 Elasticsearch 集群的 SSL/TLS 安全通信。如果未指定此项,将使用 hosts
中列出的 URL 中指定的方案,或从 cloud_id
中提取的方案。如果未指定显式协议,则将使用纯 HTTP。
ssl_certificate_verification
编辑在 11.14.0 中已弃用。
- 值类型为 布尔值
- 默认值为
true
用于验证服务器证书的选项。禁用此选项会严重损害安全性。有关禁用证书验证的更多信息,请阅读 https://www.cs.utexas.edu/~shmat/shmat_ccs12.pdf
truststore
编辑在 11.14.0 中已弃用。
已替换为 ssl_truststore_path
- 值类型为路径
- 此设置没有默认值。
用于验证服务器证书的信任存储。它可以是 .jks
或 .p12
文件。请使用 :truststore
或 :cacert
。