公司的datax已經用了2年多了,效能以及基本功能上沒有太大問題。但是有乙個問題一直困擾著我,就是datax的錯誤告警。datax的日誌問題,一直令人頭疼。隨著job的逐漸增多,乙個排程程式或者指令碼列印出來的日誌實在太多,假如中途有哪個job執行報錯,根本無法排查,雖然datax自身會記錄每個job執行的日誌,在log目錄下,命名規則:指令碼名稱+執行時間,但是檔案數目過多排查起來還是挺困難的。
有了需求,就可以開始設計,給datax新增告警功能有兩種辦法,修改原始碼和捕獲日誌,當時為了不侵入原始碼,採用了捕獲日誌的方式。
修改datax啟動類,即bin/datax.py,將datax.py列印出來的日誌放入pipe(管道)快取中,根據最後執行返回的code判斷任務成功還是失敗,失敗則需要呼叫告警功能。具體修改後的**如下:
if __name__ ==
"__main__":)
parser = getoptionparser(
) options, args = parser.parse_args(sys.ar**[1:
])if options.reader is
notnone
and options.writer is
notnone
: generatejobconfigtemplate(options.reader,options.writer)
sys.exit(ret_state[
'ok'])
iflen
(args)!=1
: parser.print_help(
) sys.exit(ret_state[
'fail'])
startcommand = buildstartcommand(options, args)
# print startcommand
child_process = subprocess.popen(startcommand, shell=
true
,stdout=subprocess.pipe,stderr=subprocess.pipe)
register_signal(
) start=time.time(
) errmsg=
while child_process.poll()==
none
: line=child_process.stdout.readline(
)print
(line)
,# 使用,是為了使列印出來的日誌不換行
if time.time(
)- start >=
1800
:# 超時時間30分鐘
# 可以新增一些超時的資訊
break
if child_process.returncode !=0:
# 執行具體的告警操作,可以從啟動引數中獲取到具體的指令碼名稱
# 解析errmsg或者直接輸出
sys.exit(child_process.returncode)
更新日誌 BugHD 新增郵件告警功能
最近 bughd 又新增了一些功能,包括郵件告警 issue 分享 issue 備註等,同時也做了效能優化。希望能夠幫助你更高效地收集解決應用崩潰。除了 webhook 設定 之外,我們在 專案設定 訊息設定 頁面增加了郵件設定,你可以設定崩潰時間 崩潰次數。當崩潰問題超過設定的數值時,會自動向你的...
資料遷移工具Sqoop和DataX功能比較
最近由於專案需要,對apache sqoop和taobao datax工具進行了調研,這裡是對二者功能的初步梳理,不會涉及技術細節和使用方法,留作日後選型參考。sqoop是apache下的頂級專案,用來將hadoop和關係型資料庫中的資料相互轉移,可以將乙個關係型資料庫 例如 mysql,oracl...
iContact AE 新增功能
還是春節前翻譯了一下配置介面,後來想改一下聯絡人列表,一直沒時間改。上週出差一周都有點兒咳嗽,回來之後也更嚴重了,所以過節也沒想出差去玩,明天晚上多吃了點兒藥,今天上午好點兒了,沒事兒幹就把 整出來好好看了看,改了一下,加了個配置項來支援。原來 號碼放在聯絡人姓名的下邊,佔一空行,而後面空著很大空間...