Azkaban源碼分析1----日志保存和獲取


Azkaban是一個JavaWeb項目,源碼閱讀難度相對不大本篇主要介紹Azkaban的日志保存和獲取。

閑話不說直接正文!!!!!

 

閱讀源碼第一步,找到入口類:

Azkaban是一個gradlew項目,從github下載好源碼導入idea中,目錄為:

azkaban-web-server:里面主要是一些servlet 和web資源,azkaban-exec-server:主要是一些job和flow運行的方法,azkaban-common:主要是操作數據庫的類和方法。

 

日志保存的入口類:

日志分為:flow日志 和  job的日志

azkaban-3.62.0\azkaban-exec-server\src\main\java\azkaban\execapp\FlowRunner.java

 

azkaban-3.62.0\azkaban-exec-server\src\main\java\azkaban\execapp\JobRunner.java

當任務運行完畢會分別調用 flowRunner中的closeLogger()方法和finalizeLogFile()方法來完成日志的保存。

這兩個方法都調用了同一個方法。

我們進入到這個方法:

azkaban-common/executor/ExecutorLoader.java

 executorLoader是一個接口類:

由azkaban-3.62.0\azkaban-common\src\main\java\azkaban\executor\JdbcExecutorLoader.java實現了接口類中的方法。

我們可以看到uploadLogFile方法調用了executionLogsDao中更新數據庫的操作,將日志數據保存到數據庫中(會將日志數據進行壓縮后進行保存)

 

2.web端日志獲取流程

日志獲取的入口類:

 

\azkaban-3.62.0\azkaban-web-server\src\main\java\azkaban\webapp\servlet\ExecutorServlet.java

通過servlet獲取前台頁面發送過來的ajax請求,

ajaxFetchExecFlowLogs()來接收 flow日志的請求。

 

 

ajaxFetchJobLogs來接收獲取job日志的請求

ajax

 

 他們都調用了exectorManagerAdapter(azkaban-common\src\main\java\azkaban\executor\ExecutorManagerAdapter.java)接口中的方法來獲取日志,

真正實現方法的其實是\azkaban-common\src\main\java\azkaban\executor\ExecutorManager.java 這個類

兩個方法都調用了executorLoader接口中的方法,最后調用azkaban-common\src\main\java\azkaban\executor\ExecutionLogsDao.java  中的

fetchLogs()方法來獲取日志。
注意:再獲取日志是會對獲取到的日志進行解壓縮,在根據對應的編碼格式打印

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM