pipeline是什么?
Pipeline,中文意為管線,意義等同于流水線。最典型的就是Gpu渲染管線,它指明渲染一個畫面需要經(jīng)過多少道工序。還有就是應(yīng)用于爬蟲框架里面。它就是指某個項目或者框架里面需要用到流水線的設(shè)計來簡化設(shè)計,降低復(fù)雜度并提高性能。是一種設(shè)計方法,是我們將現(xiàn)實中的社會分工借鑒并運用到計算機編程的例子。
以上是知乎作者Acoris[7] 的回答。
Pipeline是亞當(dāng)·斯密分工論的體現(xiàn),分工可以提高效率,很有名的例子就是20世紀初亨利·福特把生產(chǎn)一輛車分成了8772個工時。分工論成為統(tǒng)治企業(yè)管理的主要模式。[6]
Acoris的回答中,Pipeline的含義更接近assembly line 或者 production line。
圖 - assembly line 朗文
將Pipeline回歸原始意義[1]:
圖 - pipeline 朗文
Pipeline原意的重點其實是transport,物理世界中,物體的transport是空間屬性的的變化。
而在計算機世界中,數(shù)據(jù)的傳輸本質(zhì)是復(fù)制。
圖 -transport
數(shù)據(jù)管道(Data Pipeline)是實現(xiàn)系統(tǒng)之間數(shù)據(jù)遷移的載體,因此包括數(shù)據(jù)的采集、傳輸鏈路、存儲隊列、消費/轉(zhuǎn)儲等都屬于數(shù)據(jù)管道的范疇[8]。在遷移的過程中還會有數(shù)據(jù)的轉(zhuǎn)換(不是完全的復(fù)制)
Logstash
Logstash 項目誕生于 2009 年 8 月 2 日。其作者是世界著名的運維工程師喬丹西塞(JordanSissel)。[2],顯然這個項目的初衷是日志收集。但是隨著項目發(fā)展,已經(jīng)可以支持非常豐富的數(shù)據(jù)源。
Logstash由log和stash兩個詞組合而成:
圖 - stash 朗文
在git中也有“git stash”這個命令,用于暫存當(dāng)前工作區(qū)的內(nèi)容。
Logstash 是開源的服務(wù)器端數(shù)據(jù)處理管道,能夠同時從多個來源采集數(shù)據(jù),轉(zhuǎn)換數(shù)據(jù),然后將數(shù)據(jù)發(fā)送到您最喜歡的“存儲庫”中[3]。
圖 - logstash官網(wǎng)圖
Logstash的一款“函數(shù)式”的工具,支持豐富的input,output和filter插件,編輯好配置文件即可使用。
圖 - logstash“函數(shù)”
Logstash可以單獨完成Pipeline,也可以作為整個Pipeline上一個Pipe。
Logstash的資源消耗比較大,啟動一個logstash就需要消耗500M左右的內(nèi)存;所以其不太適合以agent的角色部署在每一臺機器上。以Filebeat[5]為例,兩者資源消耗存在數(shù)量級的區(qū)別。
圖- Logstash和Filebeat在8G內(nèi)存機器上的資源消耗對比
FKLEK-日志收集和分析Pipeline
目前比較流行的一種架構(gòu)方案:
(1)利用Filebeat去監(jiān)控日志文件,將Kafka作為Filebeat的輸出端,
(2)Kafka實時接收到Filebeat后以Logstash作為輸出端輸出,
(3)通過Logstash的一些插件對數(shù)據(jù)進行過濾最后達到想要的數(shù)據(jù)格式,并以ElasticSearch作為輸出端輸出,
(4)在ElasticSearch就可以進行檢索和聚合分析,
(5)借助Kibana的數(shù)據(jù)可視化能力,可以生成豐富的報表。
整個架構(gòu)的搭建可參考[4]
圖- Filebeat-Kafka-Logstash-Elasticsearch-Kibana
[1]longman
[2]Logstash介紹
[4]Filebeat+Kafka+Logstash+ElasticSearch+Kibana搭建完整版
[5]輕量型日志采集器