配置 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 时,schemepath 取自 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 中指定的任何 scheme 覆盖。

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 实例。

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

默认值: 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 在 HTTP 反向代理后面侦听,该代理在自定义前缀下导出 API 的情况很有用。

内存队列设置

编辑

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

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

内存队列由参数 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 开始,使用 bulk_max_size 而不是 flush.min_events 来限制批处理大小永远没有性能优势。

在同步模式下,即使没有足够的事件来填充请求的批处理,事件请求也会在事件可用时立即填充。当必须最小化延迟时,这很有用。要使用同步模式,请将 flush.timeout 设置为 0。

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

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

此示例配置在有足够的事件来填充输出的请求时(通常由 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 开始,使用 bulk_max_size 而不是 flush.min_events 来限制批处理大小永远没有性能优势

默认值: 1600 个事件

queue.mem.flush.timeout

(整数)满足 queue.mem.flush.min_events 的最长等待时间。如果设置为 0 秒,则事件立即可用于输出。

默认值: 10 秒

性能调优设置

编辑

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

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

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

设置 描述

backoff.init

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

默认值: 1 秒

backoff.max

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

默认值: 60 秒

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 请求超时时间(以秒为单位)。

默认值: 90 秒

worker

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

默认值: 1