基于AWK和Shell的计费账务内控监测系统设计
2020-05-20郭湘
郭 湘
(中移铁通广东分公司,广东 广州 510080)
0 引言
近些年电信企业内部管理体制在不断发生变革。为了适应日趋激烈的市场竞争,公司的经营规模、组织构架和管理层次都在相应发生变化,然而管理工作很多没有同步发展起来,无形中加大了企业的风险指数。电信运营商的内部控制建设关乎企业的正常运营,是适应市场竞争的客观需要。计费账务[1]是涉及公司财务收入的重要依据,对计费账务中每一环节的管控到位也能反映出一个公司内控管理水平。
本文基于AWK[2]和Shell[3]编程语言,设计了计费账务内控监测系统,并重点阐述其软件设计。系统采用C/S[4]和B/S混合编程的方法,在采集交换机话单文件[5]列表流程中使用封装脚本体的方法,实现交换机登录[6]、采集文件、标准化、入库一次性自动执行,在采集核对功能上采用B/S架构进行告警展示。系统实现了省级中心和地市运维两级对计费账务流程监控,为后期内控审计工作提供有效的凭据。
1 系统整体流程
系统整体监控点分布如图1所示,设计理念是将计费账务系统设定为不确认系统,为每个计费账务流程环节设置监控探针点[7]。探针点以旁路的方式嵌入到交换机、数据库、应用程序中,探针采集到的数据与现有综合计费账务系统中的数据进行比对,从而在每月出账前发现每个计费环节中可能出现的问题,同时验证账务数据的准确性。
系统在计费核心网上部署1台数据采集机和1台应用服务器,采集机采集全省各交换机的原始数据和计费账务数据,应用服务器上部署监控数据库和前端应用服务。图1为系统硬件搭建。
图1 系统硬件搭建
如图2所示,系统分为三层架构:采集控制层、数据管理层、功能应用层,其中采集控制层包括:交换话单文件列表采集模块、计费流程校验数据采集模块、账务准备校验数据采集模块、账务结果校验数据采集模块。中间数据管理层包括账务监控数据库和检验数据原始库,各环节探针采集到的数据形成文本导入账务监控数据库中,它是系统功能实现的数据基础。最后一层是功能应用层,实现采集核对、账务日志、详单处理检查、平衡性检查、账务数据检查业务逻辑。
2 计费账务流程
图3为本系统计费流程。计费账务从总体上来看主要由三部分组成:话单环节、批价环节和账务环节。计费系统首先从交换机上进行话单采集,然后将二进制文件标准化为文本文件;计费系统将话单记录按来去话方向分拣为计费话单和结算话单;分拣后的计费话单去重处理后进行批价入库;最后系统进行费用合账处理,生成每个号码当月的账务信息。为了保证这条“生产线”上产品的质量,必须在每个环节设置控制点,保证数据的准确。
3 系统软件设计
整个内控监测系统的软件部分包括数据采集、比对、输出告警显示等程序设计。本文主要在AWK和Shell的基础上对话单文件列表采集核对模块进行分析,对其中涉及的账务、平衡性检查等模块只做简略介绍,并不深究其控制代码。
3.1 采集控制程序设计
为了方便管理,本系统对全省各地市每一台交换设备设置了一个8位ID,交换机的ID规则为区号+序号,如广州的一台汇接局交换机,命名规则为20000001。整个软件流程如图4所示。
此流程采用C/S编程方式,主要有以下三个环节:
图2 系统架构图
图3 计费流程图
图4 采集数据流图
(1)在采集机(服务端)上完成交换机参数表设置。交换机列表包括区号、交换机标识、交换机型号、交换机IP地址、采集账号、密码、目录位置、交换机注册时间。系统会每隔一段时间扫描和提取账务系统中的交换机数据表,比对交换机列表,如有新增,则加入交换机列表。交换机列表以文本形式存放于采集服务器下。
(2)登录交换机(客户端)。登录方式为FTP方式,输入参数为交换机列表参数,包括交换机IP地址、登录用户名和密码,登录成功则进入交换机的采集目录。图5为登录某交换机的指令序列。
图5 登录指令序列
全省可按轮询交换机列表参数方式进行后台定时自动登录,同时在后台形成登录日志文件,如果失败,则后台定时登录交换机进行重新补登操作。
(3)采集列表,并进行标准化及入库核对。交换机每个月在话单存储空间生成一个以年月命名的目录,目录下存放话单文件,交换机将每秒经过交换机的话务写入到临时话单文件中,每隔一段时间(一般为1 h)截断写入,并正式生成话单文件。系统根据以上的话单生成原理,通过采集原始话单文件列表的相关信息与账务系统中采集的数据进行核对,从而发现运行的账务系统是否存在话单文件漏采或采集不完整的情况。图6为采集部分代码。
图6 采集代码片段
对采集的列表文件进行标准化:截取关键字段信息,包括交换机ID、话单文件生成日期、话单文件生成时间、采集文件名称、采集文件大小。这里用到多种工具进行格式标准化,标准化代码段如图7所示。这里要注意的是,由于华为和中兴文件列表中的文件名、话单产生时间格式和位置不同,因此用到的标准化指令也不同。
新技术的整合将支持开发新的工具,帮助个人进行终身学习、参与公共政策决策以及依靠个人力量产生信息资源、软件和其他商品及服务。
图7 标准化代码片段
cat功能是显示文本文件内容,并将操作对象显示在标准输出,本指令将列表文件显示内容重定向到标准化文件20000011.txt;cat输出通过管道方式传递给接下来执行的AWK程序;AWK程序段功能就是对输入数据进行模式匹配:扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式。如果发现内容匹配,则进行下一个编程步骤。如上示例表示,若存在“20000011”字段,则调用print函数打印到缓存区中,同时按照标准化文件要求截取1~4字段信息;接着调用sed[8]程序进行第二次文件过滤,在没有指定地址情况下,sed将处理输入缓存文件的所有行,本例sed程序功能是扫描缓存区输入的所有行,如发现有空格则执行删除操作,并用替换功能将字段间用“|”进行分隔;最后一道过滤是采用grep程序,该指令用于查找包含指定的范本样式内容的文件,参数e是排除包含“12”、“13”字符的行,本例功能即删除过往年份或无效话单文件名。经过三次过滤后,最终形成需要入库的标准化文件。
因为AWK可以作为一个Shell的命令使用,因此AWK能与Shell批处理程序很好地融合在一起,这给实现AWK与Shell程序的混合编程提供了可能。实现混合编程的关键是AWK与Shell Script之间的对话,换言之,就是AWK与Shell Script之间的信息交互:AWK从Shell Script中获取所需的信息,在AWK中执行Shell命令行;Shell Script将命令执行的结果传递给AWK处理以及Shell Script读取AWK的执行结果等,图8为两者之间的变量传递实例。
图8 AWK和Shell的参数传递
图8程序片段中,AWK处理交换机列表文件后产生的结果传递给Shell程序中的ip、us等参数;而在标准化过滤过程中,AWK和grep又可直接引用Shell中的变量参数ry和by的值。
3.2 数据管理程序设计
系统数据管理层需对采集到的标准化文件进行装载入库。同时需从账务生产系统中获取采集日志记录(需跨库操作),两组数据通过数据库的SQL语句外联方式建立连接,形成核对基础数据表,图9为数据库语句片断。
图9 数据库语句片断
为了便于管理,程序将登录、采集、标准化、数据装载入库进行封装,生成shell脚本体。脚本体对Linux和Informix环境变量[9]设置、交换机网络地址、登录指令、操作参数设置、文件格式转换、数据库SQL语句执行进行统一包装。即用户在使用“采集核对”探针操作时,只需要调用一次脚本程序就可完成从数据采集到入库的一系列操作,从而保证了程序执行的连贯性,确保网络传输数据的高效和安全。
3.3 功能应用程序设计
采集核对功能模块包括对比汇总查询、采集文件异常告警查询、采集超时异常告警查询,实现对全省交换机采集情况进行监测和分析。该过程采用了B/S编程方法,使用了JSP技术进行开发。
3.3.1 对比汇总查询
用户可根据区号、交换机ID、查询时间段进行组合查询。汇总对比记录展示是对所有的交换机侧文件和计费侧采集文件进行对比显示。系统根据交换机侧生成的话单文件与计费账务侧话单文件记录进行映射对比。由于计费侧记录包含了完整路径,如“/data/crtbs/ddd/coll/20000011/201501/2015012023.BIL”,所有比对过程中需采用substr函数进行截取。
3.3.2 采集异常告警
采集异常告警包括两方面:交换机侧已经生成话单文件而计费账务侧仍未采集到话单文件;计费账务已经采集到了话单文件,但是它们与原始的交换机侧生成的原始话单文件大小不一致。系统会将以上问题话单文件进行告警展示,提醒地市人员及时介入并进行核查处理。
3.3.3 采集超时告警
对计费账务侧长时间未采集到话单文件的交换机进行告警显示。系统判断采集超时的依据是:系统扫描计费账务侧采集到的话单文件记录,筛选出系统中最新的一条话单文件记录,根据此话单文件的生成时间与当前系统时间比对,若比对结果的时间偏差超过系统设置的超时阈值,则告警提示此交换机的计费账务侧采集超时。一般故障原因有两种:交换机侧话单文件未生成(交换侧原因)或计费账务侧采集未成功(网络、系统原因),需要地市网管进行甄别处理。图10为监控页面。
图10 监控页面
3.4 其他功能
计费账务内控监测系统还包括其他模块:详单处理检查、平衡性检查、账务日志检查。
3.4.1 详单处理检查
话单处理检查模块包括每月话单数比对检查、平均每日话单数检查、交换机每日话单数检查、计费流程监控,以保证话单采集的完整性和整个计费过程的准确性。
3.4.2 平衡性检查
平衡性检查模块包括采集批价流程的平衡性检查、详单表与合账表平衡性检查以及代收费平衡性检查。这部分的平衡性检查核心主要是对计费节点数据再计算和相邻节点数据差值计算。平衡指标包括记录数平衡和费用平衡,图11为平衡性检查环节图。
图11 平衡性检查环节图
3.4.3 账务日志检查
账务日志模块包括出账处理登记表和出账日志查询,实现对每个账期进行流程分析和出账记录登记。
出账处理登记表的作用包括记录每月出账完成情况,对每月出账记录进行存档;系统提供出账处理登记表的批量打印功能,以供出账负责人员签字确认,同时作为后期公司财务内控审计的检查依据。
4 测试和分析
系统试运行1个月后,网管人员利用监控系统,两次发现计费侧因为交换机问题或网络故障而导致话单漏采问题。以采集核对模块为例:系统运行期间,如果全年按每月平均发现2个漏采文件,每个文件按约1万条话单估算,全年将丢失约近24万条话单,漏采造成的营收损失是显而易见的。同时计费账务内控监测系统的自动化告警能力也缩短了计费人员从发现故障到处理的时间周期,提高了工作效率。
5 结论
本文基于AWK和Shell设计了一套计费账务内控系统,主要说明了其中采集核对软件部分,对其中多个功能的运作进行了分析。目前该系统能够基本满足账务系统监控需求,在实际使用中,后台采集程序定时自动运行,完成对全省交换机轮询登录并进行数据统一采集、入库和比对。计费账务内控监测系统投入使用以来,减轻了大量人工核对操作量,提高了计费账务处理的效率。随着公司内控矩阵不断补充完善,计费账务内控系统将加入更多的控制点,提高系统内控监测能力。