
告警全流程-溯源数据完整性核查.docx
18页溯源数据完整性核查1. 数据流走向1.1 数据流图数据流图1) 全流程是基于告警模块产生的全流程日志,溯源服务通过ftp方式去获取日志,做相应的分析呈现在告警模块产生的全流程日志都放在$AFM_LOG目录下2) 全流程日志分为三种,index、state、data日志,index和state所有模块都有,data日志只有RT和SC有,index是正常的数据文件,state是引起告警丢失的日志,data是告警原文日志3) 溯源服务分为三个模块:alarmLocate、alarmTrace、solr-server,alarmLocate是负责数据index、state数据入库,并且生成5分钟汇总数据(tfm_alg_rec_5m)和产生告警,solr-server主要对告警原文进行全文索引做模糊匹配的4) 上层模块,拓扑图呈现的数据是通过java服务生成,wcf生成数据库的相关访问服务1.2 汇总表关系数据入库此部分数据是直接从告警模块采集来的数据,由alarmlocate负责入库数据源数据目标算法说明index日志tfa_alg_rec表不做计算处理从原文中获取数据后入库,model_id是从文件名读取出来,原文字段含义:“24个标识符|FP0|FP1|FP2|FP3|CFP0|CFP1|CFP2|CFP3|告警状态|告警级别|告警标题|specialid|告警采集时间|接收的时间|发送出去时间”state日志tfa_alg_lostsum日志tfa_alg_outsumdata日志全文索引在全文索引服务机器上生成索引 低粒度汇总alarmLocate模块基于原始粒度的数据做5分钟汇总,源表是意义上实质alarmLocate不是基于源表的汇总,是基于入源表之前缓存在内存中的数据,这样效率更高。
目标表目标字段源表算法说明其他说明tfm_alg_rec_5mAlarm_cnttfa_alg_rectfa_alg_losttfa_alg_rec表count(*)+tfa_alg_lost表count(*)group byAlarm_err_cnttfa_alg_lost表count(*)--异常丢失group byAlarm_skip_cnttfa_alg_lost表count(*)--正常业务处理丢失group byDelay_sumtfa_alg_rec表send_time - rec_timegroup byDelay_maxtfa_alg_recmax(send_time - rec_time)group bytfm_alg_lost_cause_5mAlarm_err_codetfa_alg_losterr_contentgroup byAlarm_err_cntcount(*)group bytfm_alg_delay_topn_5mdelaytfa_alg_rectfa_alg_lostsend_time - rec_timegroup bytopnsource根据两个表分别做统计tfm_alg_outsum 广东需求tfm_alg_outsum_visit 广东需求tfm_alg_rec_scan_visit 广东需求 关于错误说的说明,有两类错误:一类是程序异常丢失告警如(Alarm_err_cnt),另一类是业务中主动丢弃的(Alarm_skip_cnt),告警经过一个模块实际发送出去的告警应该是Alarm_cnt - Alarm_err_cnt - Alarm_skip_cnt高粒度汇总由汇总程序基于低粒度汇总成高粒度的汇总数据,汇总程序即我们的性能汇总程序。
目标表目标字段源表算法说明tfm_alg_rec tfm_alg_rec_5m算法同低粒度汇总tfm_alg_lost_cause tfm_alg_lost_cause_5m算法同低粒度汇总tfm_alarmlog_scrt_errport_channeltia_alg_collecttfm_alg_lost_cause_5m.model_id=20001 and tfm_alg_lost_cause_5m.operate_unite=tia_alg_collect.port_channelAlarm_err_codetfm_alg_lost_cause_5mAlarm_err_cnttfm_alg_lost_cause_5mtfm_alarmlog_dispAlarm_err_codetfm_alg_lost_cause_5mtfm_alg_lost_cause_5m.model_id=50001 Alarm_err_cnttfm_alarmlog_scrt_recport_channeltia_alg_collecttia_alg_collect.model_id=20001 and tia_alg_collect.operate_unite=tia_alg_collect.port_channelAlarm_cnttfm_alg_rec_5mAlarm_err_cntDelay_avg1.3 日志格式说明$AFM_LOG 为必须配置的环境变量,如果未配置,默认../log/ALog/(文件的时间是采集接收到时间)1)流程日志:文件名:$AFM_LOG\YYYYMMDD\HH\AFM_modelid_OperateUnit.index.0~5.LOG文件格式:24个标识符|FP0|FP1|FP2|FP3|CFP0|CFP1|CFP2|CFP3|告警状态|告警级别|告警标题|specialid|告警采集时间|接收的时间|发送出去时间\ 备注:1)除了RT入口环节,ftp、cfp、告警状态、告警级别、告警标题字段都是为空。
2)告警采集时间是从msgserial中解析出来的时间格式:yyyy-MM-dd HH:mm:ss2)状态日志:文件名:$AFM_LOG\YYYYMMDD\HH\AFM_modelid_OperateUnit.state.0~5.LOG文件格式: 24个标识符|FP0|FP1|FP2|FP3|CFP0|CFP1|CFP2|CFP3|告警状态|告警级别|告警标题|specialid|告警采集时间|接收的timestamp|发送出去的timestamp \状态码|状态补充说明时间格式:yyyy-MM-dd HH:mm:ss3)原文日志:文件名:$AFM_LOG\YYYYMMDD\HH\AFM_modelid_OperateUnit. data.0~5.LOG文件格式:SC:原始文件RT:BOCO_AFM:24个标识符号告警原文…….BOCO_AFM:24个标识符号modelid是模块编码,OperateUnit处理线程标识,含义同上1.4 常见问题1. RT&WFM数据量都对,单独JFM不对由于RT和WFM通常部署部署在一台机器上,因此很有可能是时钟没做同步,所有模块的机器都要做时钟同步。
2. 当刚启动时模块可以正常记录全流程日志,但运行一段时间后没有全流程日志,很可能是磁盘空间满了,因此需要合理划分磁盘空间,并且合理配置溯源服务取完数据后的清除时间3. 溯源服务是作为ftp-client方式获取全流程日志,当重启了服务器后无法获取全流程日志,很可能是ftp服务没有启动,某些机器没有配置默认启动ftp服务,通过查看溯源服务日志是否有ftp连接异常,或者从溯源服务机器ftp被采机器确定问题,被采机器必须开启ftp服务4. RT或WFM的全流程数据比实际少,但是入库的告警数都正常,很有可能是没有开启某个进程的全流程日志,默认情况下全流程日志是不开启(例如手动重启某一个进程但是忘了加参数,或ldap中没有配置造成整体重启后没参数),检查某个进程是否有生成全流程日志,通过启动参数或配置控制写全流程日志5. alarmLocate在ftp登录时候必须具备删除权限,能取到文件但是无法删除,首先文件夹权限和ftp设置都是正确,原因可能是selinux开启可以关掉selinux或用发布包中脚本配置调度任务进行删除2. 中层数据验证12.1 基本验证122.12.1.1 流程日志122.12.1.12.1.1.1 基本的验证基本验证,主要验证5分钟汇总数据,主要验证上下环节的数据是否可以对上。
验证说明select t.model_id, sum(alarm_cnt) recvcnt, sum(alarm_err_cnt) errcnt, sum(alarm_skip_cnt) sipcnt, (sum(alarm_cnt) - sum(alarm_err_cnt) - sum(alarm_skip_cnt)) sendcnt from tfm_alg_rec_5m t where t.first_result >= to_date('2014-03-04 10:00:00', 'yyyy-mm-dd HH24:mi:ss') and t.first_result < to_date('2014-03-04 10:10:00', 'yyyy-mm-dd HH24:mi:ss') group by t.model_id order by t.model_id验证20001(rt)、30001(jfm发消息平台)、30002(jfm发wfm)、40001(wfm)、60001(gaia)、70001(gtft)、90001(部省接口),验证每个环节发送出去的数是否对上下一环节的接收数,此部分即界面拓扑图上呈现的。
异常处理如果发现两个模块的数据对不上,可以采用下边的sql具体找出是哪些对不上select * from tfa_alg_rec r where r.sc_time >= to_date('2014-03-04 12:00:00', 'yyyy-mm-dd HH24:mi:ss') and r.sc_time < to_date('2014-03-04 12:05:00', 'yyyy-mm-dd HH24:mi:ss') and r.model_id = 20001 and r.msg_serail not in (select r1.msg_serail from tfa_alg_rec r1 where r1.sc_time >= to_date('2014-03-04 12:00:00', 'yyyy-mm-dd HH24:mi:ss') and r1.sc_time < 。












