Elasticsearch 输出插件

编辑

Elasticsearch 输出插件编辑

  • 插件版本: v11.22.7
  • 发布日期: 2024-06-25
  • 变更日志

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

获取帮助编辑

如果您对插件有任何疑问,请在 Discuss 论坛中发布主题。对于错误或功能请求,请在 Github 中创建问题。有关 Elastic 支持的插件列表,请参阅 Elastic 支持矩阵.

描述编辑

Elasticsearch 为所有类型的数据提供近乎实时的搜索和分析。Elasticsearch 输出插件可以将时间序列数据集(如日志、事件和指标)和非时间序列数据存储在 Elasticsearch 中。

您可以在网站登录页面或 Elasticsearch 文档详细了解 Elasticsearch

兼容性说明

连接到 Elasticsearch 7.x 时,此插件的现代版本在插入文档时不会使用文档类型,除非用户显式设置 document_type

如果您使用的是早期版本的 Logstash 并希望连接到 Elasticsearch 7.x,请先将 Logstash 升级到 6.8 版,以确保它获取对 Elasticsearch 索引模板的更改。

如果您使用的是自定义 template,请确保您的模板在连接到 Elasticsearch 7.x 之前使用 _doc 文档类型。

无服务器上的 Logstash 到 Elasticsearch编辑

您可以使用此插件将 Logstash 数据发送到无服务器上的 Elasticsearch。无服务器上的 Elasticsearch 与自托管 Elasticsearch 之间存在一些区别。

有关将数据从 Logstash 发送到无服务器上的 Elasticsearch 的更多信息,请查看 无服务器上的 Elasticsearch 文档

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 中

ECS 兼容性 必须启用(设置为 v1v8),数据流才能正常工作。

数据流配置示例编辑

示例:基本默认配置

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_enabledtrue 且使用 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_custom_codes 自定义 DLQ 接受的错误代码列表,但应仅在有充分理由的情况下使用。

索引生命周期管理 (ILM)编辑

  • 索引生命周期管理 (ILM) 功能不适用于无服务器上的 Elasticsearch。您的插件配置中的任何 ILM 设置都会被忽略,并可能导致错误。
  • ILM 功能需要插件版本 9.3.1 或更高版本。
  • 此功能需要 Elasticsearch 实例 6.6.0 或更高版本,并且至少需要基本许可证

Logstash 可以使用 索引生命周期管理 来自动管理索引随时间的推移。

索引生命周期管理的使用由 ilm_enabled 设置控制。默认情况下,此设置会检测 Elasticsearch 实例是否支持 ILM,如果可用,则使用它。 ilm_enabled 也可以设置为 truefalse 来覆盖自动检测或禁用 ILM。

这将覆盖索引设置并调整 Logstash 模板以写入必要的设置,以便模板支持索引生命周期管理,包括要使用的索引策略和滚动别名。

Logstash 会为要写入的索引创建一个滚动别名,包括实际索引的命名模式,并且除非已指定现有 ILM 策略,否则还会创建一个默认策略。默认策略配置为在索引大小达到 50 千兆字节或索引年龄达到 30 天时(以先到者为准)滚动索引。

默认滚动别名为 logstash,滚动索引的默认模式为 {now/d}-00001,这将在索引滚动的日期命名索引,后跟一个递增的数字。请注意,模式必须以连字符和一个将被递增的数字结尾。

有关命名的更多详细信息,请参阅 滚动 API 文档

可以修改滚动别名、ilm 模式和策略。

请参阅下面的配置以获取示例

    output {
      elasticsearch {
        ilm_rollover_alias => "custom"
        ilm_pattern => "000001"
        ilm_policy => "custom_policy"
      }
    }
  • 自定义 ILM 策略必须已存在于 Elasticsearch 集群中才能使用。
  • 如果修改了滚动别名或模式,则需要覆盖索引模板,因为设置 index.lifecycle.nameindex.lifecycle.rollover_alias 会自动写入模板
  • 如果在输出定义中提供了索引属性,它将被滚动别名覆盖。

批次大小edit

此插件尝试将事件批次作为单个请求发送到 Elasticsearch 批量 API。但是,如果批次超过 20 MB,我们将将其分解为多个批量请求。如果单个文档超过 20 MB,则将其作为单个请求发送。

DNS 缓存edit

