简介

  ELK技术栈中的logstash起到了管道的作用,其主要的功能可以看做input-filter-output这几样,因此可以看住logstash在数据传输中的作用就是对数据进行一定程度的修改。一般我们是用此来使数据格式更加规范,符合我们期望的格式,从而在kibana或者ES检索更加方便。

主要组成

  logstash下载即用,对环境的要求是jre,11以上就能完全使用了。其中bin目录是主文件,config目录是配置目录,有关属性配置,性能调优都在这一块。一般主要用到的是logstash-sample.conf,input-filter-output都写在这一块。
  顾名思义,input就是获取数据,filter就是过滤器,也是我们处理数据的地方,output则是输出到指定地区。本笔记以从kafka获取数据,输出到ES为示例。

input

  input区域较为简洁,我们从kafka获取数据可以这样按下示例子写。具体配置参见这里

input{    kafka{ #一个input中可以写多个kafka        bootstrap_servers => "localhost:9092" #这里是kafka的地址,如果要从多个kafka获取数据的话可以以逗号分隔        topic => "nginx" #指定从kafka的哪个topic获取数据        codec => json{            charset => "UTF-8"        } #如果数据是json格式可直接在这里进行转换        consumer_threads => 2 #使用多少个消费者线程,尽量与分区数一致        enable_auto_commit => true #是否启用自动告诉kafka成功消费的偏移量(或索引),下次会自动以该偏移量为消耗的初始偏移量        auto_offset_reset => "latest" #初始时将偏移量移到最新偏移量        auto_commit_interval_ms => "1000" #定时提交偏移量的时间间隔        group_id => "logstash" #指定该消费者的group_id。可用于负载均衡        add_field => {            "[@metadata][type]" => "nginx" #以@metadata来存放数据的是不会被output的,除某些被配置了metadata => true的配置项        }#增加数据的字段    }}

filter

  filter区是我们处理数据的主力区域,数据的处理流程都在这里写就。filter是通过一个个插件组合实现的,具体的插件以及参数可以从这里看。目前插件数量有46种,常用的有date drop grok json mutate。filter区域的写法如下,其格式与input的大致相同的。

filter{    plugin{        ...some param    }}

  需要重视的是各个插件的组合使用。下文涉及的所有tag都会放在最外层的tags的列表里。插件通用继承了的且常用方法有add_field add_tag id remove_field remove_tag这些方法在任意一个filter中都可以使用。

date

filter{    date{        match=>["client_time","yyyy-MM-dd HH:mm:ss"] #若client_time字段与后者匹配则替换target,会变成UTC时间,标准时区        target=>"real time" #target默认为@timestamp    }}

drop

filter{    if [Level] == "DEBUG"{#利用[filed]的语法可访问字段,可嵌套        drop {} #drop后日志就会被丢弃    }}

grok

  grok是十分重要的插件,用于按正则提取信息后自动赋值到字段。更进一步的使用规则可以点击这里。

filter{    match =>{        prtterns_dir => ["./patterns"] #如果你有需要可以自己定义一个规则        "message" => "%{IP:client} %{Number:times:int}" #match会按字段=>正则的形式提取信息,其%{IP:client}中,IP是内置规则,client是欲赋值的字段名,默认值均为字符串,如果已知类型可以加以转换,如在后面加上:int来转化为整数型    }}

  内置的规则你可以从这里查看。

json

filter{    json {        source => "message" #指定需要解码的字段        target => "jsoncontent" #指定存放解码后内容的字段,如果不写将会把所有字段释放在最外层        remove_field => "test" #删除名为test的字段    }#如果解码失败会产生一个"_jsonparsefailure"的tag,当然你也可以用tag_on_failure来指定}

mutate

  mutate是用于数据修改、字符串处理、类型转换等重要功能的插件。

filter{    mutate {        split => ["hostname","."] #会被原地替换        add_field => { "shortHostname" => "%{hostname[0]}" }    }    mutate {        rename => ["shortHostname","hostname"] #替换    }    mutate {        convert => {            "fieldname" => "integer"            "booleanfield" => "boolean"        }    }}

  由于功能繁多,建议一定要去看官方文档。

output

  output的格式与input的格式类似。

output{    elasticsearch{        hosts => ["localhost:9200"]    }}

更多的设置,如修改index等,可参考官方文档使用。

性能调优

  logstash的性能与内存占用向来为人所诟病,因此我们要关注的是单独抽离logstash,使其独立成为集群。轻量级的beat的为此提供了解决方案,不需要依赖,内存与cpu消耗极低,而kafka则是缓解了生产者与消费者时间-速率不一致的矛盾。从而我们可以通过拓展logstash集群从而达到提高处理速率的目的。其中,我们也可以通过调整logstash的参数来提高其性能。

  • worker 调整worker数量,可以提高filter的效率,一般可设置为略高于CPU数
  • batch_size 调整worker一次批量处理的条数,默认为150,其与ES的bulk写入次数相关。
  • Output.flush_size&Output.idle_flush_time 控制lush的大小与频率
  • Filter.grok 尽量用合适的类型分割字段,尽量避免使用DATA,增加一定的锚点可提高grok性能

logstash 获取多个kafka_logstash 配置详解相关推荐

  1. mybatis获取表名_mybatis plus 的动态表名的配置详解

    mybatis plus简介 详见mybatis plus的官网 业务要求 业务上要求存储数据的时候根据某个字段动态的选择数据要存储的表. 如根据code字段: code->[1001,1002 ...

  2. mybatis 同名方法_MyBatis(四):xml配置详解

    目录 1.我们将 数据库的配置语句写在 db.properties 文件中 2.在 mybatis-configuration.xml 中加载db.properties文件并读取 通过源码我们可以分析 ...

  3. spring之旅第四篇-注解配置详解

    spring之旅第四篇-注解配置详解 一.引言 最近因为找工作,导致很长时间没有更新,找工作的时候你会明白浪费的时间后面都是要还的,现在的每一点努力,将来也会给你回报的,但行好事,莫问前程!努力总不会 ...

  4. php-fpm 启动参数及重要配置详解

    2019独角兽企业重金招聘Python工程师标准>>> php-fpm 启动参数及重要配置详解 约定几个目录 /usr/local/php/sbin/php-fpm /usr/loc ...

  5. [转]阿里巴巴数据库连接池 druid配置详解

    一.背景 java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池.数据库连接池有很多选择,c3p.dhcp.proxool等,druid作为一名后起之秀,凭借其出色 ...

  6. varnish配置详解

       varnish配置详解 能用到缓存的服务器的原因是,应用到了程序的局部性. 空间局部性:一个程序最近访问了一个空间,那么他周边的空间也将被访问. 时间的局部性:一条指令一段时间内被执行,之后的一 ...

  7. 深入浅出Mybatis系列(四)---配置详解之typeAliases别名(mybatis源码篇)

    上篇文章<深入浅出Mybatis系列(三)---配置详解之properties与environments(mybatis源码篇)> 介绍了properties与environments, ...

  8. Spring框架深入(四)--SpringMVC配置详解

    一.SpringMVC web模型 二.@RequestMapping参数说明 1.value:定义处理方法的请求的URL地址: 2.method:定义处理的方法的http method类型,如GET ...

  9. squid 的配置详解 (转)--SeriesI 收藏

    squid 的配置详解 (转)--SeriesI 收藏   使用过一段时间的SQUID代理,感觉虽然挺好用的单是过程还是挺曲折的,这个期间也在网络到处搜索了很多关于SQUID的说明文档,和教程.但是显 ...

最新文章

  1. HttpURLConnection 请求
  2. qstring 属于元数据类型吗_2020年退休养老金只有1800元,属于什么水平?还要继续工作吗?...
  3. c++智能指针 示例讲解
  4. Linux内存Mem和Swap那点事,Linux内存 mem 和 swap
  5. 牛客网——今年的第几天
  6. VGA显示器驱动设计与验证
  7. Docker Installation : Docker 中安装并启动 Kong
  8. 学习Android移植平台工具介绍的心得体会
  9. find查找文件和目录
  10. 练习题 - 基于快速文本标题匹配的知识问答实现(二,实现篇)
  11. 自考 02333 软件工程 思维导图 结构化方法
  12. 为什么篮球一进游戏就服务器中断,街头篮球手游进不去 进不去游戏无非这两种原因...
  13. ramdisk实践2:ramdisk制作以及解决传参问题的编程详解
  14. python自动轨迹绘制七边形_【高德地图API】从零开始学高德JS API(三)覆盖物
  15. Dataway让Spring Boot不再需要Controller、Service、DAO、Mapper
  16. 【Redis】分布式限流与Redis实现限流的四种方式(Redis专栏启动)
  17. 超市收费系统云服务器,云服务器超市
  18. 先序遍历的顺序建立二叉链表
  19. [英语阅读]美国首家大麻餐馆开业
  20. 我看亨德利和奥沙利文(比较客观)

热门文章

  1. Android23版本以上删除HttpClient的解决办法
  2. tron区块链php对接,Tron区块链技术 - Tron智能合约概述
  3. f1 score 代码_腾讯广告算法大赛冠军代码解读:稠密特征工程
  4. 使用dict和set
  5. 计算机在社会服务方面的作用,计算机在档案管理中的作用
  6. 内地高校招收澳门保送生公布录取结果 882名学生获录取
  7. (一)Spring MVC简介
  8. Android ORM 框架:GreenDao 数据库升级
  9. 微软公司部署小型数据中心网络连接产品
  10. 如何安装使用MQCache缓存服务器(适用X300型或者X500型)