數(shù)據(jù)監(jiān)控和自動化數(shù)據(jù)測試工具beeper

數(shù)據(jù)部數(shù)據(jù)質(zhì)量預(yù)警與自動化數(shù)據(jù)測試工具

github: https://github.com/gangly/beeper

一醉拓、Beeper產(chǎn)生原因

Beeper就是當(dāng)年的BP機(jī)锄蹂,能發(fā)出嗶嗶的聲音昼丑,也有通知喳逛、報(bào)警器的意思最铁,這里用來作為數(shù)據(jù)質(zhì)量預(yù)警工具的別名。作為數(shù)據(jù)開發(fā)戚宦,多數(shù)情況下需要每天自動檢查數(shù)據(jù)質(zhì)量是否有問題个曙,有以下幾方面需要關(guān)注:

  • 每天是否有數(shù)據(jù),在檢查時(shí)間點(diǎn)是否按時(shí)產(chǎn)出了數(shù)據(jù)
  • 數(shù)據(jù)是否完整受楼,例如流量的各個(gè)渠道是否都有數(shù)據(jù)
  • 是否有臟數(shù)據(jù)垦搬,數(shù)據(jù)加工錯誤導(dǎo)致產(chǎn)出了臟數(shù)據(jù)
  • 數(shù)據(jù)波動是否正常,某些維度上的指標(biāo)相對前段時(shí)間是否在合理范圍內(nèi)
    針對上面幾種情況艳汽,Beeper能滿足預(yù)警功能猴贰。

二、Beeper工作原理

Beeper是用python2.7開發(fā)河狐,因?yàn)橐O(jiān)控大數(shù)據(jù)平臺上的hive數(shù)據(jù)米绕,需要用azkaban進(jìn)行任務(wù)調(diào)度。
Beeper是基于即時(shí)查詢hive實(shí)現(xiàn)馋艺,這就要工程師預(yù)先寫好hql并配置好預(yù)警規(guī)則栅干。
目前beeper支持mysql, hive, presto查詢

架構(gòu)圖
  1. Beeper讀取jobconfs目錄下文件,一個(gè)配置文件代表一個(gè)預(yù)警任務(wù)
  2. 配置解析器對配置進(jìn)行解析捐祠,清洗出hql碱鳞,預(yù)警檢查規(guī)則等
  3. 數(shù)據(jù)查詢收集器將hql通過hive客戶端執(zhí)行,將執(zhí)行后的數(shù)據(jù)進(jìn)行收集踱蛀,清洗
  4. 將每條數(shù)據(jù)通過檢查器進(jìn)行檢查判斷窿给,將風(fēng)險(xiǎn)數(shù)據(jù)進(jìn)行打標(biāo)(郵件顯示為紅色)
  5. 構(gòu)造報(bào)警郵件內(nèi)容,發(fā)送郵件

三率拒、Beeper使用方法

3.1Beeper

由python2.7開發(fā)
beeper.job為azkaban腳本

3.2配置文件

用戶只需要在jobconfs目錄下按照一定格式編寫配置文件崩泡,一個(gè)配置文件代表一個(gè)檢查任務(wù),
采用python風(fēng)格猬膨,格式如下:
配置文件示例

{
    'author': 'ligangc',
    'title': '流量異常檢測報(bào)告',
    'receivers': ['ligangc','tanjiquan'],
    'head': '''
        昨日:$yesterday
        差值:昨日uv-環(huán)比上周同日uv
        波動百分比:差值/環(huán)比上周同日uv
        數(shù)據(jù)變化報(bào)警閾值:uv差值絕對值大于5000并且波動變化絕對值大于10%
    ''',
    'jobs': [
        {
            'desc': 'presto test',
            'source': 'presto',
            'sql': '''
                select t1.pv, t2.pv from
                (
                    SELECT count(1) as pv FROM hive.bdc_dm.res_coreboard_employment) t1
                join (
                    select count(1) as pv from mysql1.market.mk_task where createymd = date('2017-09-10')
                ) t2 on 1=1
                ''',
            'headers': ['pv量1', 'pv量2'],
            'check': 'pv量1 != pv量2',
        },
        {
            'desc': 'market test',
            'source': 'mysql:market',
            'sql': '''
                select count(1) as pv from market.mk_task where createymd ='2017-09-10'
            ''',
            'headers': ['pv量'],
            'check': 'pv量 >= 5',
        },
        {
            'desc': 'clickweb流量異常檢查',
            'source': 'hive',
            'hql': '''
                SELECT t1.channel1 as channel, t1.uv as t1uv, t2.uv as t2uv, (t2.uv-t1.uv) as diff, (1.00*(t2.uv-t1.uv)/t1.uv) as cent
                from (
                    SELECT channel1,count(distinct uniqid) as uv from bdc_dwd.dw_fact_galog_pv_daily
                    where acct_day='$lastweekyesday' group by channel1
                )t1 join
                (
                    SELECT channel1,count(distinct uniqid) as uv from bdc_dwd.dw_fact_galog_pv_daily
                    where acct_day='$yesterday' group by channel1
                ) t2 on t1.channel1=t2.channel1;
            ''',
            'headers': ['渠道', '環(huán)比上周同日uv', '昨日uv', 'uv差值', '波動百分比'],
            'percent': ['波動百分比'],
            'check': 'uv差值 >= 5000 and 波動百分比 >= 0.1',
        },
    ]
}

