先来搞数据采集模块吧, 简单做一下需求分析,大概暂时就这几个需求吧,很简单。
1. 需求分析
1.1 syslog协议采集
1)采用udp协议对宿主机指定端口进行监听,实时获取数据后将数据放入redis缓存。
2)可通过配置文件对UDP协议绑定的IP、端口进行设置。
3)端口默认 514 syslog标准端口,IP默认 0.0.0.0 即宿主机所有IP地址。
1.2 服务中心消息通信
1)提供与服务中心交互接口,便于服务中心对该模块进行状态数据采集,这是考虑以后如果采用集群部署形式时,可以通过
服务中心模块进行系统状态追踪。
2)接口采用应答模式,由服务中心发送状态获取请求,采集模块回应相应数据。
3)采集端可通过配置文件配置所属服务中心IP地址。
4)服务中心交互内容包括一下内容:
获取节点系统信息:计算机名、IP地址
检查节点数据采集模块运行状态
1.3 资产自动发现
1)支持资产自动发现,通过网络自动发现存在数据交互关系的客户端资产。
2.概要设计
资产数据由服务中心从mysql数据库缓存到redis中,数据采集模块从redis中获取资产数据,redis仅做内存级缓存,不做数 据持久化,这样可以避免如果mysql中资产数量大导致的查询时长影响采集端的入库效率问题。
2.1 syslog协议采集流程图
2.2 接口设计
服务中心通信接口 | ||||||
请求地址 | interactive | |||||
请求形式 | POST | |||||
返回值类型 | return_resultModel | |||||
请求参数 | ||||||
序号 | 参数名 | 类型 | 必填 | 详细说明 | ||
1 | command | string | √ | 服务中心发送的指令 | ||
返回参数(json) | ||||||
序号 | 参数名 | 类型 | 详细说明 | |||
1 | result | int | 返回是否成功,1表示成功,0表示失败。 | |||
2 | data_message | List | json数据根据指令不同有不同的内容 |
3.详细设计
3.1 syslog协议采集
1)UDP采用非阻塞式监听,确保可以第一之间返回监听状态,减少数据丢失的概率,非阻塞式监听:Selector
2)采用固定线程池进行多线程数据处理,集中java线程池的对比,固定线程池较为适合。
3)固定线程池暂时采用n*2+1的计算方式确定线程数量,n代表cpu的核心数,这是一个基础算法。
3.2 接口命令列表
1)get_sysinfo:获取系统基本信息
返回数据格式:{"runstatus":"1","nodename":"node1"}
runstatus:节点运行状态,接口正常调用则返回1
nodename:节点计算机名称
状态检测及系统信息获取暂时使用一个命令
3.3 redis表设计
表名 | 字段名 | 类型 | 说明 | |
spartacus_assets_discover | sourceip | string | 数据产生者的IP地址 | 资产发现表 |
nodeip | string | 接收数据节点的IP地址 | ||
createtime | string | 发现资产的时间 | ||
spartacus_{nodename}_data | hostip | string | 资产ip | 数据采集表 |
receivetime | long | 接收时间 时间戳 | ||
receivesource | string | 接收源 syslog | ||
datacontent | string | 数据内容 | ||
idspartacus_assets | int | 资产id | ||
assetsname | string | 资产名称 | ||
securitydomain | string | 资产所处的安全域 | ||
businessdomain | string | 资产所处的业务域 | ||
physicalposition | string | 资产所处的物理位置 | ||
subnodename | string | 资产所属节点的名称 | ||
subnodeip | string | 资产所属节点的ip |
3.4 mysql表设计
mysql中spartacus_nodes表设计时预设了部分字段,这是为将来部分功能做的预留,这个阶段可以不用在意。