此插件使用 JVM 来查找 DNS 条目,并且受 networkaddress.cache.ttl 值的影响,这是 JVM 的全局设置。

例如,要将 DNS TTL 设置为 1 秒,您需要将 LS_JAVA_OPTS 环境变量设置为 -Dnetworkaddress.cache.ttl=1

请记住,在保持活动连接的情况下,连接不会重新评估其 DNS 值。

HTTP 压缩edit

此插件始终从 Elasticsearch 读取压缩的响应。默认情况下,它会将压缩的批量请求发送到 Elasticsearch。

如果您担心带宽,可以设置更高的 compression_level 以用 CPU 容量换取网络 IO 的减少。

身份验证edit

可以使用以下选项之一对安全的 Elasticsearch 集群进行身份验证:user/passwordcloud_authapi_key

授权edit

对安全的 Elasticsearch 集群进行授权需要在索引级别具有 read 权限,并在集群级别具有 monitoring 权限。集群级别的 monitoring 权限对于执行定期连接检查是必要的。

处理非 UTF-8 数据edit

此插件使用 JSON API 将事件传输到 Elasticsearch,因此要求事件中的所有字符串值都是有效的 UTF-8。当事件上的字符串值包含一个或多个在 UTF-8 中无效的字节序列时,每个有问题的字节序列将被替换为 UTF-8 替换字符 (\uFFFD)。

Elasticsearch 输出配置选项edit

此插件支持以下配置选项,以及后面描述的 通用选项Elasticsearch 输出已弃用配置选项

设置 输入类型 必需

action

string

api_key

password

bulk_path

string

ca_trusted_fingerprint

string

cloud_auth

password

cloud_id

string

compression_level

数字,其中之一为 [0 ~ 9]

custom_headers

hash

data_stream

字符串,其中之一为 ["true", "false", "auto"]

data_stream_auto_routing

boolean

data_stream_dataset

string

data_stream_namespace

string

data_stream_sync_fields

boolean

data_stream_type

string

dlq_custom_codes

number

dlq_on_failed_indexname_interpolation

boolean

doc_as_upsert

boolean

document_id

string

document_type

string

ecs_compatibility

string

failure_type_logging_whitelist

array

healthcheck_path

string

hosts

uri

http_compression

boolean

ilm_enabled

字符串,其中之一为 ["true", "false", "auto"]

ilm_pattern

string

ilm_policy

string

ilm_rollover_alias

string

index

string

silence_errors_in_log

array

manage_template

boolean

parameters

hash

parent

string

password

password

path

string

pipeline

string

pool_max

number

pool_max_per_route

number

proxy

uri

resurrect_delay

number

retry_initial_interval

number

retry_max_interval

number

retry_on_conflict

number

routing

string

script

string

script_lang

string

script_type

字符串,其中之一为 ["inline", "indexed", "file"]

script_var_name

string

scripted_upsert

boolean

sniffing

boolean

sniffing_delay

number

sniffing_path

string

ssl_certificate

path

ssl_certificate_authorities

list of 路径

ssl_cipher_suites

list of 字符串

ssl_enabled

boolean

ssl_key

path

ssl_keystore_password

password

ssl_keystore_path

path

ssl_keystore_type

string

ssl_supported_protocols

string

ssl_truststore_password

password

ssl_truststore_path

path

ssl_truststore_type

string

ssl_verification_mode

字符串,其中之一为 ["full", "none"]

template

有效的文件系统路径

template_api

字符串,其中之一为 ["auto", "legacy", "composable"]

template_name

string

template_overwrite

boolean

timeout

number

upsert

string

user

string

validate_after_inactivity

number

version

string

version_type

字符串,其中之一为 ["internal", "external", "external_gt", "external_gte", "force"]

另请参阅 通用选项,了解所有输出插件支持的选项列表。

 

actionedit

  • 值类型为 字符串
  • 默认值为数据流的 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 批量 API 文档

api_keyedit

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

使用 Elasticsearch API 密钥进行身份验证。请注意,此选项还需要 SSL/TLS,可以通过提供 cloud_id、HTTPS hosts 列表或通过设置 ssl_enabled => true 来启用。

格式为 id:api_key,其中 idapi_key 与 Elasticsearch 创建 API 密钥 API 返回的值相同。

bulk_pathedit

  • 值类型为 字符串
  • 此设置的默认值为 /_bulk?filter_path=errors,items.*.error,items.*.status

