技巧与最佳实践

编辑

技巧与最佳实践

编辑

我们正在添加更多技巧和最佳实践,请稍后回来查看。如果您有任何建议,请

同时,请查看 Logstash 讨论论坛

命令行

编辑

Windows 操作系统上的 Shell 命令

编辑

命令行示例通常显示单引号。在 Windows 系统上,将单引号 ' 替换为双引号 "

示例

代替

bin/logstash -e 'input { stdin { } } output { stdout {} }'

在 Windows 系统上使用此格式

bin\logstash -e "input { stdin { } } output { stdout {} }"

管道

编辑

管道管理

编辑

您可以使用本地管道配置或 Kibana 中的集中式管道管理来管理 Logstash 实例中的管道。

在您配置 Logstash 使用集中式管道管理后,您将无法再指定本地管道配置。当启用集中式管道管理时,pipelines.yml 文件和 path.configconfig.string 等设置将处于非活动状态。

使用过滤器的技巧

编辑

检查布尔字段是否存在

编辑

您可以使用 mutate 过滤器来查看布尔字段是否存在。

Logstash 支持 [@metadata] 字段——这些字段对输出插件不可见,仅在过滤状态下存在。您可以使用带有 mutate 过滤器的 [@metadata] 字段来查看字段是否存在。

filter {
  mutate {
    # we use a "temporal" field with a predefined arbitrary known value that
    # lives only in filtering stage.
    add_field => { "[@metadata][test_field_check]" => "a null value" }

    # we copy the field of interest into that temporal field.
    # If the field doesn't exist, copy is not executed.
    copy => { "test_field" => "[@metadata][test_field_check]" }
  }


  # now we now if testField didn't exists, our field will have
  # the initial arbitrary value
  if [@metadata][test_field_check] == "a null value" {
    # logic to execute when [test_field] did not exist
    mutate { add_field => { "field_did_not_exist" => true }}
  } else {
    # logic to execute when [test_field] existed
    mutate { add_field => { "field_did_exist" => true }}
  }
}

Kafka

编辑

Kafka 设置

编辑
每个主题的分区数
编辑

“每个主题我应该使用多少个分区?”

至少是 Logstash 节点数量乘以每个节点的使用者线程数。

更好的是,使用上述数字的倍数。增加现有主题的分区数非常复杂。分区开销非常低。使用第一点建议的分区数的 5 到 10 倍通常是可以的,只要总分区数不超过 2000 个即可。

倾向于过度分区,总分区数最多为 1000 个。尽量不要超过 1000 个分区。

使用者线程
编辑

“我应该配置多少个使用者线程?”

较低的值往往更有效率,内存开销更少。尝试使用值 1,然后逐步增加。该值通常应低于管道工作线程数。大于 4 的值很少能带来性能提升。

Kafka 输入和持久队列 (PQ)

编辑
Kafka 偏移量提交
编辑

“Kafka 输入是否仅在事件安全地持久化到 PQ 后才提交偏移量?”

“Kafka 输入是否仅对完全通过管道的事件提交偏移量?”

不,我们不能保证这一点。偏移量会定期提交到 Kafka。如果写入 PQ 的速度很慢或被阻止,则可以提交尚未安全到达 PQ 的事件的偏移量。