發(fā)出的報(bào)警郵件內(nèi)容如下:

郵件內(nèi)容

下面依次解析配置文件內(nèi)容:

字段名 是否必須 描述 備注
author 任務(wù)編寫者 可不寫
title 報(bào)警郵件標(biāo)題
receivers 郵件接收者列表 不需要填郵箱后綴角撞,beeper會自動添加后綴
head 郵件前置描述信息
jobs 查詢表配置信息列表 每個(gè)查詢會在郵件中形成一個(gè)表格,可添加多個(gè)查詢
desc 查詢描述
hql sql表達(dá)式 會替換掉里面的日期標(biāo)志
headers 表頭信息勃痴,在郵件中展示 必須與hql中查詢出來的字段一一對應(yīng)
percent 需要顯示為百分比 值必須為headers中的值谒所,百分比保留兩位小數(shù)
check 預(yù)警檢測表達(dá)式 必須為headers中的值,關(guān)聯(lián)邏輯目前支持 and, or 這里每個(gè)指標(biāo)是用絕對值進(jìn)行比較
source 數(shù)據(jù)源類型 目前只支持hive/mysql/presto召耘; mysql格式, mysl:數(shù)據(jù)庫名

其中日期標(biāo)記百炬,Beeper計(jì)算出具體日期后將其自自動替換掉,其中支持的日期類型有:

日期標(biāo)記 描述 示例
$today 今日日期 2017-09-08
$yesterday 昨日日期 2017-09-07
$beforeyesday 前日日期 2017-08-06
$lastweekday 今日上周同日日期 2017-08-31
$lastweekyesday 昨日上周同日日期 2017-09-30
$day_today 今日日期(天) 08
$day_yesterday 昨日日期(天) 07
$day_beforeyesday 前日日期(天) 06
$day_lastweekday 今日上周同日日期(天) 31
$day_lastweekyesday 昨日上周同日日期(天) 30

3.3 使用方法

1)下載beeper.zip解壓后刪除jobconfs目錄下文件(兩個(gè)示例文件可參考)污它,編寫配置文件放在jobconfs目錄下剖踊,配置azkaban定時(shí)調(diào)度執(zhí)行beeper任務(wù)。
若數(shù)據(jù)有問題會發(fā)送報(bào)警郵件衫贬,沒問題則不發(fā)送郵件德澈。

2)自動化測試:將要測試的sql放在lib/autotests目錄下,運(yùn)行autotest.job

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末固惯,一起剝皮案震驚了整個(gè)濱河市梆造,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖镇辉,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屡穗,死亡現(xiàn)場離奇詭異,居然都是意外死亡忽肛,警方通過查閱死者的電腦和手機(jī)村砂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屹逛,“玉大人础废,你說我怎么就攤上這事『蹦#” “怎么了评腺?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長淑掌。 經(jīng)常有香客問我蒿讥,道長,這世上最難降的妖魔是什么锋拖? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任诈悍,我火速辦了婚禮,結(jié)果婚禮上兽埃,老公的妹妹穿的比我還像新娘侥钳。我一直安慰自己,他們只是感情好柄错,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布舷夺。 她就那樣靜靜地躺著,像睡著了一般售貌。 火紅的嫁衣襯著肌膚如雪给猾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天颂跨,我揣著相機(jī)與錄音敢伸,去河邊找鬼。 笑死恒削,一個(gè)胖子當(dāng)著我的面吹牛池颈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钓丰,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼躯砰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了携丁?” 一聲冷哼從身側(cè)響起琢歇,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后李茫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體揭保,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年涌矢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了掖举。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片快骗。...
    茶點(diǎn)故事閱讀 38,664評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡娜庇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出方篮,到底是詐尸還是另有隱情名秀,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布藕溅,位于F島的核電站匕得,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏巾表。R本人自食惡果不足惜汁掠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望集币。 院中可真熱鬧考阱,春花似錦、人聲如沸鞠苟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽当娱。三九已至吃既,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間跨细,已是汗流浹背鹦倚。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留冀惭,地道東北人震叙。 一個(gè)月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像云头,于是被迫代替她去往敵國和親捐友。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評論 2 349

推薦閱讀更多精彩內(nèi)容