执行 _bulk 请求的 HTTP 路径 * 此默认批量路径是 path 参数的值和 /_bulk?filter_path=errors,items.*.error,items.*.status 的串联 * filter_path 查询参数附加到批量路径以减少 logstash 和 elasticsearch 之间的有效负载。但是,如果在 bulk_path 设置中包含了自定义 filter_path 查询参数,则将使用该值。

ca_trusted_fingerprintedit

  • 值类型为 字符串,并且必须包含正好 64 个十六进制字符。
  • 此设置没有默认值。
  • 使用此选项 * 需要 * Logstash 8.3+

要信任的 SSL 证书颁发机构的 SHA-256 指纹,例如 Elasticsearch 集群的自动生成的自我签名 CA。

cloud_authedit

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

云身份验证字符串(“<username>:<password>” 格式)是 user/password 对的替代方案。

有关更多详细信息,请查看 Logstash 到云文档

cloud_idedit

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

来自 Elastic Cloud Web 控制台的云 ID。如果设置了 hosts,则不应使用。

有关更多详细信息,请查看 Logstash 到云文档

compression_level编辑

  • 值可以是以下任何一个:0123456789
  • 默认值为 1

gzip 压缩级别。将此值设置为 0 将禁用压缩。压缩级别必须在 1(最佳速度)到 9(最佳压缩)范围内。

提高压缩级别将减少网络使用量,但会增加 CPU 使用量。

data_stream编辑

  • 值可以是以下任何一个:truefalseauto
  • 在 Logstash 7.x 中默认值为 false,从 Logstash 8.0 开始默认值为 auto

定义是否将数据索引到 Elasticsearch 数据流中。只有在启用此设置时,其他 data_stream_* 设置才会被使用。

当提供的配置与数据流兼容且此值设置为 auto 时,Logstash 将输出作为数据流处理。请注意,ECS 兼容性 必须启用(设置为 v1v8)才能使数据流正常工作。

data_stream_auto_routing编辑

  • 值类型为 布尔值
  • 默认值为 true

通过使用 %{[data_stream][type]}-%{[data_stream][dataset]}-%{[data_stream][namespace]} 格式从特定事件字段中推导出数据流名称来自动路由事件。

如果启用,data_stream.* 事件字段将优先于 data_stream_typedata_stream_datasetdata_stream_namespace 设置,但如果事件中缺少任何字段,则会回退到这些设置。

data_stream_dataset编辑

  • 值类型为 字符串
  • 默认值为 generic

用于在索引时构建数据流的数据流数据集。

data_stream_namespace编辑

  • 值类型为 字符串
  • 默认值为 default

用于在索引时构建数据流的数据流命名空间。

data_stream_sync_fields编辑

如果事件中缺少 data_stream.* 事件字段,则会自动添加并同步这些字段。这确保字段与接收事件的数据流名称匹配。

如果现有的 data_stream.* 事件字段与数据流名称不匹配,并且 data_stream_auto_routing 已禁用,则事件字段将被覆盖,并发出警告。

data_stream_type编辑

  • 值类型为 字符串
  • 默认值为 logs

用于在索引时构建数据流的数据流类型。目前,只支持 logsmetricssyntheticstraces

dlq_custom_codes编辑

  • 值类型为 数字
  • 默认值为 []

列出 Elasticsearch 的 Bulk API 中被认为有效以将事件移动到死信队列的单操作错误代码。此列表是除了用于此功能的普通错误代码 400 和 404 之外的补充。将相同的预定义代码重新用于成功、DLQ 或冲突被认为是配置错误。此选项接受与 HTTP 错误代码相对应的自然数列表。

dlq_on_failed_indexname_interpolation编辑

  • 值类型为 布尔值
  • 默认值为 true

如果启用,则索引名称插值失败的事件将进入死信队列。

doc_as_upsert编辑

为更新模式启用 doc_as_upsert。如果 Elasticsearch 中不存在 document_id,则使用源创建新文档。

document_id编辑

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

索引的文档 ID。对于使用相同 ID 覆盖 Elasticsearch 中的现有条目很有用。

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 兼容的模板
    • v1v8:符合 Elastic Common Schema 的行为
  • 默认值取决于运行的 Logstash 版本

    • 当 Logstash 提供 pipeline.ecs_compatibility 设置时,将使用其值作为默认值
    • 否则,默认值为 disabled

