參考地址:
Should I use Logstash or Elasticsearch ingest nodes?
1杖狼、背景
Logstash是Elastic Stack的重要組成部分(即ELK中的L),在該架構(gòu)中負(fù)責(zé)數(shù)據(jù)采集妖爷,處理蝶涩,輸出等功能,支持多種數(shù)據(jù)輸入,數(shù)據(jù)處理子寓,數(shù)據(jù)輸出方式暗挑,并且具有可擴(kuò)展性好,功能強(qiáng)大等優(yōu)點(diǎn)斜友。典型的采用Logstash進(jìn)行數(shù)據(jù)采集和處理的Elastic Stack架構(gòu)如下圖:
而Ingest Node是在Elasticsearch5.0之后引入的特性炸裆,用于在文檔實(shí)際索引動(dòng)作執(zhí)行前對(duì)文檔進(jìn)行預(yù)處理,在數(shù)據(jù)處理層面上與Logstash有許多功能重疊之處鲜屏。引入Ingest Node后的Elastic Stack數(shù)據(jù)采集和處理架構(gòu)如下:
Ignest Node的出現(xiàn)為Elastic Stack 數(shù)據(jù)的采集和處理提供了一種新的方式烹看,在許多場(chǎng)景下用戶(hù)可以在不使用Logstash的情況下,完成數(shù)據(jù)的采集和處理洛史,簡(jiǎn)化了系統(tǒng)架構(gòu)惯殊。那么Logstash和Ignest Node有何異同?在實(shí)際使用中該如何選擇呢也殖?
2土思、Logstash與Ignest Node的比較
2.1 數(shù)據(jù)輸入和輸出
Ingest Node:作為Elasticsearch索引文檔過(guò)程的一部分,僅能使用Elasticsearch支持的方式來(lái)輸入忆嗜,如Restful接口等己儒,處理過(guò)后的數(shù)據(jù)也只能索引入Elasicsearch中,而不能輸出到其他地方捆毫。
Logstash:支持多種數(shù)據(jù)源闪湾,包括各種Beats,Mysql,kafka等,不僅可以作為服務(wù)端接收Client通過(guò)TCP绩卤,UDP,HTTP等方式推送過(guò)來(lái)的數(shù)據(jù)途样,也可以主動(dòng)從數(shù)據(jù)庫(kù),消息隊(duì)列等處拉取數(shù)據(jù)。數(shù)據(jù)輸出功能也非常強(qiáng)大濒憋,可以輸出到消息隊(duì)列何暇,對(duì)象存儲(chǔ),HDFS等。
2.2 數(shù)據(jù)緩沖
Ingest Node:Elasticsearch本身并沒(méi)有提供數(shù)據(jù)緩沖策略凛驮,數(shù)據(jù)輸入端需要自行解決ES拒絕寫(xiě)入請(qǐng)求的情況裆站。而Ingest Node作為ES索引文檔的一部分也沒(méi)有數(shù)據(jù)緩沖策略。
Logstash:提供隊(duì)列機(jī)制辐烂,可以防止數(shù)據(jù)丟失和承受一定的負(fù)載尖刺遏插。另外捂贿,還支持多種隊(duì)列纠修,可以根據(jù)業(yè)務(wù)實(shí)際情況選擇合適的隊(duì)列。
2.3 數(shù)據(jù)處理
Ingest Node:支持超過(guò)20多種processors厂僧,這些processors覆蓋了Logstash的常用場(chǎng)景扣草。限制是只能在單個(gè)數(shù)據(jù)的上下文執(zhí)行,另外不能調(diào)用外部的系統(tǒng),如文件辰妙,數(shù)據(jù)庫(kù)等
Logstash:支持大量的processors鹰祸,用戶(hù)甚至可以自己的需要編寫(xiě)plugins,也可以調(diào)用包括磁盤(pán)文件密浑,數(shù)據(jù)庫(kù)蛙婴,ES等外部資源。另外Logstash支持根據(jù)條件過(guò)濾和丟棄數(shù)據(jù)尔破。
2.4 配置和使用
Ingest Node:通過(guò)ES接口創(chuàng)建Pipeline, 并存入Elasticsearch中街图,無(wú)監(jiān)控和可視化管理界面
Logstash:主要通過(guò)配置文件來(lái)定義Pipeline,支持條件控制流和多pipeline,并提供有監(jiān)控和可視化Pipeline管理功能懒构,對(duì)于性能調(diào)優(yōu)和問(wèn)題定位非常有幫助餐济。Kibana中的Logstash pipeline管理界面如下圖:
[圖片上傳失敗...(image-a61b5f-1574901926119)]
3、分析
(1)輸入方面胆剧,雖然Logstash支持更多的輸入方式絮姆,但是Ingest Node也可以通過(guò)與Beats,甚至Logstash配合來(lái)解決不同數(shù)據(jù)源的輸入問(wèn)題。
(2)輸出方面秩霍,由于Ingest Node 作為Elasticsearch索引文檔過(guò)程的一部分篙悯,因此除非對(duì)源碼進(jìn)行改造,否則無(wú)法將數(shù)據(jù)導(dǎo)出到其他地方前域。因此如果有將處理過(guò)后的數(shù)據(jù)導(dǎo)出到其他地方的需求辕近,建議使用Logstash。
(3)數(shù)據(jù)緩沖方面匿垄,Ingest Node 可以通過(guò)在文檔輸入前接入Kafka等消息隊(duì)列來(lái)解決移宅。另外在實(shí)際使用中,即使Logstash自身有隊(duì)列機(jī)制椿疗,一般也會(huì)在Logstash前增加Kafka來(lái)更好的緩沖數(shù)據(jù)傳輸壓力漏峰。
(4)數(shù)據(jù)處理方面,IgnestNode支持Logstash的大多數(shù)常用場(chǎng)景届榄,如果在使用前可以明確所有使用場(chǎng)景浅乔,確定Ignest Node可以滿(mǎn)足需求,可以使用IgnestNode铝条,如果IgnestNode不能滿(mǎn)足要求靖苇,則需要采用Logstash。
(5)配置和使用方面班缰,在這方面Logstash有明顯優(yōu)勢(shì)贤壁,靈活的配置方式,可視化監(jiān)控和pipeline管理埠忘,在復(fù)雜系統(tǒng)中有著重要的幫助作用脾拆。
(6)性能和架構(gòu)方面馒索,Ignest作為Elasticsearch集群的一部分,當(dāng)數(shù)據(jù)處理邏輯相對(duì)簡(jiǎn)單時(shí)名船,可以簡(jiǎn)化數(shù)據(jù)采集和處理架構(gòu)绰上。但是當(dāng)數(shù)據(jù)處理相對(duì)邏輯復(fù)雜時(shí),Ingest Node數(shù)據(jù)處理過(guò)程可能影響節(jié)點(diǎn)的性能渠驼。這時(shí)一般采用專(zhuān)用Ingest Node的方式解決蜈块,而引入專(zhuān)用Ingest Node會(huì)使Elasticsearch集群的結(jié)構(gòu)變得復(fù)雜,這與Ingest Node簡(jiǎn)化數(shù)據(jù)采集和處理架構(gòu)的優(yōu)勢(shì)背道而馳迷扇。而Logstash是處于Elasticsearch前的專(zhuān)用數(shù)據(jù)采集和處理模塊疯趟,當(dāng)性能出現(xiàn)瓶頸時(shí)可以通過(guò)橫向擴(kuò)展的方式來(lái)提高處理能力,在架構(gòu)上更為清晰谋梭。
(7)Ingest Node與Logstash的聯(lián)用信峻,Ingest Node是Elasticsearch集群的一部分,而Logstash處于Elasticsearch的前端瓮床,在結(jié)構(gòu)上兩者完全可以配合使用盹舞。PS:Ignest Node一個(gè)用法是為數(shù)據(jù)添加時(shí)間戳,以便更精確地記錄文檔索引時(shí)間隘庄,在耗時(shí)計(jì)算時(shí)有一定用處踢步。Ingest Node與Logstash聯(lián)用的Elastic Stack架構(gòu)圖如下:
4、結(jié)論和建議
通過(guò)上面的比較和分析不難發(fā)現(xiàn)丑掺,Ignest Node 在功能上基本為 Logstash 的子集获印, 在數(shù)據(jù)處理邏輯簡(jiǎn)單,沒(méi)有其他額外輸出端的時(shí)候街州,可以簡(jiǎn)化系統(tǒng)架構(gòu)兼丰,實(shí)現(xiàn)快速部署。但是當(dāng)處理邏輯復(fù)雜唆缴,多輸入源和多輸出源的場(chǎng)景下鳍征,Logstash的功能強(qiáng)大和靈活更為合適。
在實(shí)際使用中可以根據(jù)自己的業(yè)務(wù)特點(diǎn)來(lái)選擇Ingest Node或Logstash面徽。
(1)如果是將Elastic Stack使用在特定場(chǎng)景下艳丛,且數(shù)據(jù)處理邏輯相對(duì)簡(jiǎn)單,可以考察Ignest Node是否滿(mǎn)足需求趟紊,優(yōu)先使用Ignest Node實(shí)現(xiàn)系統(tǒng)的快速部署氮双。
(2)當(dāng)需要搭建的是一個(gè)通用的Elastic Stack平臺(tái),需要支持多種輸入源霎匈,輸出源戴差,數(shù)據(jù)處理邏輯也相對(duì)復(fù)雜時(shí),建議采用Logstash, 利用Logstash的功能強(qiáng)大唧躲,靈活造挽,可擴(kuò)展等特性,保證系統(tǒng)的功能性和穩(wěn)定性弄痹。
(3)如果在系統(tǒng)搭建初期饭入,需求不明確,由于Ignest Node和Logstash可以聯(lián)用肛真,因此可以先使用Ingest Node來(lái)搭建系統(tǒng)谐丢,當(dāng)功能無(wú)法滿(mǎn)足時(shí),再在Elasticsearch前面增加Logstash蚓让。
Ingest Node和Logstash雖然在功能上有很多重疊乾忱,但是仍有各自的特點(diǎn),在實(shí)際的業(yè)務(wù)場(chǎng)景中历极,可以根據(jù)業(yè)務(wù)需要靈活選擇窄瘟。
歡迎關(guān)注公眾號(hào)Elastic慕容,和我一起進(jìn)入Elastic的奇妙世界吧