写在前面
学习这个实战项目也已经过去很久了,本来一直也想以文字的方式将项目中的 点 进行记录下来。有什么问题,欢迎大家一起留言讨论。
关于这个系列的 所有文章,有新的想法,我也会及时做更新
项目效果
主要是想监控生产上的实时日志,日志可以是Linux的系统日志,MySQL数据库的日志,也可以是我们生产项目的业务日志,比如:SpringBoot 项目中打的日志。这些日志都可以作为本项目的原始日志。
对一些即将发生的问题 发出预警
-->
这样就可以对一些即将出现的问题可以提前预知,这样我们就可以在问题实际发生前进行解决
-->
预警目标:将问题 扼杀在发生前
为啥要做预警?可能公司有服务的SLA保障!
SLA: 99.99%
sla:允许服务宕机时间
9越多代表全年服务可用时间越长服务更可靠,停机时间越短
全年拿365天做计算吧,看看几个9要停机多久时间做能才能达到!
1年 = 365天 = 8760小时
99.9 = 8760 * 0.1% = 8760 * 0.001 = 8.76小时
99.99 = 8760 * 0.0001 = 0.876小时 = 0.876 * 60 = 52.6分钟
99.999 = 8760 * 0.00001 = 0.0876小时 = 0.0876 * 60 = 5.26分钟
架构选择
zabbix
elk 都是可以的
服务器产生的日志 我们需要修改为json格式的日志,默认是string。因为json格式的日志自带schema,方便spark处理。比如SpringBoot项目中的日志就可以通过修改配置文件达到这个目的。
产生的日志该是位于服务器的某一个文件夹位置。
场景一:日志名称始终不变,可以使用tail -F /logs/serverA.log
当前的一份--> 保留10份
200M产生一个
场景二:日志名称是变化的,tail -F 文件夹 spoolDir
本来,flume exec source 是可以监控某一个文件或文件夹下 的日志的,但是,当我们的 节点+服务 比较多的时候,我们就无法知道改日志是来自于哪一个机器的哪一个服务,所以,我们需要基于Flume源代码做二次开发,改造后能够使得我们的flume将 机器名+服务名 一起打进source ,最后sink 到 kafka中去,
ps:本来这里我还想说,sink的时候能够按照某一规则sink 到kafka指定分区中。后面再做吧
4.原始日志+机器名+服务名这样的 json 格式的数据已经从 flume 到Kafka 中去。我们需要使用Spark Straeming +Spark SQL 对流日志进行处理,处理后的结果可以存储到InfluxDB时序数据库),最后通过Grafana 进行可视化
项目概要
基于上面的几点说明,写一下本项目的大致流程:
基于CDH5 搭建好 各个环境
版本:
hadoop-2.6.0-cdh5.7.0
apache-flume-1.9.0-bin
kafka_2.11-1.1.0
scala-2.11.8
spark-2.4.3-bin-2.6.0-cdh5.7.0
grafana-4.1.1
InfluxDB-1.7.0
基于flume 源码 做二次开发,参考exec sorce –> exec+机器名+服务名 的source
上一步做好之后,就能将数据采集到kafka中去,并使用kafka-console-consumer.sh 将采集的数据打印到控制台,大致这样:
{"hostname":"host36","servicename":"serverA","time":"2019-07-11 02:10:23,756","logtype":"INFO","loginfo":"org.apache.hadoop.hdfs.server.blockmanagement.CacheReplicationMonitor:Rescanning after 3000 milliseconds"}
接着,就是开发spark 对接kafka ,进行各种编码,这个过程中,处理结果会实时写到InfluxDB中,然后我们使用Grafana进行展示。Grafana配置告警即可。类似:
项目收获
大致写一下,本项目能够得到主要技能
Flume: 1.源码二次开发 2. 自定义Interceptor 3.概念 安装 配置文件 与 命令使用
Kafka: 1.多分区全局有序的实现 2.at lease once + offset 自定义管理 3. 概念 安装(分布式) 与 命令使用
Spark 广播变量如何结合业务需要?+ 窗口函数的使用?
Spark Streaming + Kafka 自定义Offset 管理到 MySQL
InfluxDB + Grafana 配合做监控
Spark On Yarn
基于上面的流程,我们由易到难,
现在开始!!!
更多文章:企业级生产监控预警平台:https://blog.csdn.net/liuge36/category_9600405.html