博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据源监控与预警
阅读量:5267 次
发布时间:2019-06-14

本文共 3198 字,大约阅读时间需要 10 分钟。

      近期工作须要做一个数据源监控系统,监測每天的数据是否,按时。按量送过来,首先应为数据接入过来的时候,已经记录了相关的日志。比方文件到达时间,文件总个数,文件里总记录数,文件大小,数据日期等,如今要对这些指标进行监控并及时预警(发短信或邮件到相应的负责人),并记录到预警表中。好对预警后的异常进行跟踪处理。考虑到节假日对数据量的影响,还添加文件记录数和文件大小的同比。环比进行监測。

名词解释:

同比 (本期-上期)/上期 = 本期/上期 -1(本月-上年度的本月)/上年度的本月 * 100%

环比分为日、周、月环比和年环比。

环比发展速度是以报告期水平与其前一期水平对照(相邻期间的比較)。所得到的动态相对数。

表明现象逐期的发展变动程度。如计算一年内各月与前一个月对照,即2月比1月,3月比2月,4月比3月 (本月-上个月)/上个月 * 100%  环比增长。

分析:如今调度系统记录数据源相关的表有3个。第一个是t_ds_job记录数据源类型,是没有时间增量的,第二个是每天对1中的数据源进行汇总的情况,有时间增量。第三个是更具体的数据源记录信息。

第二个和第三个差别就是。比方一个数据源可能分10个文件,每一个文件都有到达时间,文件总记录数。文件大小等,第三个表就具体记录了每一个单独文件到达情况。可是第二个表仅仅记录了整个数据源到达了多少文件数量,文件大小。时间等信息。所以要计算的数据,存放在3个表中。并且有2个表还是增量,假设一步到位关联同比和环比的非常慢,并且导致sql非常长,不易读。

思想:把过程细化。每一个细化的步骤完毕一个目标数据。

建立结果中间表,然后通过中间表左联接就可以,又由于是每天跑的任务。全部把shell脚本配置到 crontab 调度或其他调度中。

详细脚本例如以下:

#!/bin/bash# 传入參数日期,或默认昨天的日期 if [ $# -lt 1 ];then startDate=`date -d "1 day ago " +%Y%m%d` startDate_one=`date -d "2 day ago " +%Y%m%d` startDate_seven=`date -d "8 day ago " +%Y%m%d` else startDate=`date -d "$1" +%Y%m%d` startDate_one=`date -d "1 day ago $1" +%Y%m%d` startDate_seven=`date -d "7 day ago $1" +%Y%m%d`  filogfile=/logs/basename $0.log` #定义写日志文件名称echo ${startDate}echo ${startDate_one}echo ${startDate_seven}# 清除 mysql 数据CMD="/usr/local/mysql/bin/mysql -h 192.1168.1.119 -uroot -pli72 -e \"delete from ods.t_ds_monitor where data_date = '${startDate}';\""EXESH_CMD#导入数据到mysqlCMD="/usr/local/mysql/bin/mysql -h 192.1168.1.119 -uroot -pli72 -e \"insert into ods.t_ds_monitor(data_date,ds_name,ds_business_type,fileTime,must_file_cnt,reach_file_cnt,no_reach,total_rec_cnt,file_hb,file_tb,total_file_size,rec_hb,rec_tb,takeTime,taskTime_hb,file_arrive_time,file_status)SELECT DISTINCT  a.data_date,  c.ds_name,  c.ds_business_type,  LEFT(a.last_update_time, 10) AS fileTime,  a.must_file_cnt,  a.reach_file_cnt,  a.must_file_cnt - a.reach_file_cnt AS no_reach,  a.total_rec_cnt,  ROUND((a.reach_file_cnt/e.reach_file_cnt-1),2) AS file_hb,  ROUND((a.reach_file_cnt/f.reach_file_cnt-1),2) AS file_tb,  a.total_file_size,  ROUND((a.total_file_size/e.total_file_size-1),2) AS rec_hb,  ROUND((a.total_file_size/f.total_file_size-1),2) AS rec_tb,   d.takeTime,  ROUND((d.takeTime/e.takeTime-1),2) AS taskTime_hb,  d.file_arrive_time_end,  '状态'FROM  ods.T_ds_job c  LEFT JOIN ods.t_ds_job_day_detail  b    ON c.ds_id = b.ds_id  LEFT JOIN ods.t_ds_job_day  a    ON c.ds_id = a.ds_id    AND a.data_date = b.data_date    LEFT JOIN    (SELECT  COUNT(1),  ds_id,  MAX(file_arrive_time) AS file_arrive_time_end,  MIN(file_arrive_time) AS file_arrive_time_start,  ROUND(    (      UNIX_TIMESTAMP(MAX(file_arrive_time)) - UNIX_TIMESTAMP(MIN(file_arrive_time))    ) / 3600,    2  ) AS takeTimeFROM  ods.T_DS_FILEINFOWHERE data_date ='${startDate}'GROUP BY ds_id       ) d ON c.ds_id=d.ds_id    LEFT JOIN  ods.t_ds_monitor e ON c.ds_name=e.ds_name AND e.data_date='${startDate_one}'  LEFT JOIN ods.t_ds_monitor f ON c.ds_name=f.ds_name AND f.data_date='${startDate_seven}'WHERE a.data_date = '${startDate}' ;\""EXESH_CMD
得到数据插入到关系型数据库mysql中。然后通过Java写一个定时任务,每天上班前发起预警程序,假设出现异常。把异常信息发到相应的负责人。这样就不用每天守着调度任务看,甚至有时周末也要远程看看自己数据任务有没有异常。

配置  cronable  -e 

 

 02   4   *   *   *     t_ds_monitor.sh           //每天运行t_ds_monitor.sh内的脚本  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/brucemengbm/p/6820839.html

你可能感兴趣的文章
go:channel(未完)
查看>>
[JS]递归对象或数组
查看>>
多线程《三》进程与线程的区别
查看>>
linux sed命令
查看>>
html标签的嵌套规则
查看>>
[Source] Machine Learning Gathering/Surveys
查看>>
HTML <select> 标签
查看>>
tju 1782. The jackpot
查看>>
湖南多校对抗赛(2015.03.28) H SG Value
查看>>
hdu1255扫描线计算覆盖两次面积
查看>>
hdu1565 用搜索代替枚举找可能状态或者轮廓线解(较优),参考poj2411
查看>>
bzoj3224 splay板子
查看>>
程序存储问题
查看>>
Mac版OBS设置详解
查看>>
优雅地书写回调——Promise
查看>>
android主流开源库
查看>>
AX 2009 Grid控件下多选行
查看>>
PHP的配置
查看>>
Struts框架----进度1
查看>>
Round B APAC Test 2017
查看>>