精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

數(shù)據(jù)收集工具的設(shè)計與最佳實踐

大數(shù)據(jù)
目前社區(qū)已經(jīng)不乏大量優(yōu)秀的數(shù)據(jù)收集工具,如有名的 Elastic Stack(Elasticsearch、Logstash、Kibana)中的 Logstash;CNCF 基金會里面有名的 Fluentd;InfluxData 公司 TICK Stack 中的 Telegraf;Google 出品為 Kubernetes 定制的 cAdvisor;Apache 基金會中的頂級項目 Flume。

數(shù)據(jù)收集工具對比

目前社區(qū)已經(jīng)不乏大量優(yōu)秀的數(shù)據(jù)收集工具,如有名的 Elastic Stack(Elasticsearch、Logstash、Kibana)中的 Logstash;CNCF 基金會里面有名的 Fluentd;InfluxData 公司 TICK Stack 中的 Telegraf;Google 出品為 Kubernetes 定制的 cAdvisor;Apache 基金會中的頂級項目 Flume。除了早期誕生的諸如 Fluentd、Flume 等項目,其他項目都是為特定的平臺業(yè)務定制而成,然后在隨后的開源中不斷進化,變得更為通用。所以針對特定業(yè)務量身定制一款數(shù)據(jù)收集工具,是一個較為普遍的需求,也是出現(xiàn)如此多“輪子”的主要原因。

讓我們先來看看這幾種知名開源數(shù)據(jù)收集工具有哪些特點。

[[206982]]

Flume: 毋庸置疑,在流式數(shù)據(jù)處理的場景中,F(xiàn)lume 絕對是開源產(chǎn)品中的不二選擇。其架構(gòu)分為 Source、Channel、Sink 三部分,分別負責從上游服務端獲取數(shù)據(jù)、暫存數(shù)據(jù)以及解析并發(fā)送到下游。Flume 尤以靈活的擴展性和強大的容錯處理能力著稱,非常適合在大數(shù)據(jù)量的情況下做數(shù)據(jù)解析、中轉(zhuǎn)以及上下游適配的工作。另一方面,F(xiàn)lume 也有一些缺陷,如解析與發(fā)送都耦合在 Sink 模塊,用戶在編寫 Sink 插件時不得不編寫解析的邏輯,無法復用一些常規(guī)的解析方式;依賴 JVM 運行環(huán)境,作為服務端程序可以接受,但是部署和運行一個數(shù)據(jù)收集客戶端程序則變得相對笨重;Flume 的配置融合了 Channel 部分,基本配置并不簡單,用戶想用起來需要的前置知識較多。

Logstash: 隨著 Elastic Stack 廣受熱捧,Logstash 自然也成為了技術(shù)圈家喻戶曉的工具,而 Logstash 本身的強大功能也確實名副其實,其架構(gòu)分為 Inputs、Filters 以及 Outputs 三部分。Inputs 作為所有輸入端的集合,包含了各類數(shù)據(jù)輸入插件;Filters 包括解析與數(shù)據(jù)轉(zhuǎn)換兩部分的插件集合,其中就包含了大名鼎鼎的 Grok 解析方式,幾乎可以解析所有類型的數(shù)據(jù);Outputs 則是輸出端的集合。毫無疑問,Logstash 幾乎是使用 Elastic Stack 方案時作為數(shù)據(jù)收集的唯一選擇。但是同樣的,Logstash 也是基于 JVM 運行的,作為一個客戶端程序相對較重;當你希望把它作為一個 agent 收集一些機器的基本信息時,它也無能為力。于是除了 Logstash 之外 Elastic Stack 家族中又增加了 beats 這個成員,但是如果僅僅選擇 beats,其功能又太過單薄。

Fluentd: Fluentd 也是數(shù)據(jù)收集界的老牌重量級選手,如果你玩容器、玩 Kubernetes,那么就一定聽說過 CNCF(Cloud Native Computing Foundation),而 Fluentd 就是其中的一員,成為了容器圈里多數(shù)人日志收集處理的首選。Fluentd 的架構(gòu)與 Logstash 相似,也大致分為輸入、輸出以及中間的處理層,但與之不同的是,其中間的處理層除了包括常規(guī)的 filter(解析) 以及 buffer(數(shù)據(jù)暫存) 以外,還包含了一個 routing(路由) 功能,這是 Fluentd 的一大特色。routing 功能使得 Fluentd 能夠?qū)⒆约悍Q為一個統(tǒng)一的日志管理中間層,將所有的數(shù)據(jù)輸入和輸出管理起來,按照需求將輸入的數(shù)據(jù)路由到一個或多個輸出端。這是一個非常先進的設(shè)計,其他類似的開源軟件往往要寫多份配置文件才能達到這個效果。Fluentd 由 CRuby 實現(xiàn),性能表現(xiàn)優(yōu)良但依賴 Ruby 環(huán)境;相較于前面兩者,F(xiàn)luentd 插件支持相對較少;其配置也過于復雜,使用門檻較高。

Telegraf/cAdvisor: 這兩款均是 Go 語言編寫的針對系統(tǒng)信息數(shù)據(jù)收集的開源工具,其側(cè)重點在 metric 收集,相較于通用的日志收集和處理,其功能面較窄,但是性能方面均表現(xiàn)優(yōu)異。Telegraf 配合 influxdb,可以讓你對機器各個維度的信息了如指掌;而 cAdvisor 更是 Kubernetes 的親兒子,處理容器資源信息幾無敵手。但是這兩款工具并無意于發(fā)力通用數(shù)據(jù)收集的功能,功能上可能無法滿足一些日志收集的場景。

了解了以上這些開源軟件的特點后,下面我們開始深入介紹構(gòu)建一款數(shù)據(jù)收集工具會遇到哪些設(shè)計與挑戰(zhàn),以此為你的業(yè)務量身定制。

數(shù)據(jù)收集工具設(shè)計

架構(gòu)設(shè)計

