技巧和最佳实践
编辑技巧和最佳实践编辑
我们正在添加更多技巧和最佳实践,敬请期待。如果您有任何要添加的内容,请
- 在 https://github.com/elastic/logstash/issues 创建问题,或
- 在 https://github.com/elastic/logstash 创建包含您建议更改的拉取请求。
还可以查看 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.config
和 config.string
等设置将失效。
使用过滤器的技巧编辑
检查布尔字段是否存在编辑
您可以使用 mutate 过滤器来查看布尔字段是否存在。
Logstash 支持 [@metadata] 字段,这些字段对输出插件不可见,并且仅在过滤状态下存在。您可以将 [@metadata] 字段与 mutate 过滤器一起使用,以查看字段是否存在。
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 后才提交偏移量?”
“Kafa 输入是否仅对已完全通过管道的事件提交偏移量?”
不,我们不能保证这一点。偏移量会定期提交给 Kafka。如果写入 PQ 的速度缓慢或阻塞,则可以提交尚未安全到达 PQ 的事件的偏移量。