system: [SYSTEM]

user: 3. 系统功能实现 3.1. 设备信息采集 Sigar (System Information Gatherer And Reporter)是包含于Hyperic-hq产品内的一款基础包，主要用于各类设备数据的收集工作，具备良好的兼容性，支持各类平台，例如目前主流的操作系统：windows、Linux、Mac OSX以及AIX等。 Sigar还拥有多语言支持的优势，具备各类语言(如C、C#以及java等)的API，实现本功能需要用到的API为java版本，即sigar.jar。其工作原理就是利用本地方法来调用当前操作系统对应的API来取得系统相关信息。例如：Linux操作系统下的df指令，可以用来检查文件系统的磁盘空间占用情况；Windows系统下的cmd命令diskpart，也可以用来查看磁盘的占用情况。而Sigar的调用可以自动适应系统所对应的操作系统，统一操作而且方便快捷 [ 10 ] 。 为了实现设备信息采集功能，需要利用这一便利的接口，采集以下两大类的系统设备信息： 第一类为静态数据，主要为：① 操作系统的各项信息。例如：内核类型、名称、版本号以及系统描述等。② CPU信息。例如：供应商、型号以及使用者等。 第二类为动态数据，主要为：① 内存信息。例如：内存总量、当前使用量以及当前交换区使用量等。② 磁盘信息。例如：磁盘已有分区、磁盘总大小、当前已使用量、文件系统类型以及资源利用率等。③ 网络信息。例如：主机域名、当前IP地址、网络流量、网络接口、配置信息以及路由等。 3.2. 异常IP逻辑判断 首先，需要确定异常IP的判断逻辑以及预警机制。通过访问日志(全省IDC网内的上行流量)中的目的IP与域名两个字段与基础数据中IP地址段与登记域名作匹配分析出异常IP数据，分三种情况，逻辑如下： 1) IP未登记 访问日志中的目的IP与机房信息IP地址段中的所有IP做匹配，如果访问日志中记录的目的IP没有在IP地址段登记，那么该日志信息为异常IP数据：IP未登记。 2) IP登记为保留，实际未启用 在基础数据机房信息IP地址段的IP登记信息中，IP的使用方式分为三种：静态，动态，保留。保留的意思为该IP已登记但是还未启用。那么访问日志中的目的IP与机房信息IP地址段中的所有IP做匹配，如果访问日志中记录的目的IP可以与IP地址段内登记的IP成功匹配，那么就继续看该IP的使用状态，如果IP登记状态为动态或者静态，则该日志信息正常；如果该IP登记状态为保留，那么该日志信息为异常IP：IP登记为保留实际未启用 [ 11 ] 。 3) IP登记，但域名有误 访问日志中的目的IP与机房信息IP地址段中的所有IP做匹配，如果访问日志中记录的目的IP可以与IP地址段内登记的IP成功匹配，并且登记状态无误，那么继续将该条记录的域名与在基础数据中该IP对应的域名进行比较，如果域名匹配不上，那么该日志信息为异常IP数据：IP登记但域名有误。综上，判断逻辑流程见图7。 3.3. 异常IP预警功能 1) IP地址在数据库中的存储 出于实际情况的考虑，即基础数据中IP地址段与登记域名过于繁多，首先需要考虑节省IP地址的存储空间。 常规的存储数据类型为varchar(15)，将IP地址作为字符数组来存储，这样做的好处是具有极高的可读性，但每个地址占用了7~15个字节，浪费存储空间这一缺点也十分明显。 进一步的改进是将字符串类型改成整数类型bigint，也就是将IP地址192.167.3.94存储为整数类型192167003094，占8个字节。这样虽然牺牲了数据部分的可读性，但是明显地节省了存储空间。 本文提出了进一步的优化存储方法，采用int数据类型，基本舍弃了数据的可读性，来保证将存储空间降到最低，仅为4个字节，并且有利于IP地址的排序，而且加快了目标IP的匹配和查找。以上三种数据类型的对比见表1。 2) 匹配步骤与实现 在基础数据库构建之初，就按照int类型存储全部的IP地址，然后对整数类型的数据值进行排序。在匹配目的IP之前，需要调用INET_ATON函数完成IP地址的类型转换，由string转为int型。或者自定义转换函数，类似于256进制数的转化，带点的IP地址转换规则如下： 图7. IP异常状态判断流程图 Table 1 IP storage type compariso 序号 数据类型 占用空间 存储形式 优缺点 1 Varchar (15) 7-15字节 192.168.3.45 可读性最强占用空间较多 2 bigint 8字节 192168003045 可读性一般占用空间一般 3 int 4字节 3232236333 可读性最差占用空间最少 表1. IP存储类型对比 IP Number = 16777216 * w + 65536 * x + 256 * y + z where IP Address = w.x.y.z 随后，仅需要检测目标IP是否存在与数据库表中即可。当转换后的IP地址在数据库中已基本有序时，二分逼近查找是最高效的检索方法之一，其时间复杂度仅为O(logn)。 若不存在，则为异常IP，异常类型为“IP未登记”。若存在，再检测数据库中登记的状态标识码，若为保留，则为异常IP，异常类型为“IP未启用”；若为动态或者静态，则比较其相应的域名是否一致，来判断其属于正常IP，或是异常类型为“IP登记，域名有误”。 3.4. 报表引擎 报表引擎又分为四大部分，分别是：插件库、自定义报表、固定场景报表以及报表数据服务 [ 12 ] 。 1) 插件库 插件库是以第三方开源的展示插件为基础来实现的，其中主要的应用技术是jQuery。系统会参考市场使用规则形成统一的展现插件接口。对外而言，第三方展现插件处于封装状态；而对内而言，全部使用统一的展现接口。 2) 自定义报表 自定义报表归纳总结了日常的使用场景，有针对性的进行抽象操作，各类模块都是由最常用的场景抽象而来。在自定义报表里，可以自己选择布局和模块，组合成为个性化的业务报表。同时，可以将自定义报表发表在系统门户上。 3) 固定场景报表 固定场景报表是针对特定分析流程的报表场景来做设计实现的，它可以基于自定义流程的报表代码生成器，生成报表需要的基础框架代码，在生成的代码基础上进行简单程序开发，用于满足个性化报表或特定分析流程的报表需求。 4) 报表数据服务 报表数据服务是报表引擎获取业务数据的核心服务，它可以根据报表的配置信息从基础语义层获取业务数据，并以约定好的、统一的数据格式进行输出。同时，报表数据服务还负责对报表模板的配置信息进行管理。 综合上述报表引擎的结构，系统报表的功能结构见图8。 图8. 系统报表功能结构图 3.5. 报表推送分析 报表推送在信息安全的监管中处于重要的一环，是对访问日志、异常设备信息、异常IP信息以及违法违规信息的总结和整理。同时，也是为了响应管局系统必须存在的一项功能，IDC需要定期向管局侧的系统发送这样的统计报表，以便于完成电信部门的监管要求。所以，报表推送功能应该包括以下部分统计内容。 1) 设备异常统计分析，也可以称为异常机房数量统计分析，根据存储的历史数据，从时间序列分析某一指标(正常/异常机房数)随时间的变化趋势，找出其规律的方法。可以用折线图来表示指标变化或发展的趋势。 2) 异常IP统计分析，按全省、各个地市维度进行过滤和统计异常IP数据，支持趋势和占比分析，以表格形式呈现。 3) 违法违规统计分析，对于采集到的网络流量进行数据过滤并且清洗等操作，去除无关信息。随后采用DFA算法进行违法违规信息的统计工作。下面将举例对DFA算法的执行过程进行必要的讲解。 首先，需要构建敏感词库，例如加入敏感词“武汉市”以及“武汉大学”，选择最适合的数据结构，构建一棵树或者森林。这样在判断某个目标词是否属于敏感词时就容易的多，很大程度上降低了检索匹配的工作量。例如要判断目标词是否是“武汉市”，根据第一个字符，就可以确定需要检索的是哪一颗树，之后再从这棵树中匹配关联。然后需要判断这个敏感词是否已经检索完毕，这就得用到标志位来完成 [ 13 ] 。 这部分功能使用HashMap实现，仍然以“武汉市”，“武汉大学”为例，构建敏感词的树，以便于关键词的过滤。 ①查询“武”是否存在于HashMap，如果检索失败，证明这样的一棵树尚未构建，那么直接new这样的一棵树。转到步骤③。 ②如果上一步检索成功，表示有“武”开头的敏感词，执行操作hashMap = hashMap.get(“武”)，转到步骤①，接下来继续匹配字符“汉”，“市”。 ③这时需要判断是否是敏感词的最后一个字符，如果敏感词尚未终了，就定义标志位isEnd = 0，不然定义isEnd = 1。 完成统计操作后，进行汇总工作。按全省、各个地市维度进行过滤和统计违法违规数据，支持趋势和占比分析，以折线图或者饼状图形式呈现。