配置 Elasticsearch 输出

编辑

Elasticsearch 输出使用 Elasticsearch HTTP API 将事件直接发送到 Elasticsearch。

兼容性: 此输出适用于所有兼容版本的 Elasticsearch。请参阅 Elastic 支持矩阵

此示例在 elastic-agent.yml 文件中配置名为 default 的 Elasticsearch 输出

outputs:
  default:
    type: elasticsearch
    hosts: [127.0.0.1:9200]
    username: elastic
    password: changeme

此示例与上一个示例类似,不同之处在于它使用了推荐的 基于令牌(API 密钥)的身份验证

outputs:
  default:
    type: elasticsearch
    hosts: [127.0.0.1:9200]
    api_key: "my_api_key"

Elastic Cloud Serverless 环境中需要基于令牌的身份验证。

Elasticsearch 输出配置设置

编辑

elasticsearch 输出类型支持以下按类别分组的设置。许多这些设置都具有合理的默认值,允许您以最少的配置运行 Elastic Agent。

常用设置

编辑
设置 描述

enabled

(布尔值) 启用或禁用输出。如果设置为 false,则禁用输出。

默认值: true

hosts

(列表) 要连接到的 Elasticsearch 节点列表。事件将以轮询方式分发到这些节点。如果一个节点变得不可访问,则事件会自动发送到另一个节点。每个 Elasticsearch 节点都可以定义为 URLIP:PORT。例如:http://192.15.3.2https://es.found.io:9230192.24.3.2:9300。如果未指定端口,则使用 9200

当节点定义为 IP:PORT 时,方案路径取自 protocolpath 设置。

outputs:
  default:
    type: elasticsearch
    hosts: ["10.45.3.2:9220", "10.45.3.1:9230"] 
    protocol: https
    path: /elasticsearch

在此示例中,Elasticsearch 节点可在 https://10.45.3.2:9220/elasticsearchhttps://10.45.3.1:9230/elasticsearch 访问。

请注意,Elastic Cloud Serverless 环境中的 Elasticsearch 节点在 443 端口上公开。

protocol

(字符串) Elasticsearch 可访问的协议名称。选项包括:httphttps。默认为 http。但是,如果您为 hosts 指定 URL,则 protocol 的值将被您在 URL 中指定的任何方案覆盖。

proxy_disable

(布尔值) 如果设置为 true,则忽略所有代理设置,包括 HTTP_PROXYHTTPS_PROXY 变量。

默认值: false

proxy_headers

(字符串) 在 CONNECT 请求期间发送到代理的附加标头。

proxy_url

(字符串) 连接到 Elasticsearch 服务器时使用的代理的 URL。该值可以是完整的 URL 或 host[:port],在这种情况下,假设使用 http 方案。如果未通过配置文件指定值,则使用代理环境变量。有关环境变量的更多信息,请参阅 Go 文档

身份验证设置

编辑

通过 elasticsearch 输出将数据发送到安全集群时,Elastic Agent 可以使用以下任何身份验证方法

基本身份验证凭据
编辑
outputs:
  default:
    type: elasticsearch
    hosts: ["https://myEShost:9200"]
    username: "your-username"
    password: "your-password"
设置 描述

password

(字符串) 连接到 Elasticsearch 的基本身份验证密码。

username

(字符串) 连接到 Elasticsearch 的基本身份验证用户名。

此用户需要将事件发布到 Elasticsearch 的所需权限。

请注意,在 Elastic Cloud Serverless 环境中,您需要使用 基于令牌(API 密钥)的身份验证

基于令牌(API 密钥)的身份验证
编辑
outputs:
  default:
    type: elasticsearch
    hosts: ["https://myEShost:9200"]
    api_key: "KnR6yE41RrSowb0kQ0HWoA"
设置 描述

api_key

(字符串) 您可以使用 API 密钥 来保护与 Elasticsearch 的通信安全,而不是使用用户名和密码。该值必须是 API 密钥的 ID 和 API 密钥,用冒号分隔:id:api_key。在 Elastic Cloud Serverless 环境中需要基于令牌的身份验证。

