企业级生产监控预警平台(实战简介)

写在前面

学习这个实战项目也已经过去很久了,本来一直也想以文字的方式将项目中的 点 进行记录下来。有什么问题,欢迎大家一起留言讨论。

关于这个系列的 所有文章,有新的想法,我也会及时做更新

项目效果

主要是想监控生产上的实时日志,日志可以是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
		  当前的一份--> 保留10200M产生一个

 场景二:日志名称是变化的,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

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注