小編最近一直用 Impala 在分析產品的 API log,雖然有下 SQL 做了一些圖表 (DAU, MAU) 出來,但如果要讓非資訊人員自己下指令產生這些圖表的話,真的是會要了他們老命。尤其這些圖表如果是要給 PM、行銷看的話,每隔幾天就要叫工程師跑圖表,工程師真的會累死 Orz。
雖然有 ELK 這種整套都弄好好的系統,但這種系統還是工程師比較知道如何操作。小編想了一下,自己寫一套讓大家一鍵產生圖表還比較方便,於是就花了兩三天做了這個「窮人版 ELK」。
本來小編是想直接用 Cloudera HUE 產出來的圖表拿來處理,但因為 HUE 的報表是用 D3 產生出來的,所以如果真要跟 HUE 串接的話,除了 auth 那段要解決之外,還要處理 D3 產出來的互動式圖表。看了一下實在太花功夫,所以小編就放棄這段,直接重頭開始刻。
這次開發用了下面幾套工具,一直 pipe 來 pipe 去的,小編頭都快昏了 Orz。如果要跟數據打交道的話,真的要好好學一下 Linux 上的各種文字處理工具:
1. impala-shell:用 Impala 下 SQL 指令,將資料拉回來,參數 -B 可以將結果產生成 CSV 格式
2. csv2json:因為這次用的圖表工具只吃 JSON 格式,所以先將資料從 CSV 轉為 JSON,才能繼續下一步
3. json2highcharts:自己開發的程式,因為小編這次用的圖表工具 highcharts,無論是資料或設定檔 (像是顯示直條圖或折線圖) 都是 JSON 格式,所以要把這些資料跟設定檔轉成 highcharts 能吃的格式,所以又做了一次 JSON 轉換
4. highcharts-export-server:最後一步就是要呼叫產生圖表的工具了,小編找了蠻多的能在 command line 執行的圖表工具,有要裝 cairo 的,有要裝 png lib 的,還有一些要重頭 make 的,實在都太麻煩。後來看到這套是使用 phantomjs,直接跑 browser render,雖然肥了一點但不用管 dependency 就是爽 XDD
把這 4 步都執行完之後就會產生圖表了。但為了方便之後產生新類型的圖表,小編打算只要讓工程師把寫好的 DSL 丟到 server 上,非資訊人員就可以直接用網頁操作了。下一篇再來講如何開發 DSL 好了 (又是一連串的文字處理 Orz)。
* backend-log-explorer:https://github.com/mitaketw/backend-log-explorer
* 想了解在執行 Impala 之前,這些資料做了什麼處理嗎?推薦強者小編同事的文章:https://www.facebook.com/groups/616369245163622/permalink/1329521563848383/
#log #impala #highcharts #elk #資料分析
同時也有10000部Youtube影片,追蹤數超過2,910的網紅コバにゃんチャンネル,也在其Youtube影片中提到,...
linux export 指令 在 紀老師程式教學網 Facebook 的最佳解答
Make 官方手冊...兼紀老師閒聊 Make 的優點
撰寫 Linux 程式多的人,應該或多或少都會接觸 Make 這套「流程自動化」軟體。它可以把一大堆像咒語一樣的 Linux 指令,給一個乾淨好記的名字,然後你就把那些又臭又長的指令忘了,直接執行那個好記的名字、放鬆喝杯茶,等著工作完成。
不過 Make 也有被人詬病的地方,就是它的自動化語法實在不太親民。由於它發明於 1977 年,當時用 Linux 的人,大多是些電腦專業學者,也不會在乎語法難不難(抑或說,越難越能激起這群人喜歡挑戰的劣根性? XD)。不過一旦學會,它強大的功能實在讓人愛不釋手。我舉幾個我認為不錯的功能給大家:
(1) 目標相依(Target Dependency):你可以要求乾淨好記名字背後那沱指令,執行前必須先執行另一沱定義於其它乾淨好記名字之下的指令。也就是說,你的 Make 會越寫越輕鬆,因為之前辛苦寫好的指令有機會被「重用(音『崇用』)」(咦?「重用」不就是「物件導向」的目的嗎? XD)。如下所示:
my_command: other_command
(一堆像咒語一樣的 Linux 指令)
這會讓 my_command 所屬的那堆 Linux 指令執行前,先執行另一個名字 other_command 下所屬的那一沱 Linux 指令。
(2) 隱式規則(Implicit Rules):你要求 Make 拿 abc.o (類似 Windows 內的 abc.obj)檔加入最終執行檔,但 abc.o 根本不存在。Make 會聰明到知道 abc.o 事實上是由 abc.c (C 語言原始碼檔)編譯過來的。在人類不必介入的情況下,它會聰明地自動編譯 .c 檔成 .o 檔,然後再執行所要求的指令。這會讓 Make 語法大大縮減。因為善用「潛規則」,可少寫很多行 Linux 指令。
(3) 遞迴建造(Recursive Build):當你要求編譯如一串葡萄般複雜的子文件夾結構時,Make 若發現子文件夾內已經有 Make 指令檔了,它會全權委託該 Make 指令檔編譯當地文件夾的內容。這可以讓你撰寫「根 Make File 文件」時,適當分權各文件夾的 Make File 決定如何編譯當地文件。
(4) 與「環境變數」結合:Make 檔裡用的「變數」,根本就是 Linux 下的環境變數。也就是說,如果有個 Make 變數值是:
MY_VAR = abc
我臨時想把它改成 pqr,不必修改原始碼。只要在 Linux 命令列下執行修改「環境變數」的指令即可:
export MY_VAR = pqr
美妙的是,export MY_VAR = pqr 僅存於當下記憶體。下次重開機時,MY_VAR 又會變回 abc。很適合「臨時想改成一個值,但懶得下次改回來」的場合用。
不知不覺,這篇又變成「落落長」(台語,「冗長」之意)了。我寫這麼多,無非是希望我「嵌入式 Linux 程式設計班」的同學,除了詛咒 Make 語法怪異之餘,也能欣賞它的強大之處。「手排車」是比較難開,但要學「藤原拓海」做出過髮夾彎的「水溝蓋跑法」,麻煩您不要詛咒換檔時還要踩「庫拉幾(台語,「離合器」之意)」。
以下附上 Make 官方文件,我班上的同學,想下載 PDF 檔回去好好保存的...咳咳咳...我放在「秘密基地」裡的「eBook」資料夾...麻煩低調地搬回家觀賞... XD
http://www.gnu.org/software/make/manual/make.html
這裡有另一位國外網友,訴說他為何喜歡 Make 的原因。我大多贊同他的觀點,提供給各位參考:
http://bost.ocks.org/mike/make/