公钥基础设施 (PKI) 证书
编辑
outputs:
  default:
    type: elasticsearch
    hosts: ["https://myEShost:9200"]
    ssl.certificate: "/etc/pki/client/cert.pem"
    ssl.key: "/etc/pki/client/cert.key"

有关可用设置的列表,请参阅 SSL/TLS,特别是 表 7,“常用配置选项”表 8,“客户端配置选项” 下的设置。

Kerberos
编辑

支持以下加密类型:

  • aes128-cts-hmac-sha1-96
  • aes128-cts-hmac-sha256-128
  • aes256-cts-hmac-sha1-96
  • aes256-cts-hmac-sha384-192
  • des3-cbc-sha1-kd
  • rc4-hmac

使用 Kerberos 基于密码的身份验证的示例输出配置

outputs:
  default:
    type: elasticsearch
    hosts: ["http://my-elasticsearch.elastic.co:9200"]
    kerberos.auth_type: password
    kerberos.username: "elastic"
    kerberos.password: "changeme"
    kerberos.config_path: "/etc/krb5.conf"
    kerberos.realm: "ELASTIC.CO"

Elasticsearch 实例的服务主体名称由这些选项构建。基于此配置,名称将为:

HTTP/[email protected]

设置 描述

kerberos.auth_type

(字符串) 要与 Kerberos KDC 一起使用的身份验证类型

password
如果指定此选项,还需设置 kerberos.usernamekerberos.password
keytab
如果指定此选项,还需设置 kerberos.usernamekerberos.keytab。keytab 必须包含所选主体的密钥,否则身份验证将失败。

默认值: password

kerberos.config_path

(字符串) krb5.conf 的路径。Elastic Agent 使用此设置查找 Kerberos KDC 以检索票证。

kerberos.enabled

(布尔值) 启用或禁用 Kerberos 配置。

如果 enabled 设置为 false 或缺少 kerberos 部分,则禁用 Kerberos 设置。

kerberos.enable_krb5_fast

(布尔值) 如果为 true,则启用 Kerberos FAST 身份验证。这可能会与某些 Active Directory 安装冲突。

默认值: false

kerberos.keytab

(字符串) 如果 kerberos.auth_typekeytab,则提供所选主体的 keytab 路径。

kerberos.password

(字符串) 如果 kerberos.auth_typepassword,则提供所选主体的密码。

kerberos.realm

(字符串) 输出所在的领域的名称。

kerberos.username

(字符串) 用于连接到输出的主体的名称。

兼容性设置
编辑
设置 描述

allow_older_versions

允许 Elastic Agent 连接并向运行的 Elasticsearch 实例发送输出,该实例的版本早于 Agent 版本。

请注意,此设置不会影响 Elastic Agent 连接到 Fleet Server 的能力。Fleet Server 不会接受来自主要或次要版本较新的 Agent 的连接。它将接受来自补丁版本较新的 Agent 的连接。例如,版本 8.14.3 的 Elastic Agent 可以连接到版本 8.14.0 的 Fleet Server,但版本 8.15.0 或更高版本的 Agent 无法连接。

默认值: true

数据解析、过滤和操作设置
编辑

用于解析、过滤和转换数据的设置。

设置 描述

escape_html

(布尔值) 配置字符串中 HTML 的转义。设置为 true 以启用转义。

默认值: false

pipeline

(字符串) 指定要将事件写入的 摄取管道 的格式字符串值。

outputs:
  default:
    type: elasticsearchoutput.elasticsearch:
    hosts: ["https://127.0.0.1:9200"]
    pipeline: my_pipeline_id

您可以使用格式字符串访问任何事件字段来动态设置摄取管道。例如,此配置使用自定义字段 fields.log_type 为每个事件设置管道

outputs:
  default:
    type: elasticsearch  hosts: ["https://127.0.0.1:9200"]
    pipeline: "%{[fields.log_type]}_pipeline"

