pipeline是什么?
Pipeline,中文意为管线,意义等同于流水线。最典型的就是Gpu渲染管线,它指明渲染一个画面需要经过多少道工序。还有就是应用于爬虫框架里面。它就是指某个项目或者框架里面需要用到流水线的设计来简化设计,降低复杂度并提高性能。是一种设计方法,是我们将现实中的社会分工借鉴并运用到计算机编程的例子。
以上是知乎作者Acoris[7] 的回答。
Pipeline是亚当·斯密分工论的体现,分工可以提高效率,很有名的例子就是20世纪初亨利·福特把生产一辆车分成了8772个工时。分工论成为统治企业管理的主要模式。[6]
Acoris的回答中,Pipeline的含义更接近assembly line 或者 production line。
图 - assembly line 朗文
将Pipeline回归原始意义[1]:
图 - pipeline 朗文
Pipeline原意的重点其实是transport,物理世界中,物体的transport是空间属性的的变化。
而在计算机世界中,数据的传输本质是复制。
图 -transport
数据管道(Data Pipeline)是实现系统之间数据迁移的载体,因此包括数据的采集、传输链路、存储队列、消费/转储等都属于数据管道的范畴[8]。在迁移的过程中还会有数据的转换(不是完全的复制)
Logstash
Logstash 项目诞生于 2009 年 8 月 2 日。其作者是世界著名的运维工程师乔丹西塞(JordanSissel)。[2],显然这个项目的初衷是日志收集。但是随着项目发展,已经可以支持非常丰富的数据源。
Logstash由log和stash两个词组合而成:
图 - stash 朗文
在git中也有“git stash”这个命令,用于暂存当前工作区的内容。
Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中[3]。
图 - logstash官网图
Logstash的一款“函数式”的工具,支持丰富的input,output和filter插件,编辑好配置文件即可使用。
图 - logstash“函数”
Logstash可以单独完成Pipeline,也可以作为整个Pipeline上一个Pipe。
Logstash的资源消耗比较大,启动一个logstash就需要消耗500M左右的内存;所以其不太适合以agent的角色部署在每一台机器上。以Filebeat[5]为例,两者资源消耗存在数量级的区别。
图- Logstash和Filebeat在8G内存机器上的资源消耗对比
FKLEK-日志收集和分析Pipeline
目前比较流行的一种架构方案:
(1)利用Filebeat去监控日志文件,将Kafka作为Filebeat的输出端,
(2)Kafka实时接收到Filebeat后以Logstash作为输出端输出,
(3)通过Logstash的一些插件对数据进行过滤最后达到想要的数据格式,并以ElasticSearch作为输出端输出,
(4)在ElasticSearch就可以进行检索和聚合分析,
(5)借助Kibana的数据可视化能力,可以生成丰富的报表。
整个架构的搭建可参考[4]
图- Filebeat-Kafka-Logstash-Elasticsearch-Kibana
[1]longman
[2]Logstash介绍
[3]Logstash官网
[4]Filebeat+Kafka+Logstash+ElasticSearch+Kibana搭建完整版
[5]轻量型日志采集器
[6]亚当斯密的分工理论