logstash优化

作者: 魔曦帝天 | 来源:发表于2019-12-24 13:53 被阅读0次

    zabbix

    http://www.ttlsa.com/zabbix/zabbix_server-conf-detail/
    https://blog.csdn.net/zhs2014150551/article/details/48975931
    https://segmentfault.com/a/1190000008942618

    logstash

    input,常见得输入内容

    1) file:从文件系统上的文件读取,与UNIX命令非常相似 tail -0F
    2) syslog:在已知端口上侦听syslog消息进行解析
    3) redis:使用redis通道和redis列表从redis服务器读取。Redis通常用作集中式Logstash安装中的“代理”,该安装将Logstash事件从远程Logstash“托运人”排队。
    4) beats:处理 Beats发送的事件,beats包括filebeat、packetbeat、winlogbeat。
    

    filter,常见的过滤器

    1) grok:解析并构造任意文本。Grok是目前Logstash中将非结构化日志数据解析为结构化和可查询内容的最佳方式。Logstash内置了120种模式,您很可能会找到满足您需求的模式!
    2) mutate:对事件字段执行常规转换。您可以重命名,删除,替换和修改事件中的字段。
    3) drop:完全删除事件,例如调试事件。
    4) clone:制作事件的副本,可能添加或删除字段。
    5) geoip:添加有关IP地址的地理位置的信息(也在Kibana中显示惊人的图表!)
    

    output输出内容

    1) elasticsearch:将事件数据发送给Elasticsearch。如果您计划以高效,方便且易于查询的格式保存数据...... Elasticsearch是您的最佳选择
    2) file:将事件数据写入磁盘上的文件。
    3) graphite:将事件数据发送到graphite,这是一种用于存储和绘制指标的流行开源工具。http://graphite.readthedocs.io/en/latest/
    4) statsd:将事件数据发送到statsd,这是一种“侦听统计信息,如计数器和定时器,通过UDP发送并将聚合发送到一个或多个可插入后端服务”的服务。如果您已经在使用statsd,这可能对您有用!
    
    影响logstash性能因素如下:

    logstash是一个pipeline,数据流从input进来,在filter进行正则解析,然后通过output传输给ES。

    filebeat->logstash tcp连接
    logstash->es tcp连接
    logstash input
    logstash filter
    logstash output
    

    logstash filter & logstash output ( 瓶颈)

    升级logstash版本 1.7 -> 2.2
    2.2版本之后的logstash优化了input,filter,output的线程模型。

    增大 filter和output worker 数量 通过启动参数配置 -w 48 (等于cpu核数)

    logstash正则解析极其消耗计算资源,而我们的业务要求大量的正则解析,因此filter是我们的瓶颈。
    官方建议线程数设置大于核数,因为存在I/O等待。
    考虑到我们当前节点同时部署了ES节点,ES对CPU要求性极高,因此设置为等于核数。
    

    增大 woker 的 batch_size 150 -> 3000 通过启动参数配置 -b 3000

       batch_size 参数决定 logstash 每次调用ES bulk index API时传输的数据量,考虑到我们节点机256G内存,应该增大内存消耗换取更好的性能。
    

    增大logstash 堆内存 1G -> 16G

       logstash是将输入存储在内存之中,worker数量 * batch_size = n * heap (n 代表正比例系数)
    

    worker * batch_size / flush_size = ES bulk index api 调用次数

    优化

    在配置文件中可以通过配置pipeline.workers来调整filter和
    output的线程数
    网友的测评数据是两个点的logstah可以承受600+的连接数

    pipeline.workers:
    决定filter和output的线程数,官方建议大于CPU数,如果logstah节点是混用服务器,
    建议等于或小于CPU数
    
    pipeline.batch.size:
    单个线程每次调用ES bulk index API时的事件数。
    这些时间将被放到内存中。最好的设定值是不断地测试,测试,测试。
    
    JVM_heap:内存堆大小,通过配置jvm_option来修改。
    

    logstash的优化相关配置

    实际output 时的线程数

    默认配置 ---> pipeline.output.workers: 1

    可优化为 ---> pipeline.output.workers: 不超过pipeline 线程数
    

    每次发送的事件数

    默认配置 ---> pipeline.batch.size: 125
    
    可优化为 ---> pipeline.batch.size: 1000
    

    发送延时

    默认配置 ---> pipeline.batch.delay: 5
    
    可优化为 ---> pipeline.batch.size: 10
    

    总结

    通过设置-w参数指定pipeline worker数量,也可直接修改配置文件logstash.yml。这会提高filter和output的线程数,如果需要的话,将其设置为cpu核心数的几倍是安全,线程在I/O上是空闲的。

    默认每个输出在一个pipeline worker线程上活动,可以在输出output中设置workers设置,不要将该值设置大于pipeline worker数。

    还可以设置输出的batch_size数,例如ES输出与batch size一致。

    filter设置multiline后,pipline worker会自动将为1,如果使用filebeat,建议在beat中就使用multiline,如果使用logstash作为shipper,建议在input 中设置multiline,不要在filter中设置multiline。

    (3)Logstash中的JVM配置文件

    Logstash是一个基于Java开发的程序,需要运行在JVM中,可以通过配置jvm.options来针对JVM进行设定。比如内存的最大最小、垃圾清理机制等等。JVM的内存分配不能太大不能太小,太大会拖慢操作系统。太小导致无法启动。默认如下:

    -Xms256m #最小使用内存
    
    -Xmx1g #最大使用内存
    

    参考文档:
    https://www.cnblogs.com/along21/p/8613115.html#auto_id_12
    https://blog.csdn.net/weixin_34092455/article/details/91719799
    https://www.cnblogs.com/along21/p/8613115.html

    相关文章

      网友评论

        本文标题:logstash优化

        本文链接:https://www.haomeiwen.com/subject/evegnctx.html