# 数据收集器 负责收集应用中的数据,经过筛选之后存储到`ElasticSearch` 中,主要核心功能是为了弥补CAT中的日志搜索能力较弱的短板,另外还会对CAT的拓展做增强,比如监控告警等等,更加满足实际业务的需要。 ## 核心功能 1. 日志搜索 提供控制台进行日志能力的搜索,涵盖消息队列、SQL执行、网关请求等等,后续会继续新增更多的模块; 2. 分组告警 提供多平台规则定义告警,将关注的异常信息告警到特定的讨论组中。 3. 前后端分离 将控制台录入通过端点提供访问,让特定的引擎根据规则参数进行渲染。 4. 存储层 - 表拆分: 由于监控的数据量较大,会按照天的纬度进行划分到不同的表中。 - 可拓展: 由于前期设计是`Msql`存储,但搜索能力太弱。切换到`ElasticSearch`了。底层可以来回切换成`Mysql`或者`ElasticSearch`. - 支持本地文件存储大文本文件,前期是为了弥补`Mysql`对大文本存储能力较弱,占用内存的情况。 5. 配置层 目前是按照本地配置走,支持`ElasticSearch`或`MySQL`切换,但目前都未实现,可以自行实现。 ## 核心代码梳理 ### 1. 模块分层 - jay-monitor-data-client : 客户端层,由客户端引入之后提供发送数据的能力。 - jay-monitor-data-core: 核心模块,全局类公共类定义 - jay-monitor-data-server : 服务端,负责接收客户端的数据进行分析、告警、存储 ### 2. 功能描述 #### 1. 数据传输 `MonitorDataServer` : 服务端数据接收的入口类,通过Spring注入之后调用`Start()`方法启动一个端口: 9420(默认),负责接收客户端发送过来的数据。 底层的默认传输是基于Netty,框架应用的蚂蚁金服的`bolt` 。 具体参考: `com.jay.monitor.data.server.config.BeanConfig#boltServer` : 会将所有实现`UserProcessor`接口的类作为消费类,负责消费客户端传递过来的数据。 这些消费类存储在包: `com.jay.monitor.data.server.process` 中涵盖 - MQ - SQL - URL #### 2.告警模块 在数据传输的过程中,会对每条数据进行分析,根据告警的规则来判定这条数据是否属于要告警的数据。 `RealtimeAlertProcess` : 实时告警处理器,负责接收数据传输的模块进行回调分析并且交由`ConfigAlertRule`处理。 `ConfigAlertRule` : 配置告警,负责读取配置与传输数据进行匹配。满足则告警 `MatchValueCondition` : 告警的配置规则定义,比如表达式、或者其他的一些规则详情。目前较推荐和灵活的是`ExpressionValueCondition`,根据Spring的表达式,非常灵活的匹配传输数据是否合理。 `AlertSendProcess` : 告警发送模型,负责调用各个平台实现的接口进行匹配发送到特定的平台。接口是`AlertRealTimeMsg`,目前实现有`钉钉` 如果想拓展可以实现比如微信、邮件、短信等等。 `DingDingRealTimeAlertProcess` : 钉钉的实现。 #### 3. 存储模块 ##### 配置存储 `ConfigStoreManager` : 配置的定义 - `DefaultLocalConfigManager` : 本地文件配置 - `MysqlConfigStoreManager` : **Mysql**的配置 ##### **数据拆分** `DataIdFactory` : 按照纬度进行拆分表的尾缀值. - `DayIdGenerate` : 天纬度 - `HourIdGenerate` : 小时纬度 在表的创建和获取的时候通过工厂获取规则得到一个尾缀值,将数据找到对应的表,并且流入对应的表。