控制此插件与 Elastic Common Schema (ECS) 的兼容性,包括安装与 ECS 兼容的索引模板。此设置的值会影响以下内容的默认

failure_type_logging_whitelist编辑

  • 值类型为 数组
  • 默认值为 []

已弃用,请参考 silence_errors_in_log

custom_headers编辑

  • 值类型为 哈希
  • 此设置没有默认值。

将一组键值对作为发送到每个 Elasticsearch 节点的请求中的标头传递。这些标头将用于任何类型的请求(_批量请求、模板安装、运行状况检查和嗅探)。这些自定义标头将被 compression_level 等设置覆盖。

healthcheck_path编辑

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

当后端被标记为关闭时,在后台发送 HEAD 请求的 HTTP 路径,该请求将被发送以查看它是否已恢复,然后再有资格服务请求。如果您有自定义防火墙规则,您可能需要更改此设置

hosts编辑

  • 值类型为 URI
  • 默认值为 [//127.0.0.1]

设置远程实例的主机。如果给定一个数组,它将在 hosts 参数中指定的 host 上负载均衡请求。请记住,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 替换

设置 true 将在请求上启用 gzip 压缩级别 1。

此设置允许您通过压缩发送到 Elasticsearch 的每个批量请求来减少此插件的出站网络流量。

无论此设置的值如何,此输出插件都会从 Elasticsearch 读取压缩的响应

ilm_enabled编辑

  • 值可以是以下任何一个:truefalseauto
  • 默认值为 auto

默认情况下,如果 Elasticsearch 集群运行的是 Elasticsearch 版本 7.0.0 或更高版本,并且启用了 ILM 功能,则 auto 的默认设置将自动启用 索引生命周期管理,否则将禁用它。

将此标志设置为 false 将禁用索引生命周期管理功能,即使 Elasticsearch 集群支持 ILM。将此标志设置为 true 将启用索引生命周期管理功能,如果 Elasticsearch 集群支持它。这需要在低于版本 7.0.0 的 Elasticsearch 版本上启用索引生命周期管理。

此功能需要在 Elasticsearch 集群版本 6.6.0 或更高版本上安装基本许可证或更高版本。

ilm_patternedit

  • 值类型为 字符串
  • 默认值为 {now/d}-000001

用于生成由 索引生命周期管理 管理的索引的模式。模式中指定的值将附加到写入别名,并在 ILM 创建新索引时自动递增。

在指定 ilm 模式时可以使用日期数学,有关详细信息,请参阅 Rollover API 文档

更新模式将需要重写索引模板。

模式必须以连字符和一个数字结尾,该数字将在索引滚动时自动递增。

模式是一个 6 位数字字符串,用零填充,与之前的索引名称无关。例如:000001。有关详细信息,请参阅 Rollover 路径参数 API 文档

ilm_policyedit

  • 值类型为 字符串
  • 默认值为 logstash-policy

修改此设置以使用自定义索引生命周期管理策略,而不是默认策略。如果未设置此值,则默认策略将自动安装到 Elasticsearch 中

如果指定了此设置,则策略必须已存在于 Elasticsearch 集群中。

ilm_rollover_aliasedit

  • 值类型为 字符串
  • 默认值取决于是否启用了 ecs_compatibility

    • 禁用 ECS 兼容性:logstash
    • 启用 ECS 兼容性:ecs-logstash

滚动别名是使用索引生命周期管理管理的索引将写入的别名。

如果同时指定了 indexilm_rollover_alias,则 ilm_rollover_alias 优先。

更新滚动别名将需要重写索引模板。

ilm_rollover_alias 不支持动态变量替换,如 index 所做的那样。

indexedit

  • 值类型为 字符串
  • 默认值取决于是否启用了 ecs_compatibility

    • 禁用 ECS 兼容性:"logstash-%{+yyyy.MM.dd}"
    • 启用 ECS 兼容性:"ecs-logstash-%{+yyyy.MM.dd}"

写入事件的目标索引。可以指向 索引别名数据流。这可以使用 %{foo} 语法动态实现。默认值将按天对索引进行分区,以便您可以更轻松地删除旧数据或仅搜索特定日期范围。索引可能不包含大写字符。对于每周索引,建议使用 ISO 8601 格式,例如 logstash-%{+xxxx.ww}。Logstash 使用 Joda 格式,并且每个事件的 @timestamp 字段用作日期的来源。

manage_templateedit

  • 值类型为 布尔值
  • 对于非时间序列数据,默认值为 true,对于数据流,默认值为 false

从 Logstash 1.3 开始,如果名称为 template_name 的模板不存在,则在 Logstash 启动期间将模板应用于 Elasticsearch。默认情况下,此模板的内容是 logstash-%{+YYYY.MM.dd} 的默认模板,该模板始终匹配基于模式 logstash-* 的索引。如果您需要支持其他索引名称,或者想要更改模板中的映射,则可以通过将 template 设置为模板文件的路径来指定自定义模板。

manage_template 设置为 false 将禁用此功能。如果您需要更多地控制模板创建(例如,根据字段名称动态创建索引),则应将 manage_template 设置为 false 并使用 REST API 手动应用模板。

parametersedit

  • 值类型为 哈希
  • 此设置没有默认值。

将一组键值对作为 URL 查询字符串传递。此查询字符串将添加到 hosts 配置中列出的每个主机。如果 hosts 列表包含已经具有查询字符串的 URL,则此处指定的查询字符串将被附加。

parentedit

对于子文档,关联父文档的 ID。这可以使用 %{foo} 语法动态实现。

passwordedit

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

用于对安全的 Elasticsearch 集群进行身份验证的密码

pathedit

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

Elasticsearch 服务器所在的 HTTP 路径。如果您必须在将 Elasticsearch 的根路径重新映射到代理的代理后面运行 Elasticsearch,请使用此选项。请注意,如果您在 hosts 字段中使用路径作为 URL 的组件,则可能无法也设置此字段。这将在启动时引发错误

pipelineedit

设置要为事件执行的摄取管道。您也可以在此处使用事件相关的配置,例如 pipeline => "%{[@metadata][pipeline]}"。如果值解析为空字符串(""),则不会设置 pipeline 参数。

pool_maxedit

  • 值类型为 数字
  • 默认值为 1000

虽然输出尝试有效地重用连接,但我们有一个最大值。这设置了输出将创建的打开连接的最大数量。将此值设置得太低可能意味着频繁地关闭/打开连接,这是不好的。

pool_max_per_routeedit

  • 值类型为 数字
  • 默认值为 100

虽然输出尝试有效地重用连接,但我们每个端点都有一个最大值。这设置了输出将创建的每个端点的打开连接的最大数量。将此值设置得太低可能意味着频繁地关闭/打开连接,这是不好的。

proxyedit

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

设置正向 HTTP 代理的地址。此设置仅接受 URI 参数,以防止泄露凭据。空字符串被视为未设置代理。这在使用环境变量时很有用,例如 proxy => '${LS_PROXY:}'

resurrect_delayedit

  • 值类型为 数字
  • 默认值为 5

在复活尝试之间等待多长时间(以秒为单位)。复活是检查标记为 down 的后端端点是否已恢复运行的过程

retry_initial_intervaledit

  • 值类型为 数字
  • 默认值为 2

设置批量重试之间以秒为单位的初始间隔。在每次重试时加倍,直到达到 retry_max_interval

retry_max_intervaledit

  • 值类型为 数字
  • 默认值为 64

设置批量重试之间以秒为单位的最大间隔。

retry_on_conflictedit

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

Elasticsearch 在内部重试更新/更新插入的文档的次数。

routingedit

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

要应用于所有处理事件的路由覆盖。这可以使用 %{foo} 语法动态实现。

scriptedit

设置脚本更新模式的脚本名称

示例

    output {
      elasticsearch {
        script => "ctx._source.message = params.event.get('message')"
      }
    }

script_langedit

  • 值类型为 字符串
  • 默认值为 "painless"

设置使用的脚本的语言。在 Elasticsearch 6.0 及更高版本上使用索引(存储)脚本时,必须将此参数设置为 ""(空字符串)。

script_typeedit

  • 值可以是以下任何一种:inlineindexedfile
  • 默认值为 ["inline"]

定义“script”变量引用的脚本类型 inline : “script”包含内联脚本 indexed : “script”包含直接索引在 Elasticsearch 中的脚本名称 file : “script”包含存储在 Elasticsearch 配置目录中的脚本名称

script_var_nameedit

  • 值类型为 字符串
  • 默认值为 "event"

设置传递给脚本的变量名称(脚本更新)

scripted_upsertedit

如果启用,脚本负责创建不存在的文档(脚本更新)

silence_errors_in_logedit

  • 值类型为 数组
  • 默认值为 []

定义您不想记录的 Elasticsearch 错误列表。一个有用的示例是当您想要跳过所有 409 错误时,这些错误是 version_conflict_engine_exception

    output {
      elasticsearch {
        silence_errors_in_log => ["version_conflict_engine_exception"]
      }
    }

sniffingedit

此设置要求 Elasticsearch 提供所有集群节点的列表,并将它们添加到主机列表中。对于 Elasticsearch 5.x 和 6.x,任何具有 http.enabled(默认情况下启用)的节点都将被添加到主机列表中,排除仅限主节点的节点。

sniffing_delayedit

  • 值类型为 数字
  • 默认值为 5

嗅探尝试之间等待的时间(秒)

sniffing_pathedit

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

用于嗅探请求的 HTTP 路径,默认值通过将路径值和“_nodes/http”连接起来计算得出,如果设置了 sniffing_path,它将用作绝对路径,不要在此处使用完整 URL,只使用路径,例如“/sniff/_nodes/http”

ssl_certificateedit

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

用于验证客户端的 SSL 证书。此证书应为 OpenSSL 风格的 X.509 证书文件。

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

ssl_certificate_authoritiesedit

  • 值类型为 path 列表
  • 此设置没有默认值

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

您不能同时使用此设置和 ssl_truststore_path

ssl_cipher_suitesedit

  • 值类型为 string 列表
  • 此设置没有默认值

要使用的密码套件列表,按优先级排列。支持的密码套件因 Java 和协议版本而异。

ssl_enablededit

  • 值类型为 布尔值
  • 此设置没有默认值。

启用与 Elasticsearch 集群的安全 SSL/TLS 通信。不指定此选项将使用 hosts 中列出的 URL 或从 cloud_id 中提取的方案。如果未指定显式协议,将使用纯 HTTP。

ssl_keyedit

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

要使用的 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_keystore_passwordedit

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

设置密钥库密码

ssl_keystore_pathedit

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

用于向服务器呈现证书的密钥库。它可以是 .jks.p12

您不能同时使用此设置和 ssl_certificate

ssl_keystore_typeedit

  • 值可以是以下任何一种:jkspkcs12
  • 如果未提供,将从密钥库文件名推断出该值。

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

ssl_supported_protocolsedit

  • 值类型为 字符串
  • 允许的值为:'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_passwordedit

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

设置信任库密码

ssl_truststore_pathedit

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

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

您不能同时使用此设置和 ssl_certificate_authorities

ssl_truststore_typeedit

  • 值可以是以下任何一种:jkspkcs12
  • 如果未提供,将从信任库文件名推断出该值。

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

ssl_verification_modeedit

  • 值可以是以下任何一种:fullnone
  • 默认值为 full

定义如何验证 TLS 连接中另一方提供的证书

full 验证服务器证书的颁发日期是否在 not_before 和 not_after 日期之间;链接到受信任的证书颁发机构 (CA),并且具有与证书中名称匹配的主机名或 IP 地址。

none 不执行证书验证。

将证书验证设置为 none 会禁用 SSL/TLS 的许多安全优势,这非常危险。有关禁用证书验证的更多信息,请阅读 https://www.cs.utexas.edu/~shmat/shmat_ccs12.pdf

templateedit

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

如果您愿意,可以在这里设置您自己的模板的路径。如果未设置,将使用包含的模板。

template_apiedit

  • 值可以是以下任何一种:autolegacycomposable
  • 默认值为 auto

默认情况下,auto 设置将使用 索引模板 API 创建索引模板,如果 Elasticsearch 集群运行的是 Elasticsearch 版本 8.0.0 或更高版本,否则使用 旧版模板 API

将此标志设置为 legacy 将使用旧版模板 API 创建索引模板。将此标志设置为 composable 将使用索引模板 API 创建索引模板。

提供给 template 的模板格式需要与正在使用的模板 API 匹配。

template_nameedit

  • 值类型为 字符串
  • 默认值取决于是否启用了 ecs_compatibility

    • 禁用 ECS 兼容性:logstash
    • 启用 ECS 兼容性:ecs-logstash

此配置选项定义了模板在 Elasticsearch 中的命名方式。请注意,如果您使用了模板管理功能,随后又更改了此设置,则需要手动修剪旧模板,例如:

curl -XDELETE <https://127.0.0.1:9200/_template/OldTemplateName?pretty>

其中 OldTemplateName 是之前的设置。

template_overwriteedit

template_overwrite 选项将始终使用 template 或包含的模板覆盖 Elasticsearch 中指示的模板。此选项默认设置为 false。如果您始终希望使用 Logstash 提供的模板保持最新,那么此选项对您非常有用。同样,如果您有自己的模板文件由 puppet 管理,例如,并且您希望能够定期更新它,那么此选项也可以提供帮助。

请注意,如果您使用的是 Logstash 模板 (logstash) 的自定义版本,将其设置为 true 将使 Logstash 覆盖 "logstash" 模板(即删除所有自定义设置)。

timeoutedit

  • 值类型为 数字
  • 默认值为 60

设置发送到 Elasticsearch 的网络操作和请求的超时时间(以秒为单位)。如果发生超时,请求将被重试。

upsertedit

设置更新模式的 upsert 内容。如果 document_id 不存在,则使用此参数作为 json 字符串创建一个新文档。

useredit

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

用于向安全的 Elasticsearch 集群进行身份验证的用户名。

validate_after_inactivityedit

  • 值类型为 数字
  • 默认值为 10000

在检查过时连接以确定是否需要保持活动请求之前等待的时间。如果您经常遇到连接错误,请考虑将此值设置为低于默认值,可能为 0。

此客户端基于 Apache Commons。以下是 Apache Commons 文档 对此选项的描述:"定义在将持久连接租赁给消费者之前必须重新验证的非活动时间(以毫秒为单位)。传递给此方法的非正值将禁用连接验证。此检查有助于检测在池中保持非活动状态时已变得陈旧(半关闭)的连接。"

versionedit

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

用于索引的版本。使用 sprintf 语法,如 %{my_version},在此处使用字段值。有关更多信息,请参阅 版本控制支持博客

version_typeedit

  • 值可以是以下任何一个:internalexternalexternal_gtexternal_gteforce
  • 此设置没有默认值。

用于索引的 version_type。请参阅 版本控制支持博客 和 Elasticsearch 文档中的 版本类型

Elasticsearch 输出已弃用的配置选项edit

此插件支持以下已弃用的配置。

已弃用的选项可能会在将来的版本中被删除。

cacertedit

在 11.14.0 中已弃用。

被替换为 ssl_certificate_authorities

  • 值类型为 path 列表
  • 此设置没有默认值。

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

keystoreedit

在 11.14.0 中已弃用。

被替换为 ssl_keystore_path

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

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

您不能同时使用此设置和 ssl_certificate

keystore_passwordedit

在 11.14.0 中已弃用。

被替换为 ssl_keystore_password

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

设置密钥库密码

ssledit

在 11.14.0 中已弃用。

被替换为 ssl_enabled

  • 值类型为 布尔值
  • 此设置没有默认值。

启用与 Elasticsearch 集群的安全 SSL/TLS 通信。不指定此选项将使用 hosts 中列出的 URL 或从 cloud_id 中提取的方案。如果未指定显式协议,将使用纯 HTTP。

ssl_certificate_verificationedit

在 11.14.0 中已弃用。

被替换为 ssl_verification_mode

用于验证服务器证书的选项。禁用此选项会严重影响安全性。有关禁用证书验证的更多信息,请阅读 https://www.cs.utexas.edu/~shmat/shmat_ccs12.pdf

truststoreedit

在 11.14.0 中已弃用。

被替换为 ssl_truststore_path

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

用于验证服务器证书的信任库。它可以是 .jks.p12。使用 :truststore:cacert

truststore_passwordedit

在 11.14.0 中已弃用。

被替换为 ssl_truststore_password

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

设置信任库密码

通用选项edit

以下配置选项受所有输出插件支持。

设置 输入类型 必需

enable_metric

boolean

id

string

enable_metricedit

  • 值类型为 boolean
  • 默认值为 true

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

idedit

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

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

output {
  elasticsearch {
    id => "my_plugin_id"
  }
}

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