主流數(shù)據(jù)收集工具的主架構(gòu)基本分為 reader、parser,以及 sender 三部分,如圖 1 所示。除了這三個日志收集常規(guī)組成部分,還應該包含可選模塊,如基于解析過后的數(shù)據(jù)轉(zhuǎn)換 (filter/transformer) 以及數(shù)據(jù)暫存管道 (Channel/Buffer)。為了盡可能復用,每個組成部分都應該是插件式的,可以編寫不同類型插件并且靈活地組裝。Channel/Buffer 部分也應該提供基于內(nèi)存或者基于磁盤的選擇。

數(shù)據(jù)收集工具的設(shè)計與最佳實踐
圖 1 數(shù)據(jù)收集架構(gòu)設(shè)計

對于 Reader、Parser、Sender 等插件共同組裝的業(yè)務數(shù)據(jù)收集單元,我們稱之為一個運行單元 (Runner),數(shù)據(jù)收集工具必須可以同時運行多個 Runner,且每個 Runner 可以支持更新。

更新可以通過多種方式實現(xiàn),最常規(guī)的是手動更新配置然后重啟;更好的設(shè)計是支持熱更新,不需要重啟,自動識別配置文件的變化;還可以設(shè)計一個漂亮的 web 界面做配置的變更,以此引導用戶使用并解決數(shù)據(jù)收集配置復雜、用戶使用門檻高的難題。所以在整體架構(gòu)之上還應該構(gòu)建一個簡單的 API 層,支持 web 界面的功能。

語言選擇

數(shù)據(jù)收集屬于輕量級的 agent 服務,一般選擇的語言為 C/C++ 或者近年來特別火熱的 Go,而 Go 語言已經(jīng)成為這類數(shù)據(jù)收集工具編寫的大眾選擇,如 Logstash 新開發(fā)的 beats 工具、Telegraf、cAdvisor 等等,均使用 Go 語言開發(fā)。

社區(qū)已經(jīng)有很多文章描述使用 Go 語言的好處,在此就不再贅述??傮w而言用 Go 語言開發(fā)門檻較低,性能優(yōu)良,支持跨多種操作系統(tǒng)平臺,部署也極為簡便。

分模塊設(shè)計

數(shù)據(jù)讀取模塊(Reader)

顧名思義,數(shù)據(jù)讀取模塊負責從不同數(shù)據(jù)源中讀取數(shù)據(jù),設(shè)計 Reader 模塊的時候,需要支持插件式數(shù)據(jù)源接入,且將接口設(shè)計得足夠簡單,方便大家一同貢獻更多的讀取數(shù)據(jù)源驅(qū)動。

自定義數(shù)據(jù)源,最基本的只需要實現(xiàn)如下兩個方法即可。

 

  1. ReadLine() string  
  2. SyncMeta() error 

從數(shù)據(jù)來源上分類,數(shù)據(jù)讀取大致可分為從文件讀取、從數(shù)據(jù)存儲服務端讀取以及從消息隊列中讀取三類。

每一類 Reader 均在發(fā)送成功后通過 SyncMeta() 函數(shù)記錄讀取的位置,保證數(shù)據(jù)不會因為 runner 意外中斷而丟失。

