视频地址
B站视频地址:Logstash如何成为镇得住局面的数据管道
公众号视频地址:Logstash如何成为镇得住局面的数据管道
知乎视频地址:Logstash如何成为镇得住局面的数据管道
内容
首先咱们连续上一期视频中日志采集架构的案例,Filebeat采集日志并推送Kafka音讯队列进行散发,再由Logstash生产日志音讯,并将日志数据最终落地在Elasticsearch集群索引当中,Kafka作为音讯队列散发服务须要将收集到的日志音讯持续散发上来,最终数据落地在Elasticsearch集群索引当中。
那么连贯整个过程的配角Logstash是如何工作的,就是咱们明天解说的重点。
Logstash工作过程分为三个局部:Input输出、Filter过滤、Output输入,它们独特合作造成了残缺的Logstash数据管道传输机制
咱们先从一个最简略的例子演示开始,看看Logstash是怎么输出和输入的,这一次先跳过filter过滤环节。
上面查看曾经预置好的一个配置文件01-kafka-elastic-nginx.conf
首先是input输出配置点,从Kafka订阅音讯,Kafka集群地址与filebeat中都指向了一个地址,其余配置咱们先略过,后续Kafka专题再说
下来看到要订阅的Topic主题TestT3,咱们先不必json格局解码音讯,默认就是纯文本的形式
一样的,这一步先略过过滤环节,间接看看output输入配置点,指标是给Elasticsearch输入数据,并指定了elasticsearch集群的三个节点
输入环节创立须要写入的elasticsearch日志索引,咱们先依照默认的filebeat采集工夫,进行日期格式化,依照每个小时建设一个索引,这块会有工夫问题,一会儿再说。
让数据输入到终端,不便咱们调试后果。
通过演示中最简略的配置形式,这时候的Logstash曾经成为连贯Kafka和Elastisearch之间的数据管道了!
好,接下来咱们将所有零碎运行起来,并生成一条nginx申请日志,看看管道各个阶段的数据变动。
首先nginx日志数据被filebeat采集,是一条典型的无构造的文本日志数据,大家留神红色标注的工夫是2021年2月21日13时
接着这条日志数据通过Kafka进入到了Logstash管道的输出阶段,
Logstash为这条日志生成了更为十分宏大的Json数据,外面包含了所有被采集主机的信息,以及nginx日志,实际上这些原始信息并没有被良好的进行数据荡涤与结构化
最初数据被写入到Elastisearch一个按小时划分的索引当中,对应工夫为2021年2月21日5时
咱们发现Logstash对原始数据在没有任何解决的状况下,会很不不便未来数据的应用;
这次咱们利用Logstash json解码器让管道从新再来一次,
接下来咱们进入Logstash中对应的配置文件,并找到input输出点的codec配置,删掉正文,关上Logstash对输出数据的json解码形式·。
咱们看看再次进入管道中的日志数据,Logstash首先对原始日志数据进行Json解析
这时候咱们再看Json解析后的数据,是不是就清晰多了,filebeat采集到的本地机器数据、以及红色框中Nginx HTTP日志数据、以及其余标签数据都进行了字段拆散
做到这一步其实还是不够好,为什么呢?一方面因为咱们仍然心愿将Nginx HTTP的日志数据也进行结构化解决,
另一个方面,Filebeat传递给Logstash的零碎工夫是慢了8个小时的UTC工夫规范,反而Nginx日志中的工夫是咱们本地的北京工夫规范,因而咱们心愿用Nginx日志工夫作为创立Elasticsearch日志索引的惟一根据
这时候咱们就要应用Logstash的过滤机制了,咱们持续进入Logstash对应的配置中,删掉过滤配置中的正文,让Logstash过滤最罕用插件grok、date、ruby、mutate起作用
grok插件是业余解决非结构化数据的能手,通过自定义的Nginx日志正则表达式,就能实现Nginx日志的结构化解析
date插件用于解决工夫问题,咱们通过date插件将nginx日志中的工夫转换成Logstash工夫对象,并赋给一个新的长期工夫字段indextime
ruby就是在过滤过程中能够插入ruby脚本语言来进行程序级解决,咱们通过ruby语言对indextime工夫格式化,生成一个准确到小时的字符串字段index.date,用于elasticsearch索引名称
mutate是最罕用的能够对管道中数据字段进行操作的插件了,咱们的目标是删除长期工夫字段indextime
最初咱们还须要将output输入中的索引生成形式批改一下,正文掉原来用filebeat生默认工夫生成的索引,改成nginx日志工夫生成的索引。
咱们从新运行Logstash,数据通过了Input解码、日志grok结构化解决、本地工夫对象创立,并进行日期格式化,为了生成新的Elasticsearch索引字段,并对长期字段进行删除,最终通过Output输入阶段,创立Elasticsearch索引或写入日志数据
让咱们看看Elasticsearch最终保留的数据成果,index索引对应的工夫来自过滤器创立的index.date字段,index.date字段又来自nginx日志中拆散出的本地工夫。这样咱们就不必再去批改Logstash的零碎工夫了
咱们看到菱形标注的字段数据就是由过滤器对nginx http日志进行结构化抽取的后果,
同样elasticsearch仍然保留着nginx日志的原始数据以备不时之需
返回读字节的知乎——理解更多对于大数据的常识公众号“读字节” 分布式,大数据,软件架构的深度,业余解读