报表监控思路

分享最近遇到的一个问题,每天早上都会发送一些报表,会产生一些问题:

  1. 报表太多,没注意哪个发了,哪个没发
  2. 不可能每天都看看报表发送是否正常

这其实就是监控的问题,所以需要来一个监控的小程序,来帮助提醒,这里来分享下实践思路


  1. 设计一个元数据表,保存每天需要发送的报表和基础信息,比如发送时间,一个大致的预警时间,因为7点开始调度,不可能1分钟就跑完吧,有的可能要久一些,所以有一个预警时间,表结构大概这样:
create table etl_monitor_job_metadata(
       id int,
       job_name varchar(100),
       send_time varchar(20),
       warn_time varchar(20),
       is_open int,
       etl_insert_time date
);

这里的is_open表示是否启用,有时候报表只发送几天,过了就不发送了,哦,写着写着,又想到了一个新的需求,就是发送日期,有的报表只需要周一发,也就是周报,看来还需要完善一下了

2.报表日志表,记录每天的报表执行情况


create table etl_monitor_job_log(
       log_date date,
       log_id varchar(100),
       job_name varchar(100),
       log_time date,
       log_status varchar(100),
       log_msg varchar(200),
       etl_insert_time date
);

目前比较简单,用job_name关联,获取当天的报表日志

3.获取当天没有完成的报表信息
我是定义了一个视图,来查找,超过预警时间,而且还没有执行成功日志的报表出来

create or replace view v_monitor_job_today as 
select  
        a.id,
        a.job_name,
        a.send_time,
        to_date( to_char(sysdate,'yyyy-mm-dd')||' '||a.send_time,'yyyy-mm-dd hh24:mi') as send_time_today,
        a.warn_time,
        to_date( to_char(sysdate,'yyyy-mm-dd')||' '||a.warn_time,'yyyy-mm-dd hh24:mi') as warn_time_today
from 
         etl_monitor_job_metadata  a        
where a.is_open=1 and not exists (select 1 from etl_monitor_job_log b 
                  where b.job_name=a.job_name and trunc(b.log_date)=trunc(sysdate) and b.log_status='success'
) and to_date( to_char(sysdate,'yyyy-mm-dd')||' '||a.warn_time,'yyyy-mm-dd hh24:mi')<sysdate                  
;       

4.监控主程序
我是用python写了个小程序,直接就While True,让他一直在后台跑着,一旦有没有执行的程序就发消息,推送到企业微信

大致思路就是这样了,我继续去完善代码了

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容