通过此配置,所有具有 log_type: normal 的事件都将发送到名为 normal_pipeline 的管道,所有具有 log_type: critical 的事件都将发送到名为 critical_pipeline 的管道。

要了解如何向事件添加自定义字段,请参阅 fields 选项。

有关以其他方式动态设置摄取管道的更多信息,请参阅 pipelines 设置。

pipelines

管道选择器规则数组。每个规则指定用于匹配规则的事件的 摄取管道。在发布过程中,Elastic Agent 使用数组中的第一个匹配规则。规则可以包含条件语句、基于格式字符串的字段和名称映射。如果缺少 pipelines 设置或没有规则匹配,则使用 pipeline 设置。

规则设置

pipeline
要使用的管道格式字符串。如果此字符串包含字段引用,例如 %{[fields.name]},则必须存在这些字段,否则规则将失败。
mappings
一个字典,它采用 pipeline 返回的值并将其映射到新名称。
default
如果 mappings 未找到匹配项,则要使用的默认字符串值。
when
必须成功的条件才能执行当前规则。

此处也支持处理器支持的所有条件。

以下示例根据 message 字段是否包含指定的字符串将事件发送到特定管道

outputs:
  default:
    type: elasticsearch  hosts: ["https://127.0.0.1:9200"]
    pipelines:
      - pipeline: "warning_pipeline"
        when.contains:
          message: "WARN"
      - pipeline: "error_pipeline"
        when.contains:
          message: "ERR"

下面的示例通过获取 pipeline 格式字符串返回的名称,并将其映射到用于管道的新的名称来设置管道。

outputs:
  default:
    type: elasticsearch
    hosts: ["https://127.0.0.1:9200"]
    pipelines:
      - pipeline: "%{[fields.log_type]}"
        mappings:
          critical: "sev1_pipeline"
          normal: "sev2_pipeline"
        default: "sev3_pipeline"

使用此配置,所有具有 log_type: critical 的事件都将发送到 sev1_pipeline,所有具有 log_type: normal 的事件都将发送到 sev2_pipeline,所有其他事件都将发送到 sev3_pipeline

HTTP 设置

编辑

修改发送到 Elasticsearch 的 HTTP 请求的设置。

设置 描述

headers

要添加到 Elasticsearch 输出创建的每个请求的自定义 HTTP 标头。

示例

outputs:
  default:
    type: elasticsearch
    headers:
      X-My-Header: Header contents

通过逗号分隔它们来指定同一标头名称的多个标头值。

parameters

要与索引操作一起在 URL 中传递的 HTTP 参数字典。

path

(字符串)添加到 HTTP API 调用的 HTTP 路径前缀。这对于 Elasticsearch 在导出 API 的自定义前缀下的 HTTP 反向代理后面侦听的情况很有用。

内存队列设置

编辑

内存队列将所有事件保留在内存中。

内存队列等待输出确认或丢弃事件。如果队列已满,则无法将新事件插入内存队列。只有在来自输出的信号之后,队列才会释放空间以接受更多事件。

内存队列由参数 flush.min_eventsflush.timeout 控制。flush.min_events 限制单个批次中可以包含的事件数量,flush.timeout 指定队列应等待多长时间才能完全填充事件请求。如果输出支持 bulk_max_size 参数,则最大批次大小将是 bulk_max_sizeflush.min_events 中较小的一个。

flush.min_events 是一个旧参数,新的配置应优先使用 bulk_max_size 来控制批次大小。从 8.13 版本开始,使用 flush.min_events 而不是 bulk_max_size 来限制批次大小永远不会带来性能优势。

在同步模式下,只要事件可用,就会立即填充事件请求,即使没有足够的事件来填充请求的批次也是如此。当必须将延迟降至最低时,这很有用。要使用同步模式,请将 flush.timeout 设置为 0。

为了向后兼容,也可以通过将 flush.min_events 设置为 0 或 1 来激活同步模式。在这种情况下,批次大小将限制为队列容量的一半。

