Logstash 输出

编辑

Logstash 输出使用内部协议通过 TCP 直接将事件发送到 Logstash。Logstash 提供对 Elastic Agent 收集数据的额外解析、转换和路由。

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

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

outputs:
  default:
    type: logstash
    hosts: ["127.0.0.1:5044"] 

Logstash 服务器和 Logstash 配置为侦听传入 Elastic Agent 连接的端口 (5044)。

要在 Logstash 中接收事件,还需要创建一个 Logstash 配置管道。Logstash 配置管道侦听传入的 Elastic Agent 连接,处理接收到的事件,然后将事件发送到 Elasticsearch。

以下 Logstash 管道定义示例配置了一个管道,该管道侦听端口 5044 上的传入 Elastic Agent 连接并将接收到的事件路由到 Elasticsearch。

input {
  elastic_agent {
    port => 5044
    enrich => none # don't modify the events' schema at all
    ssl => true
    ssl_certificate_authorities => ["<ca_path>"]
    ssl_certificate => "<server_cert_path>"
    ssl_key => "<server_cert_key_in_pkcs8>"
    ssl_verify_mode => "force_peer"
  }
}

output {
  elasticsearch {
    hosts => ["https://127.0.0.1:9200"] 
    # cloud_id => "..."
    data_stream => "true"
    api_key => "<api_key>" 
    data_stream => true
    ssl => true
    # cacert => "<elasticsearch_ca_path>"
  }
}

Elasticsearch 服务器和 Elasticsearch 运行的端口 (9200)。

Logstash 用于将数据发送到目标数据流的 API 密钥。

有关配置 Logstash 的更多信息,请参考 配置 LogstashElastic Agent 输入插件

Logstash 输出配置设置

编辑

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

常用设置

编辑
设置 描述

enabled

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

escape_html

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

默认值: false

hosts

(列表) 要连接到的已知 Logstash 服务器列表。如果禁用负载均衡,但配置了多个主机,则会随机选择一个主机(没有优先级)。如果一个主机变得不可访问,则会随机选择另一个主机。

此列表中的所有条目都可以包含端口号。如果未指定端口,则使用 5044

proxy_url

(字符串) 连接到 Logstash 服务器时要使用的 SOCKS5 代理的 URL。该值必须是方案为 socks5:// 的 URL。用于与 Logstash 通信的协议不是基于 HTTP 的,因此您不能使用 Web 代理。

如果 SOCKS5 代理服务器需要客户端身份验证,请按示例所示在 URL 中嵌入用户名和密码。

使用代理时,主机名在代理服务器上解析,而不是在客户端上解析。要更改此行为,请设置 proxy_use_local_resolver

outputs:
  default:
    type: logstash
    hosts: ["remote-host:5044"]
    proxy_url: socks5://user:password@socks5-proxy:2233

proxy_use_ local_resolver

(布尔值) 确定使用代理时是否在本地解析 Logstash 主机名。如果为 false 并且使用了代理,则名称解析将在代理服务器上发生。

默认值: false

身份验证设置

编辑

通过 logstash 输出将数据发送到安全集群时,Elastic Agent 可以使用 SSL/TLS。有关可用设置的列表,请参考 SSL/TLS,特别是 表 7,“常用配置选项”表 8,“客户端配置选项” 中的设置。

要使用 SSL/TLS,还必须配置 Logstash 的 Elastic Agent 输入插件 以使用 SSL/TLS。

有关更多信息,请参考 为 Logstash 输出配置 SSL/TLS

内存队列设置

编辑

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

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

内存队列由参数 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 个事件)时,或当事件等待 5 秒而未填充请求的大小:有 512 个事件可用或最旧的可用事件已在队列中等待 5 秒时,将事件转发到输出。

  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

性能调整设置

编辑

可能会影响性能的设置。

设置 描述

backoff.init

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

默认值: 1s

backoff.max

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

默认值: 60s

bulk_max_size

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

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

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

将此值设置为 0 以关闭批次的拆分。关闭拆分时,队列将确定批次中要包含的事件数量。

默认值: 2048

compression_level

(int) gzip压缩级别。设置为0可禁用压缩。压缩级别必须在1(速度最快)到9(压缩率最高)之间。

提高压缩级别会降低网络使用率,但会增加CPU使用率。

默认值: 3

loadbalance

如果设置为true且配置了多个Logstash主机,则输出插件会将发布的事件负载均衡到所有Logstash主机上。如果设置为false,则输出插件会将所有事件发送到一个主机(随机确定),如果选定的主机无响应,则切换到另一个主机。

启用loadbalance

  • Elastic Agent读取事件批次,并根据输出之间共享的工作队列动态地将每个批次发送到一个Logstash工作节点。
  • 如果连接断开,Elastic Agent会将其连接断开的Logstash工作节点从池中移除。
  • Elastic Agent会尝试重新连接。如果成功,则会将Logstash工作节点重新添加到池中。
  • 如果其中一个Logstash节点速度较慢但“运行正常”,它会发送保持活动信号,直到处理完完整的數據批次。这可以防止Elastic Agent在收到来自Logstash的确认信号之前发送更多数据。Elastic Agent会将所有事件保留在内存中,直到收到确认信号。

未启用loadbalance

  • Elastic Agent会随机选择一个Logstash主机,并将事件批次发送到该主机。由于使用了随机算法,Logstash节点上的负载应该大致相等。
  • 如果出现任何错误,Elastic Agent也会随机选择另一个Logstash节点。如果与主机的连接失败,只有在新连接出现错误时才会重试该主机。

默认值: false

示例

outputs:
  default:
    type: logstash
    hosts: ["localhost:5044", "localhost:5045"]
    loadbalance: true

max_retries

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

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

默认值: 3

pipelining

(int) 在等待来自Logstash的ACK期间异步发送到Logstash的批次数量。写入指定数量的批次后,输出将变为阻塞。指定0可关闭流水线。

默认值: 2

slow_start

(boolean) 如果设置为true,则每次事务只传输事件批次中的一部分事件。如果没有遇到错误,要发送的事件数量会增加到bulk_max_size。如果发生错误,每次事务的事件数量会再次减少。

默认值: false

timeout

(string) 在超时之前等待Logstash服务器响应的秒数。

默认值: 30s

ttl

(string) 与Logstash的连接的生存时间,在此时间之后将重新建立连接。当Logstash主机代表负载均衡器时,此设置很有用。由于与Logstash主机的连接是粘性的,因此在负载均衡器后面运行会导致跨实例的负载分配不均匀。在连接上指定TTL可以实现跨实例的均衡连接分配。

默认值: 0(关闭此功能)

异步Logstash客户端(pipelining选项已设置)尚不支持ttl选项。

worker

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

默认值: 1