视频地址

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日志的原始数据以备不时之需

前往读字节的知乎——了解更多关于大数据的知识

公众号 "读字节" 大数据(技术、架构、应用)的深度,专业解读

「视频小课堂」Logstash如何成为镇得住场面的数据管道(文字版)的更多相关文章

  1. 「视频小课堂」ELK和Kafka是怎么就玩在一起成了日志采集解决方案文字版

    视频地址:ELK和Kafka是怎么就玩在一起成了日志采集解决方案 视频文字版 今天呢我就带来了一期视频,主要就是讲ELK和Kafka之间的通讯关系通过对一张通讯图,和一些操作命令,让我们能更深入的去理 ...

  2. 对于前端,「微信小程序」其实不美好

    微信小程序开放公测了,9月底我曾经写过一篇 「微信小程序」来了,其中最后一句:"谢天谢地,我居然还是个前端". 这种火爆的新事物总是令人激动,感谢这个时代. 但是,当我真作为开发者 ...

  3. 「前端开发者」如何把握住「微信小程序」这波红利?

    由于前两周一直在老家处理重要事情,虽然朋友圈被「微信小程序」刷爆了,但并没有时间深入了解. 昨天回广州之后,第一件事情就是把「微信小程序」相关的文章.开发文档.设计规范全部看了一遍,基本上明白了「微信 ...

  4. 「微信小程序」有哪些冲击与机会?

    昨天晚上相信大家的朋友圈被「微信小程序」刷屏了,这影响力赶上了国务院出台新政策一样,足以说明微信在中国的影响力之大. 然后今天公号后台一大堆人问我怎么看这件事,不少人非常忧虑,仿佛自己将要失业一样. ...

  5. 「微信小程序」来了

    ps:微信APP Store.微信小程序.微信应用号都是指同一个事情. 苦逼程序猿刚下班到家,还没来得及洗漱,收到条小道消息的推送.于是我有气无力的拿着手机点开了这条推送消息,映入眼帘的就是这张封面图 ...

  6. 「c++小学期」实验题目及代码

    面向对象编程的C++,和平时做题用的C++还是有差距的.实验的题目都是小题目,就都做一下吧.(没放代码的为要验收的 实验一 简单C++程序设计 1.  猜价格游戏 编写C++程序完成以下功能: (1) ...

  7. 「拆小鹤」使用 python 实现 QQ机器人服务。

    使用的是python的qqbot机器人库,我其实只是实现了这个库的一个插件. 具体的说明,我觉得qqbot的官方文档,还有我的插件的注释都写得很详细了,可以直接看.所以有空再写吧. 没错我就是懒..

  8. 「微信小程序」PHP异步进程async-helper实例详解

    PHP异步进程async-helper实例详解 PHP 的异步进程助手,借助于 AMQP 实现异步执行 PHP 的方法,将一些很耗时.追求高可用.需要重试机制的操作放到异步进程中去执行,将你的 HTT ...

  9. Loj #2324. 「清华集训 2017」小 Y 和二叉树

    Loj #2324. 「清华集训 2017」小 Y 和二叉树 小Y是一个心灵手巧的OIer,她有许多二叉树模型. 小Y的二叉树模型中,每个结点都具有一个编号,小Y把她最喜欢的一个二叉树模型挂在了墙上, ...

随机推荐

  1. Harbor 镜像仓库搭建

    安装 Docker # 下载 Docker 二进制包 [root@k8s-master01 ~]# wget https://download.docker.com/linux/static/stab ...

  2. python之字符串方法upper/lower

    1.描述: upper():用于将字符串全部转换为大写字母 lower():用于将字符串全部转换为小写字母 2.语法 str.upper() str.lower() 3.返回值 upper()或low ...

  3. 爬虫入门二 beautifulsoup

    title: 爬虫入门二 beautifulsoup date: 2020-03-12 14:43:00 categories: python tags: crawler 使用beautifulsou ...

  4. C++ part6.5

    1.虚函数表建立和虚函数表指针初始化 虚拟函数表是在编译期就建立了,各个虚拟函数这时被组织成了一个虚拟函数的入口地址的数组.而虚函数表指针是在运行期,也就是构造函数被调用时进行初始化的,这是实现多态的 ...

  5. 英语能力考试 All In One

    英语能力考试 All In One 托福,雅思,托业 TOEIC 托业考试 Test of English for International Communication (TOEIC) 国际交流英语 ...

  6. 前端知名人士 All In One

    前端知名人士 All In One 前端名人堂(中国) https://node.fequan.com/lecturer/ JavaScript的过去.现在和未来 1995年,Brendan Eich ...

  7. macOS 需要更新软件才能连接到 iOS 设备

    macOS 需要更新软件才能连接到 iOS 设备 更新 Mac 上的软件 如果您在 iPhone.iPad 或 iPod touch 上看到"需要更新软件才能连接到 iOS 设备" ...

  8. React Hooks: useRef All In One

    React Hooks: useRef All In One useRef https://reactjs.org/docs/hooks-reference.html#useref refs xgqf ...

  9. how to convert Map to Object in js

    how to convert Map to Object in js Map to Object just using the ES6 ways Object.fromEntries const lo ...

  10. how to find jobs in the website codes

    how to find jobs in the website codes X-Custom-Heade https://developer.mozilla.org/en-US/docs/Web/AP ...