在异步模式下,事件请求将等待最长指定的超时时间以尝试完全填充请求的批次。如果超时到期,队列将返回包含所有可用事件的部分批次。要使用异步模式,请将 flush.timeout 设置为正持续时间,例如 5s。

此示例配置在有足够的事件来填充输出的请求(通常由 bulk_max_size 控制,并且由 flush.min_events 限制为最多 512 个事件)时或事件已等待时将事件转发到输出。

  queue.mem.events: 4096
  queue.mem.flush.min_events: 512
  queue.mem.flush.timeout: 5s
设置 描述

queue.mem.events

队列可以存储的事件数。此值应被 queue.mem.flush.min_eventsbulk_max_size 中较小的一个整除,以避免向输出发送部分批次。

默认值: 3200 个事件

queue.mem.flush.min_events

flush.min_events 是一个旧参数,新的配置应优先使用 bulk_max_size 来控制批次大小。从 8.13 版本开始,使用 flush.min_events 而不是 bulk_max_size 来限制批次大小永远不会带来性能优势。

默认值: 1600 个事件

queue.mem.flush.timeout

(整数) queue.mem.flush.min_events 满足的最大等待时间。如果设置为 0s,则事件将立即提供给输出。

默认值: 10s

性能调整设置

编辑

通过 Elasticsearch 输出发送数据时可能会影响性能的设置。

使用 preset 选项自动配置性能调整设置组以针对 throughputscalelatency 进行优化,或者您可以选择一组 balanced 的性能规范。

性能调整 preset 值优先于可能单独定义的任何设置。如果要更改任何设置,请将 preset 设置为 custom 并分别指定性能调整设置。

设置 描述

backoff.init

(字符串)网络错误后等待尝试重新连接到 Elasticsearch 的秒数。等待 backoff.init 秒后,Elastic Agent 尝试重新连接。如果尝试失败,则回退计时器将呈指数级增加,直到达到 backoff.max。成功连接后,回退计时器将重置。

默认值: 1s

backoff.max

(字符串)网络错误后等待尝试连接到 Elasticsearch 的最大秒数。

默认值: 60s

bulk_max_size

(整数)在单个 Elasticsearch 批量 API 索引请求中批量处理的事件最大数量。

事件可以收集到批次中。Elastic Agent 将把大于 bulk_max_size 的批次拆分为多个批次。

指定更大的批次大小可以通过降低发送事件的开销来提高性能。但是,较大的批次大小也会增加处理时间,这可能会导致 API 错误、连接中断、发布请求超时以及最终导致吞吐量降低。

bulk_max_size 设置为小于或等于 0 的值将关闭批次的拆分。禁用拆分时,队列将决定批次中包含的事件数量。

默认值: 1600

compression_level

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

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

默认值: 1

max_retries

(整数)发布失败后重试发布事件的次数。在指定的重试次数后,事件通常会被丢弃。

max_retries 设置为小于 0 的值以重试直到发布所有事件。

默认值: 3

preset

配置性能调整设置的完整组,以优化将数据发送到 Elasticsearch 输出时的 Elastic Agent 性能。

请参阅 性能调整设置,其中包含一个表格,显示与任何预设关联的值组,以及另一个表格,显示不同预设选项测试的每秒事件数 (EPS) 结果。

性能调整预设设置

balanced
配置“开箱即用”性能的默认调整设置值。
throughput
针对吞吐量优化 Elasticsearch 输出。
scale
针对规模优化 Elasticsearch 输出。
latency
优化 Elasticsearch 输出以减少延迟。
custom
使用 custom 选项分别微调性能调整设置。

默认值: balanced

timeout

(字符串)Elasticsearch 请求的 HTTP 请求超时(秒)。

默认值: 90s

worker

(整数)每个配置的主机发布事件的工作程序数量。例如:如果您有两个主机和三个工作程序,则总共启动六个工作程序(每个主机三个)。

默认值: 1