從文件讀取數(shù)據(jù) 最為常見,針對文件的不同 rotate 方式,有不同的讀取模式,主要分為三類:

  • file 模式:使用 file 模式的經(jīng)典日志存儲方式類似于 nginx 的日志 rotate 方式,日志名稱是固定的,如access.log,rotate 時直接 move 成新的文件如access.log.1,新的數(shù)據(jù)仍然寫入到access.log。即我們永遠只針對access.log這一個固定名稱的文件進行收集。而檢測文件是否 rotate 的標志是文件的 inode 號,在 windows 下則是 fd 的屬性編號。當文件 rotate 后,則從文件頭開始讀取。
  • dir 模式:使用 dir 模式的經(jīng)典日志存儲方式為整個文件夾下存儲單個服務的業(yè)務日志,文件夾下的日志通常有統(tǒng)一前綴,后綴為時間戳,根據(jù)日志的大小 rotate 到新的文件。如配置的文件夾為 logdir,下面的文件為 logdir/a.log.20170621, logdir/a.log.20170622, logdir/a.log.20170623, …。每次分割后新命名文件并以時間戳為后綴,并且該文件夾下只有這一個服務。dir 模式首先會對文件夾下文件整體排序,依次讀取各個文件,讀完最后一個文件后會查找時間 (文件 ctime) 更新文件并重新排序,依次循環(huán)。dir 模式應該將多個文件數(shù)據(jù)串聯(lián)起來,即數(shù)據(jù)讀取過程中 a.log.20170621 中最后一行的下一行就是 a.log.20170622 的第一行。該模式下自然還包括諸如文件前綴匹配、特定后綴忽略等功能。
  • tailx 模式:以通配的路徑模式讀取,讀取所有被通配符匹配上的日志文件,對于單個日志文件使用 file 模式不斷追蹤日志更新,例如匹配路徑的模式串為 /home/*/path/*/logdir/*.log*, 此時會展開并匹配所有符合該表達式的文件,并持續(xù)讀取所有有數(shù)據(jù)追加的文件。每隔一定時間,重新獲取一遍模式串,添加新增的文件。

除此之外,還應支持包括多文件編碼格式支持、讀取限速等多種功能。

從數(shù)據(jù)存儲服務中讀取數(shù)據(jù),可以采用時間戳策略,在諸如 MongoDB、MySQL 中記錄的數(shù)據(jù),包含一個時間戳字段,每次讀取數(shù)據(jù)均按這個時間戳字段排序,以此獲得新增的數(shù)據(jù)或者數(shù)據(jù)更新。另一方面,需要為用戶設(shè)計類似定時器等策略,方便用戶多次運行,不斷同步收集服務器中的數(shù)據(jù)。

從消息隊列中讀取數(shù)據(jù),這個最為簡單,直接從消息隊列中消費數(shù)據(jù)即可。注意記錄讀取的 Offset,防止數(shù)據(jù)丟失。

解析模塊 (Parser)

解析模塊負責將數(shù)據(jù)源中讀取的數(shù)據(jù)解析到對應的字段及類型,目前常見的解析器包括:

  • csv parser: 按照分隔符解析成對應字段和類型,分隔符可以自定義,如常見的制表符 (\t)、空格 ( )、逗號 (,) 等等。
  • json parser: 解析 json 格式的數(shù)據(jù),json 是一種自帶字段名稱及類型的序列化協(xié)議,解析 json 格式僅需反序列化即可。
  • 基于正則表達式 (grok) parser: Logstash grok 解析非常強大,但是它并不指定類型,而 Telegraf 做了一個增強版的 grok 解析器,除了基本的正則表達式和字段名稱,還能標志數(shù)據(jù)類型,基本上能標志數(shù)據(jù)類型的 grok 解析器已經(jīng)是一個完備的數(shù)據(jù)解析器了,可以解析幾乎所有數(shù)據(jù)。當然,類型解析是相對復雜的功能,可能涉及到具體業(yè)務,如時間類型等。
  • raw parser: 將讀取到的一行數(shù)據(jù)作為一個字段返回,簡單實用。
  • nginx/apache parser: 讀取 nginx/apache 等常見配置文件,自動生成解析的正則表達式,解析 nginx/apache 日志。

除了以上幾種內(nèi)置的解析器,同 Reader 一樣,你也需要實現(xiàn)自定義解析器的插件功能,而 Parser 極為簡單,只需要實現(xiàn)最基本的 Parse 方法即可。

  1. Parse(lines []string) (datas []sender.Data, err error) 

每一種 Parser 都是插件式結(jié)構(gòu),可以復用并任意選擇。在不考慮解析性能的情況下,上述幾種解析器基本可以滿足所有數(shù)據(jù)解析的需求,將一行行數(shù)據(jù)解析為帶有 Schema(具備字段名稱及類型)的數(shù)據(jù)。但是當你希望對某個字段做操作時,純粹的解析器可能不夠用。于是作為補充,數(shù)據(jù)收集工具還需要提供 Transformer/Filter 的功能。

Transformer

Transformer 是 Parser 的補充,針對字段進行數(shù)據(jù)變化。

舉例來說,如果你有個字段想做字符串替換,比如將所有字段名稱為”name”的數(shù)據(jù)中,值為”Tom”的數(shù)據(jù)改為”Tim”,那么可以添加一個字符串替換的 Transformer,針對”name”這個字段做替換。

又比如說,你的字段中有個”IP”,你希望將這個 IP 解析成運營商、城市等信息,那么你就可以添加一個 Transformer 做這個 IP 信息的轉(zhuǎn)換。

當然,Transformer 應該可以多個連接到一起連動合作。

設(shè)計 Transformer 模塊是一件有趣而富有挑戰(zhàn)的事情,這涉及到 Tranformer 功能多樣性帶來的 3 個問題:

  1. 多樣的功能必然涉及到多樣的配置,如何將不同的配置以優(yōu)雅而統(tǒng)一的方式傳達到插件中?
  2. 多樣的功能也涉及到不同功能的描述,如何將功能描述以統(tǒng)一的形式表達給用戶,讓用戶選擇相應的配置?
  3. 如何將上述兩個問題盡可能簡單地解決,讓用戶編寫 Transformer 插件時關(guān)注盡可能少的問題?

這里我們留個懸念,感興趣的朋友可以閱讀 logkit Transformer 相關(guān) (https://github.com/qiniu/logkit/tree/develop/transforms) 的源碼尋求答案,筆者后續(xù)也會在 logkit 的 wiki 頁面中描述。

Channel

經(jīng)過解析和變換后的數(shù)據(jù)可以認為已經(jīng)處理好了,此時數(shù)據(jù)會進入待發(fā)送隊列,即 Channel 部分。Channel 的好壞決定了一個數(shù)據(jù)收集發(fā)送工具的性能及可靠程度,是數(shù)據(jù)收集工具中最具技術(shù)含量的一環(huán)。

數(shù)據(jù)收集工具,顧名思義,就是將數(shù)據(jù)收集起來,再發(fā)送到指定位置,而為了將性能最優(yōu)化,我們必須把收集和發(fā)送解耦,中間提供一個緩沖帶,而 Channel 就是負責數(shù)據(jù)暫存的地方。有了 Channel,讀取和發(fā)送就解耦了,可以利用多核優(yōu)勢,多線程發(fā)送數(shù)據(jù),提高數(shù)據(jù)吞吐量。

 

 


 

數(shù)據(jù)收集工具的設(shè)計與最佳實踐
圖 2 ft sender

一種設(shè)計思路是把整個 Channel,包括多線程發(fā)送做成一個框架,封裝成一個特殊的 sender,我們稱這個特殊的 sender 為”ft sender”。其架構(gòu)如圖 2 所示,ft sender 與其他 sender 一樣也提供了 Send() 方法,解析完畢后的數(shù)據(jù)調(diào)用 Send 方法實際上就是將數(shù)據(jù)傳入到 Channel 中,然后再由 ft sender 處理多線程發(fā)送邏輯,將從隊列中取出的數(shù)據(jù)交由實際的 sender 多線程發(fā)送。

同時需要為用戶提供磁盤和內(nèi)存兩大隊列方式選擇。

如果追求最高的可靠性,就使用磁盤隊列,數(shù)據(jù)會暫存到本地磁盤中,發(fā)送后自動刪除,即使突然宕機也不怕丟失數(shù)據(jù)。

如果追求更高的性能,可以使用內(nèi)存隊列,其實現(xiàn)方式就是 Go 語言的 Channel 機制,穩(wěn)定而簡單,在關(guān)停過程中也需要將 Channel 中的數(shù)據(jù)落地到磁盤,在隨后重新啟動時載入,正常使用過程中也沒有數(shù)據(jù)丟失的風險。得益于 Go 語言的同步 Channel 機制,甚至可以把內(nèi)存隊列的大小設(shè)置為 0,以此實現(xiàn)多線程發(fā)送,這樣使用內(nèi)存隊列即使宕機,也沒有了數(shù)據(jù)丟失的風險。

除了正常地作為待發(fā)送數(shù)據(jù)的等待隊列以外,Channel 還可以具有如下一些非常有趣而實用的功能:

錯誤數(shù)據(jù)篩選

并不是所有解析完畢的數(shù)據(jù)發(fā)送到服務端就一定是正確的,有時服務端指定的數(shù)據(jù)格式和解析完畢的格式存在出入,或者數(shù)據(jù)中含有一些非法字符等情況,則數(shù)據(jù)不能發(fā)送成功。此時,如果一批數(shù)據(jù)中只有一條這樣錯誤的數(shù)據(jù),就很容易導致這一整批都失敗。

錯誤數(shù)據(jù)篩選的作用就在于,把這一整批數(shù)據(jù)中對的數(shù)據(jù)篩選出來,留下錯誤的數(shù)據(jù),將正確的發(fā)送出去。

做法很簡單,當發(fā)送時遇到服務端返回存在格式錯誤的數(shù)據(jù)時,將這一批數(shù)據(jù)平均拆分為兩批(二分),再放入隊列,等待下次發(fā)送。再遇到錯誤時則再拆分,這樣不斷二分,直到一個批次中只有一條數(shù)據(jù),且發(fā)送失敗,那我們就找到了這個錯誤數(shù)據(jù),可以選擇丟棄或記錄。

借助隊列,我們很容易就能將錯誤數(shù)據(jù)篩選出來。

包拆分(大包拆小包)

包拆分的由來是服務端不可能無限制開放每個批次數(shù)據(jù)傳輸?shù)拇笮?,出于服務器性能、傳輸性能等原因,總有會有一些限制?/p>

當一個批次的數(shù)據(jù)過大時,就會導致傳輸失敗。此時的做法與錯誤篩選的方法相似,只要將包二分即可,如果還是太大就再次二分,以此類推。

限速

限速的功能最容易理解,數(shù)據(jù)統(tǒng)統(tǒng)經(jīng)過 Channel,那么只要限制這個 Channel 傳輸介質(zhì)的速度即可。例如磁盤隊列,只需要限制磁盤的 IO 讀寫速度;內(nèi)存隊列則限制隊列大小以此達到限速的目的。

常見的流量控制的算法有漏桶算法(Leaky bucket)(https://en.wikipedia.org/wiki/Leaky_bucket)和令牌桶算法(Token bucket)(https://en.wikipedia.org/wiki/Token_bucket) 兩種,比較推薦采用令牌桶算法實現(xiàn)該功能,感興趣的朋友可以閱讀一下 logkit 的 rateio 包 (https://github.com/qiniu/logkit/tree/develop/rateio)。

Sender

Sender 的主要作用是將隊列中的數(shù)據(jù)發(fā)送至 Sender 支持的各類服務,一個最基本的實現(xiàn)同樣應該設(shè)計得盡可能簡單,理論上僅需實現(xiàn)一個 Send 接口即可。

  1. Send([]Data) error 

那么實現(xiàn)一個發(fā)送端有哪些注意事項呢?

多線程發(fā)送:多線程發(fā)送可以充分利用 CPU 的多核能力,提升發(fā)送效率,這一點我們在架構(gòu)設(shè)計中通過設(shè)計 ft sender 作為框架解決了該問題。

錯誤處理與等待:服務端偶爾出現(xiàn)一些異常是很正常的事情,此時就要做好不同錯誤情況的處理,不會因為某個錯誤而導致程序出錯,另外一方面,一旦發(fā)現(xiàn)出錯應該讓 sender 等待一定時間再發(fā)送,設(shè)定一個對后端友好的變長錯誤等待機制也非常重要。一般情況下,可以采用隨著連續(xù)錯誤出現(xiàn)遞增等待時間的方法,直到一個最頂峰(如10s),就不再增加,當服務端恢復后再取消等待。

數(shù)據(jù)壓縮發(fā)送:帶寬是非常珍貴的資源,通常服務端都會提供 gzip 壓縮的數(shù)據(jù)接收接口,而 sender 利用這些接口,將數(shù)據(jù)壓縮后發(fā)送,能節(jié)省大量帶寬成本。

帶寬限流:通常情況下數(shù)據(jù)收集工具只是機器上的一個附屬程序,主要資源如帶寬還是要預留給主服務,所以限制 sender 的帶寬用量也是非常重要的功能,限流的方法可以采用前面 Channel 一節(jié)提到的令牌桶算法。

字段填充 (UUID/timestamp):通常情況下收集的數(shù)據(jù)信息可能不是完備的,需要填充一些信息進去,如全局唯一的 UUID、代表收集時間的 timestamp 等字段,提供這些字段自動填充的功能,有利于用戶對其數(shù)據(jù)做唯一性、時效性等方面的判斷。

字段別名:解析后的字段名稱中經(jīng)常會出現(xiàn)一些特殊字符,如”$”、”@”等符號,如果發(fā)送的服務端不支持這些特殊字符,就需要提供重命名功能,將這些字段映射到一個別的名稱。

字段篩選:解析后的字段數(shù)據(jù)未必都需要發(fā)送,這時如果能提供一個字段篩選的功能,就可以方便用戶選擇去掉一些無用字段,并節(jié)省傳輸?shù)某杀?。也可以? Transformer 中提供類似 discard transformer 的功能,將某個字段去掉。

類型轉(zhuǎn)換:類型轉(zhuǎn)換是一個說來簡單但是做起來非常繁瑣的事情,不只是純粹的整型轉(zhuǎn)換成浮點型,或者字符串轉(zhuǎn)成整型這么簡單,還涉及發(fā)送到的服務端支持的一些特殊類型,如date時間類型等,更多的類型轉(zhuǎn)換實際上相當于最佳實踐,能夠做好這些類型轉(zhuǎn)換,就會讓用戶體驗得到極大提升。

簡單、簡單、簡單:除了上述這些,剩下的就是盡可能的讓用戶使用簡單。假設(shè)我們要寫一個 mysql sender,mysql 的數(shù)據(jù)庫和表如果不存在,可能數(shù)據(jù)會發(fā)送失敗,那就可以考慮提前創(chuàng)建;又比如數(shù)據(jù)如果有更新,那么就需要將針對這些更新的字段去更新服務的 Schema 等等。

Metrics

除了基本的自定義的數(shù)據(jù)收集,數(shù)據(jù)收集工具作為一個機器的 agent,還可以采集機器的基本數(shù)據(jù),例如 CPU、內(nèi)存、網(wǎng)絡(luò)等信息,通過這些信息,可以全面掌控機器的狀態(tài)。

具體的內(nèi)容可以參考 logkit 文檔:Runner 之系統(tǒng)信息采集配置。

至此,一個完整的數(shù)據(jù)收集工具的設(shè)計要點已經(jīng)介紹完畢。

我們已經(jīng)開源的 logkit 正是按照這樣的設(shè)計實現(xiàn)的,logkit 集合了多種開源數(shù)據(jù)收集工具的優(yōu)點,聚焦易用性,致力于打造產(chǎn)品級別的開源軟件。

數(shù)據(jù)收集工具 logkit

logkit(https://github.com/qiniu/logkit) 是七牛大數(shù)據(jù)團隊開源的一個通用的日志收集工具,可以從多種不同的數(shù)據(jù)源中采集數(shù)據(jù),并對數(shù)據(jù)進行一系列的解析、變換、裁減,最終發(fā)送到多種不同的數(shù)據(jù)下游,其中就包括了 七牛的大數(shù)據(jù)平臺 Pandora。除了基本的數(shù)據(jù)收集、解析以及發(fā)送功能之外,logkit 集合了多種同類開源軟件的優(yōu)勢,涵蓋了容錯、并發(fā)、熱加載、斷點續(xù)傳等高級功能,更提供了頁面方便用戶配置、監(jiān)控以及管理自己的數(shù)據(jù)收集業(yè)務,是一款產(chǎn)品級別的開源軟件。

目前支持的數(shù)據(jù)源包括:

  • File Reader: 讀取文件中的日志數(shù)據(jù),如 nginx/apache 服務日志文件、業(yè)務日志等。
  • Elasticsearch Reader: 全量導出 Elasticsearch 中的數(shù)據(jù)。
  • MongoDB Reader: 同步 MongoDB 中的數(shù)據(jù)。
  • MySQL Reader: 同步 MySQL 中的數(shù)據(jù)。
  • MicroSoft SQL Server Reader: 同步 Microsoft SQL Server 中的數(shù)據(jù)。
  • Kafka Reader: 導出 Kafka 中的數(shù)據(jù)。
  • Redis Reader: 導出 Redis 中的數(shù)據(jù)。

目前支持發(fā)送到的服務包括 Pandora、ElasticSearch、InfluxDB、MongoDB 以及本地文件五種,近期還會支持發(fā)送到 Kafka 以及發(fā)送到某個 HTTP 地址。

  • Pandora Sender: 發(fā)送到 Pandora(七牛大數(shù)據(jù)處理平臺) 服務端。
  • Elasticsearch Sender: 發(fā)送到 Elasticsearch 服務端。
  • File Sender: 發(fā)送到本地文件。
  • InfluxDB Sender: 發(fā)送到 InfluxDB 服務端。
  • MongoDB Sender: 后發(fā)送到 MongoDB 服務端。

而在這已經(jīng)實現(xiàn)的有限的幾個發(fā)送端中,我們是這么設(shè)計的使用場景:

  • 如果收集數(shù)據(jù)是為了監(jiān)控,那么可以使用 InfluxDB Sender,發(fā)送到開源的 InfluxDB 服務端,實現(xiàn)實時數(shù)據(jù)監(jiān)控。
  • 如果收集數(shù)據(jù)是為了搜索查看,那么可以使用 Elasticsearch Sender,發(fā)送到開源的 Elasticsearch 服務端,進行日志查詢。
  • 如果收集數(shù)據(jù)是為了計量統(tǒng)計或者其他一些涵蓋復雜的增刪改查需求的場景,那么就可以使用 MongoDB Sender,在本地對數(shù)據(jù)進行聚合,再發(fā)送到開源的 MongoDB 服務中。

而發(fā)送到 七牛的 Pandora 服務 中,不僅能涵蓋上述全部場景,還提供了大量可以快速發(fā)掘數(shù)據(jù)價值的實際應用場景的使用模板,同時還可以利用七牛成本較低的云存儲服務對數(shù)據(jù)進行持久備份。

目前 logkit 支持的收集端和發(fā)送端并不多,非常歡迎大家來貢獻更多的收集 / 發(fā)送端。

量身定制

再回過頭來聊聊量身定制的話題,本文描述了一個數(shù)據(jù)收集工具打造的完整過程,我們深知量身定制一個數(shù)據(jù)收集工具有多么重要,而量身定制也是 logkit 的一大特點。logkit 架構(gòu)中的每個組成部分(Reader、Parser、Sender、Transformer、Channel 等)都是一個 GO 語言的 package,你完全可以用 logkit 中的包,自己寫主函數(shù),從而定制一個專屬的收集工具。我們提供了代碼案例 (https://github.com/qiniu/logkit/tree/develop/samples) ,方便你親自實踐。

優(yōu)勢

總體而言,logkit 有如下優(yōu)勢:

  • GO 語言編寫,性能優(yōu)良,資源消耗低,跨平臺支持。
  • Web 支持,提供 頁面 對數(shù)據(jù)收集、解析、發(fā)送過程可視化
  • 插件式架構(gòu),擴展性強,使用靈活,易于復用。
  • 定制化能力強,可以僅使用部分 logkit 包,以此定制專屬收集工具。
  • 配置簡單,易于上手,可通過 頁面 進行操作管理
  • 原生中文支持,沒有漢化煩惱
  • 功能全面,涵蓋了包括 grok 解析、metric 收集、字段變化 (transform) 在內(nèi)的多種開源軟件特點
  • 生態(tài)全面,數(shù)據(jù)發(fā)送到七牛的 Pandora 大數(shù)據(jù)平臺支持包括時序數(shù)據(jù)庫、日志檢索以及壓縮永久存儲等多種數(shù)據(jù)落地方案。

下面讓我們來實踐一下,看看 logkit 在實戰(zhàn)中是什么樣子。

logkit 實戰(zhàn)

下載

編譯完后的 logkit 是一個 Go 的二進制包,你可以在 logkit 的 Download 頁面 (https://github.com/qiniu/logkit/wiki/Download) 找到對應操作系統(tǒng)的 Release 版本。

也可以參照 logkit 源碼編譯指南,從代碼層面定制自己的專屬 logkit。

啟動

logkit 部署非常簡單,將這個 binary 放在系統(tǒng) PATH 路徑中就算部署完成了,推薦使用諸如 supervisor 等進程管理工具進行管理。

啟動 logkit 工具,可以使用默認的配置文件,執(zhí)行如下命令即可。

  1. logkit -f logkit.conf 

配置文件中默認開啟了 3000 端口,初次使用可以通過瀏覽器打開 logkit 配置頁面,配置 runner 并調(diào)試讀取、解析和發(fā)送方式,瀏覽器訪問的地址是 http://127.0.0.1:3000 。

配置

數(shù)據(jù)收集工具的設(shè)計與最佳實踐
圖 3 logkit 首頁

打開網(wǎng)址后看到如圖 3 所示的 logkit 配置助手首頁,這個頁面會清晰地展示目前所有的 logkit Runner 運行狀態(tài),包括讀取速率、發(fā)送速率、成功 / 失敗數(shù)據(jù)條數(shù),以及一些錯誤日志。還可以在這里修改和刪除 Runner。

點擊左上角【增加 Runner】按鈕,可以添加新的 logkit Runner。

數(shù)據(jù)收集工具的設(shè)計與最佳實踐
圖 4 數(shù)據(jù)源 Reader 配置

如圖 4 所示,新增 Runner 的第一步就是配置數(shù)據(jù)源,為了盡可能方便用戶,logkit 將絕大多數(shù)選項都預設(shè)了默認值,用戶只需要根據(jù)頁面提示填寫黃色的必填項即可。

按頁面步驟依次配置數(shù)據(jù)源、解析方式、以及發(fā)送方式。

數(shù)據(jù)收集工具的設(shè)計與最佳實踐
圖 5 解析數(shù)據(jù)

如圖 5 所示,在配置解析方式的頁面還可以根據(jù)配置嘗試解析樣例數(shù)據(jù),這個頁面可以根據(jù)你的實際數(shù)據(jù)非常方便地調(diào)試解析方式。

數(shù)據(jù)收集工具的設(shè)計與最佳實踐
圖 6 字段變化 Transformer

如圖 6 所示,除了解析以外,還可以針對解析出來的某個字段內(nèi)容做數(shù)據(jù)變換(Transform),即上一章中描述的 Transformer。可以像管道一樣拼接多個 Transformer,做多重字段變化。

最后配置完發(fā)送方式,可以在如圖 7 所示的頁面做二次確認。

數(shù)據(jù)收集工具的設(shè)計與最佳實踐
圖 7 確認并添加頁

在二次確認的頁面中,可以直接修改表達內(nèi)容也可以返回上一步修改,最終點擊添加 Runner 即可生效。

到這里,一個復雜的數(shù)據(jù)收集工作就完成了,怎么樣,就是這么簡單,快來實際體驗一下吧!

責任編輯:未麗燕 來源: 36大數(shù)據(jù)
相關(guān)推薦

2016-12-27 08:49:55

API設(shè)計策略

2013-06-13 09:21:31

RESTful APIRESTfulAPI

2023-11-20 16:06:34

軟件開發(fā)微服務架構(gòu)Spring

2022-06-28 13:25:19

K8sPrometheusGrafana

2012-02-07 09:17:13

2018-09-28 05:18:41

2010-12-28 10:12:39

PHP

2025-01-02 09:06:43

2013-10-23 10:45:55

移動中間件最佳實踐

2011-06-20 06:22:18

ibmdwDB2

2025-10-09 01:22:00

MySQL數(shù)據(jù)庫ID字段

2018-05-02 13:59:01

大數(shù)據(jù)數(shù)據(jù)收集數(shù)據(jù)科學

2009-06-22 14:48:21

DRY架構(gòu)設(shè)計

2016-12-13 10:13:18

PHPUTF-8實踐

2025-06-06 02:00:00

2023-11-15 09:38:49

Oracle數(shù)據(jù)庫

2011-12-31 10:18:33

響應設(shè)計

2018-03-06 10:03:10

微信數(shù)據(jù)監(jiān)控

2013-12-04 09:35:02

云安全移動數(shù)據(jù)

2016-08-22 15:15:14

數(shù)據(jù)實踐
點贊
收藏

51CTO技術(shù)棧公眾號

国产福利小视频在线观看| 亚洲精品综合在线观看| 瑟瑟在线观看| 日韩精品国产精品| 久久影视免费观看| 亚洲国产日韩一级| 91夜夜揉人人捏人人添红杏| 国产主播在线播放| 精品久久久亚洲| 欧美精品久久99久久在免费线| 大胆欧美熟妇xx| 成人免费高清在线播放| 国产高清成人在线| 国产精品久久久久久久7电影| 加勒比婷婷色综合久久| 久久爱www成人| 91精品国产欧美一区二区18| 99精品人妻少妇一区二区| 香蕉视频网站在线观看| 99久久精品免费精品国产| 国产日产欧美a一级在线| 欧美激情亚洲综合| 牛牛国产精品| 在线观看欧美成人| 动漫精品一区二区| 日本一区二区三区在线视频 | 欧美日韩国产精选| 欧美网站免费观看| 欧美女同一区| 亚洲少妇30p| 色之综合天天综合色天天棕色| 欧美一区二区三区成人片在线| 麻豆极品一区二区三区| 国产91色在线|免| 偷偷操不一样的久久| 欧美激情在线| 日韩综合网站| 欧美日韩在线亚洲一区蜜芽| 国产精品va无码一区二区| 亚洲资源一区| 成人免费在线观看入口| 一本色道久久综合亚洲精品婷婷| 国外av在线| 久久精品在这里| 麻豆av一区二区三区| 深爱五月激情五月| av中文一区二区三区| 99视频免费观看蜜桃视频| 99久久精品国产一区色| 精品一区二区在线视频| 国产一区二区丝袜高跟鞋图片| 国产男人搡女人免费视频| 日韩精品一级二级| 国产精品成人一区二区| 成人一二三四区| 日本成人在线不卡视频| 国产精品视频导航| 国产乱色精品成人免费视频| 国产麻豆一精品一av一免费 | 日韩视频在线一区二区三区| 欧美午夜美女看片| 国产主播在线看| 一根才成人网| 在线免费观看成人短视频| 黄色av免费在线播放| 成人精品动漫| 欧美一区二区免费视频| 伊人久久久久久久久| 精品亚洲精品| 亚洲色图18p| 长河落日免费高清观看| 91精品国产乱码久久久久久 | 视频国产一区二区| 欧美极品一区二区三区| 国产91精品久久久久久久| 中文字幕69页| 激情图区综合网| 都市激情久久久久久久久久久| 亚洲精品中文字幕在线播放| 18岁成人毛片| 成人a'v在线播放| 久久艳片www.17c.com| 久久影院一区二区| 久久精品30| 国产在线高清精品| 欧美一区二区三区激情| 国产婷婷色一区二区三区在线| 欧美日韩在线免费观看视频| 丁香花电影在线观看完整版| 日本久久电影网| 日本xxxx人| 亚洲国产综合在线看不卡| 国产91精品不卡视频| 成人黄色免费网| 国产成人在线网站| 欧美日韩高清免费| 国产写真视频在线观看| 岛国精品视频在线播放| 欧美丰满美乳xxx高潮www| 自拍偷拍亚洲色图欧美| аⅴ资源天堂资源库在线| 欧美影院一区二区三区| 天堂va欧美va亚洲va老司机| 免费视频一区三区| 欧美高清视频一区二区| 国产精华7777777| 成人动漫在线一区| 致1999电视剧免费观看策驰影院| 国产v日韩v欧美v| 8x8x8国产精品| av黄色在线免费观看| 欧美性久久久| 国产欧美日韩91| 三区在线观看| 一区二区三区免费在线观看| 欧美一级特黄a| 色老板在线视频一区二区| 久久影视电视剧免费网站| 中文在线字幕免费观| 91香蕉视频污| 国产精品无圣光一区二区| 精品一区二区视频| 日本欧美电影在线观看| 欧美日韩精品欧美日韩精品一 | 91丨精品丨国产| 亚洲欧美日韩中文在线制服| 精品无码av在线| 狠狠v欧美v日韩v亚洲ⅴ| 日韩高清av| 最新中文字幕在线播放| 亚洲国产精品99| 欧美日韩精品在线观看视频 | 91亚洲精品一区| 婷婷成人激情| 欧美亚洲禁片免费| a天堂中文字幕| 国产调教视频在线观看| 捆绑调教一区二区三区| 日本一区视频在线| 欧美电影网址| 亚洲人成在线观看| 三级网站在线播放| 久久综合五月天婷婷伊人| 波多野结衣之无限发射| 精品三级av在线导航| 午夜精品久久久久久久99热浪潮 | 亚洲黄色免费三级| 91精品国产高潮对白| 顶级嫩模精品视频在线看| 黄色录像特级片| 亚洲精品观看| 久久久久久国产精品三级玉女聊斋| 国产哺乳奶水91在线播放| 亚洲免费在线观看| 少妇极品熟妇人妻无码| 亚洲午夜久久久久久尤物| 超碰97在线资源| 24小时免费看片在线观看| 亚洲国产日韩欧美综合久久| xxxxx91麻豆| 中文字幕一区在线播放| 国产亚洲综合av| 中文字幕天天干| 亚洲成人免费| 国产精品久久7| 中国字幕a在线看韩国电影| 亚洲精品一区二区三区不| 91视频久久久| 亚洲欧洲日韩综合一区二区| 人妻体体内射精一区二区| 狠狠综合久久| 欧美精品二区三区四区免费看视频| 写真福利精品福利在线观看| 丝袜亚洲另类欧美重口| 国产按摩一区二区三区| 精品成人乱色一区二区| 国产伦理片在线观看| 精品一二线国产| 人体内射精一区二区三区| 国产精品一区二区三区av麻| 成人av在线天堂| 182在线播放| 国产精品久久久久影院老司 | 激情综合网婷婷| 精品久久影院| 操人视频欧美| 亚洲www啪成人一区二区| 伦伦影院午夜日韩欧美限制| 无码精品人妻一区二区| 欧美日韩在线观看一区二区 | 欧美一区二区三区成人久久片| 免费在线视频欧美| 欧美va亚洲va| 成人黄色三级视频| 亚洲在线视频免费观看| 亚洲精品国产熟女久久久| 在线观看中文字幕av| 久国产精品韩国三级视频| 国产精品www在线观看| 精品日韩在线| 国产免费高清一区| 日韩专区视频| 欧洲精品在线视频| 欧美videosex性欧美黑吊| 亚洲最新av网址| 日本xxxxxwwwww| 欧美一区二区三区四区久久| 成人免费毛片视频| 亚洲国产毛片aaaaa无费看 | 日本特黄a级片| 99热在线精品观看| 亚洲区成人777777精品| 国产欧美一区二区三区精品观看| 成人看片在线| 奇米一区二区| 国产专区精品视频| 欧美magnet| 97精品欧美一区二区三区| 操你啦在线视频| 国产美女精品人人做人人爽 | asian性开放少妇pics| 国产一区二区三区国产| 天堂社区在线视频| 性欧美暴力猛交另类hd| 青青青青草视频| 狠狠色狠狠色综合日日tαg | 新67194成人永久网站| 97人妻精品一区二区三区免| 国产精品伊人色| 浓精h攵女乱爱av| 模特精品在线| 欧美 日韩 国产在线观看| 狠狠干综合网| 又大又硬又爽免费视频| 狠狠噜噜久久| 欧美午夜性视频| 黄色国产精品| 久草免费福利在线| 伊人精品在线| 丁香六月激情网| 黄色av一区| 男女私大尺度视频| 一区免费视频| 无码 制服 丝袜 国产 另类| 影音先锋久久精品| 精品少妇人妻av免费久久洗澡| 黄色综合网站| 人妻熟妇乱又伦精品视频| 亚洲人成在线影院| 欧美一区二区三区爽大粗免费 | 一本大道久久精品懂色aⅴ | 国产精品麻豆| 91精品视频播放| 国产在线不卡一区二区三区| 亚洲bt欧美bt日本bt| 亚洲亚洲一区二区三区| 国产一区在线观| 奇米色欧美一区二区三区| 日韩欧美第二区在线观看| 欧美一区二区三区免费观看| 国产永久免费高清在线观看| 亚洲精品一区二区久| 精品福利视频导航大全| 国产亚洲精品美女久久久久| 尤物网在线观看| 九九热精品视频在线播放| 69av成人| 国产精品久久久久aaaa九色| 中文幕av一区二区三区佐山爱| 91精品国自产在线观看 | 水蜜桃久久夜色精品一区的特点| 超碰av在线免费观看| 国产一区二区在线视频| 日本人添下边视频免费| 国产精品国模大尺度视频| 黄色小视频免费网站| 国产美女视频91| 国内精品免费视频| 久久影院电视剧免费观看| 免费黄在线观看| 亚洲精品免费在线播放| 亚洲国产日日夜夜| 精品国产人妻一区二区三区| 久久亚洲综合色| 自拍偷拍第9页| 免费成人av在线播放| 精品国产123| 亚洲精品国产一区二| 国产视频自拍一区| 精品孕妇一区二区三区| 久久频这里精品99香蕉| 成人免费网站www网站高清| 亚洲最大av网站| 国产剧情一区| 日韩a级在线观看| 日韩国产精品久久| 熟女人妻一区二区三区免费看| ww久久中文字幕| 99久久99久久精品国产| 狠狠躁夜夜躁人人躁婷婷91| 在线观看日韩一区二区| 日韩精品视频在线播放| 福利视频在线| 国产精品96久久久久久| 精品欧美午夜寂寞影院| 一本—道久久a久久精品蜜桃| 国产手机精品在线| 欧美高清你懂的| 国产精品免费一区二区三区四区| 精品国产一区二区三区四区| 国产美女在线一区| 狠狠久久亚洲欧美| 亚洲色图第四色| 日韩欧美大尺度| 六月婷婷中文字幕| 欧美xxxx综合视频| 久久久加勒比| 日本在线视频一区| 免费中文字幕日韩欧美| 国产吃瓜黑料一区二区| yjizz视频| 国产精品卡一卡二卡三| 四虎精品永久在线| 精品国产乱码久久久久久夜甘婷婷| 免费网站免费进入在线| 国产成人亚洲综合青青| 青青草久久爱| 亚洲三级色网| 国产精品亚洲第一区| 中文有码一区| 人妻有码中文字幕| 成人av免费网站| 日韩 欧美 亚洲| 日韩欧美亚洲国产另类| 国产一二三区在线观看| 成人深夜直播免费观看| 久久美女视频| 一起操在线视频| 欧美亚洲日本一区二区三区 | 成人av一级片| 成人黄色在线看| 一区二区三区免费高清视频| 日韩午夜精品视频| 在线黄色网页| 97人摸人人澡人人人超一碰| 午夜精品久久| 深夜视频在线观看| 亚洲一级二级三级| 日本美女一级片| 欧美在线观看一区二区三区| 亚洲国产网址| 午夜视频在线瓜伦| 国产精品久久久久三级| 国产麻豆91视频| 欧美福利视频在线| 丝袜连裤袜欧美激情日韩| av网址在线观看免费| 中文字幕二三区不卡| 一区二区不卡视频在线观看| 欧美精品一区二区免费| 给我免费播放日韩视频| 国产日产欧美视频| 中文字幕巨乱亚洲| hs视频在线观看| 国语自产精品视频在线看一大j8| 亚洲免费专区| 在线黄色免费看| 亚洲一区二区视频| 深夜福利免费在线观看| 国产日韩视频在线观看| 国产精品www994| 亚洲区免费视频| 91精品一区二区三区久久久久久 | 欧美三级欧美成人高清www| 国产九色在线| 91精品国产综合久久久久久丝袜 | 亚洲va综合va国产va中文| 亚洲影院免费观看| 奇米影视888狠狠狠777不卡| 91精品久久久久久| 亚洲激情婷婷| 欧美激情久久久久久久| 日韩女优av电影在线观看| 亚洲综合电影| 国产精品88久久久久久妇女 | 日韩亚洲欧美在线观看| 桃色av一区二区| 中文字幕欧美日韩一区二区三区| 成人avav影音| 在线亚洲欧美日韩| 国内精品久久久久久久| 日本一本不卡| 欧美双性人妖o0| 欧美精品v日韩精品v韩国精品v| 国产夫妻在线播放| 51xx午夜影福利| 中文字幕国产一区| 色视频免费在线观看| 亚洲va电影大全| 七七婷婷婷婷精品国产|