数据源监控与预警

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

名词解释:

同比 (本期-上期)/上期 = 本期/上期 -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`

 fi
logfile=/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
#导入数据到mysql
CMD="/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 takeTime
FROM
  ods.T_DS_FILEINFO
WHERE 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内的脚本

时间: 2024-08-26 10:22:10

数据源监控与预警的相关文章

利用数据库邮件服务实现监控和预警

背景 现在越来越多的企业.公司要求对于数据库实现7*24小时的数据库监控,一般情况下采用的就是第三方的平台来实现邮件和手机短信的监测提醒.前几日公司新上了一台服务器,急于部署程序还没来得及搭建其他相关平台,为了更好的监控数据库,暂时用SQL Server自带的邮件服务来实现对数据库的监控和预警.下面简要介绍下配置的过程便于以后使用. 配置邮件 整个部分的核心就是配置邮件服务,这部分需要一个邮件账户以及相应的邮件服务器.下面就以QQ的邮件为例进行说明. 1.设置邮件服务器 开启SMTP服务,点击开

spring boot基于DRUID数据源密码加密及数据源监控实现

前言 随着需求和技术的日益革新,spring boot框架是越来越流行,她也越来越多地出现在我们的项目中,当然最主要的原因还是因为spring boot构建项目实在是太爽了,构建方便,开发简单,而且效率高.今天我们并不是来专门学习spring boot项目的,我们要讲的是数据源的加密和监控,监控到好说,就是不监控也没什么问题,但是数据源加密却涉及到我们的系统安全.对于平时的学习测试,我们在项目中配置数据库明文密码是没什么问题的,因为我们的数据不重要,也就无所谓,但是在现实环境下的生产平台,配置明

SSM项目下Druid连接池的配置及数据源监控的使用

一,连接池的配置 在pom.xml中添加,druid的maven信息 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.21</version> </dependency> 数据源设置: 要在init-method设置init方法,才能在监控页面中查看数据源等操作 <!--使用dr

SpringBoot_数据访问-整合Druid&amp;配置数据源监控

第一步,在pom.xml文件中导入druid的文件信息 <!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.8</version> </dependency&g

Spring Boot 整合 Druid &amp;&amp; 配置数据源监控

1. 导入 Druid 包 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.12</version> </dependency> 2. application 配置文件配置 druid 数据源 spring: datasource: username: root password: r

SpringBoot系列之集成Druid配置数据源监控

继上一篇博客SpringBoot系列之JDBC数据访问之后,本博客再介绍数据库连接池框架Druid的使用 实验环境准备: Maven IntelliJ IDEA 先新建一个Springboot Initializer项目,详情参考SpringBoot系列之快速创建Initializer项目,注意引入必须的JDBC,web依赖等等,因为Druid默认没提供,所以去https://mvnrepository.com/artifact/com.alibaba/druid获取配置信息,项目创建之后,po

spring boot druid动态多数据源监控集成

当经常有发生连接池满获取不到连接时,可以开启druid监控,在连接都正常关闭的应用中,不应该出现下列警告,如下: 10:53:39.927 [Druid-ConnectionPool-Destroy--877824563] ERROR com.alibaba.druid.pool.DruidDataSource - abandon connection, owner thread: http-nio-8066-exec-8, connected at : 1579574585225, open

springboot之整合druid并配置数据源监控

pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4

01-运维监控

1.监控的重要性 听闻前辈所说,在监控不发达的时代,出行基本靠走,安全基本靠狗,那个时候没有自动化监控的概念,都是人工盯着机器,进行轮班:每天上班第一件事情就是去巡视一下,看看各项软件打印的信息是否有异常,顺便拿Execl记录一下. 现在如今的企业中,运维就要负责成百上千台的机器,传统的方式依然不行,没有高大上的方法是支持不起这种规模的监控,服务器随时随地可能出库长,需要通过监控来让机器来管理监控机器:不管是虚拟机还是物理机等等,当然有时候先上服务的运行,网络设备,业务状况以及用户体验也需要监控