|
实时数据能立即反映线上业务情况,对业务来说能很快看到业务变化带来的实时影响,对技术人员来说能实时观察线上出现的一些波动,有利于及时发现线上问题。数据埋点上报经过数据部门处理后,有两个离线表,天表和小时表,天表是第二天才能看到前一天的数据,小时表是可以看到当天过去的时间内的数据,为了更早看到数据效果,尝试采用小时表来进行数据监控。流程基本如下:unsetunset过程介绍unsetunset架设服务基于Egg.js,Egg对定时任务支持很好,新建一个定时任务文件在app/schedule下即可,每个文件都是一个独立的定时任务。const Subscription = require('egg').Subscription;class ScheduleTask extends Subscription { static get schedule() { return { interval: '5m', // 每5分钟执行一次任务 type: 'worker', }; } // subscribe 是真正定时任务执行时被运行的函数 async subscribe() { const pageTypes = getConfig(); // 加载录入的埋点 await this.ctx.service.task.runData(pageTypes); this.ctx.service.task.refreshTask(); // 刷新任务,获取查询结果 }}module.exports = ScheduleTask;查询结果查询每个小时埋点结果前,先要确定从哪个时间节点开始查询,这里手动指定一个,查询当前时间2个小时前的数据,比如当前是12点,我们就从10点开始查。注意用这个时间作为游标,需要缓存起来,后面移动游标的时候需要用到。在task这个service中,执行sql查询,sql如下:const sql = `SELECT pagetype, hour, count(token) as cFROM page_action_1hWHERE pagetype in ('${pageTypes.join('\',\'')}') and actiontype='pv' and dt='${dateCursor.format('YYYY-MM-DD')}' and hour='${queryHour
|
|