最终选择Redis作为存储方案,主要有四个原因:
至于缺点,在最初阶段还没有充分考虑到。
接下来,在代码中添加了CDHRolelog.class类,并将Redis模块集成进来。这样计算结果(此次使用Spark Streaming和Spark SQL,之前的版本仅使用Spark Streaming)就能存储到Redis中。存储到Redis中的数据有两种格式:
第一种格式,键(key)是机器名称、服务名称和日志级别的组合字符串,例如“hadoopnn-01namenodeWARN”。值(value)的数据类型是列表(list),并且存储为JSON格式,例如:
[{"timeStamp": "2017-02-09 17:16:14.249", "hostName": "hadoopnn-01", "serviceName": "namenode", "logType": "WARN", "count": "12"}]
相关代码可以从以下链接下载并导入IDEA中运行:
https://github.com/Hackeruncle/OnlineLogAnalysis/blob/master/onlineloganalysis/src/main/java/com/learn/java/main/OnLineLogAnalysis3.java
第二种格式,键(key)是时间戳,例如“2017-02-09 18:09:02.462”。值(value)包含多个JSON对象,每个对象包含主机名、服务名和日志级别,以及相应的计数,例如:
[{"host_service_logtype": "hadoopnn-01_namenode_INFO", "count": "110"}, {"host_service_logtype": "hadoopnn-01_namenode_DEBUG", "count": "678"}, {"host_service_logtype": "hadoopnn-01_namenode_WARN", "count": "12"}]
相关代码可以从以下链接下载并导入IDEA中运行:
https://github.com/Hackeruncle/OnlineLogAnalysis/blob/master/onlineloganalysis/src/main/java/com/learn/java/main/OnLineLogAnalysis5.java
在可视化方面,我们选择了AdminLTE、Flask和Echarts3框架,计划从Redis实时读取数据,并动态生成图表。
在实际开发过程中,经过大约一周的研究,发现前两种存储格式并不完全符合我们的需求,因此决定停止开发可视化仪表盘。
最终,我们选择了InfluxDB和Grafana作为存储和可视化工具,以及预警系统。
InfluxDB是一种专门针对时间序列数据的数据库,可以在以下文档中找到更多详细信息: https://docs.influxdata.com/influxdb/v1.2/
Grafana则是一个强大的可视化组件,更多信息可以在以下链接中找到: http://grafana.org/ https://github.com/grafana/grafana