zoukankan      html  css  js  c++  java
  • 企业级生产监控预警平台(实战简介)

    写在前面

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

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

    项目效果

    主要是想监控生产上的实时日志,日志可以是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 都是可以的

    本项目选择的架构:
    在这里插入图片描述
    关于上面的架构,做几点简单说明

    1. 服务器产生的日志 我们需要修改为json格式的日志,默认是string。因为json格式的日志自带schema,方便spark处理。比如SpringBoot项目中的日志就可以通过修改配置文件达到这个目的。
    2. 产生的日志该是位于服务器的某一个文件夹位置。
     场景一:日志名称始终不变,可以使用tail -F /logs/serverA.log
    		  当前的一份--> 保留10200M产生一个
    
     场景二:日志名称是变化的,tail -F 文件夹 spoolDir
    
    1. 本来,flume exec source 是可以监控某一个文件或文件夹下 的日志的,但是,当我们的 节点+服务 比较多的时候,我们就无法知道改日志是来自于哪一个机器的哪一个服务,所以,我们需要基于Flume源代码做二次开发,改造后能够使得我们的flume将 机器名+服务名 一起打进source ,最后sink 到 kafka中去,
      ps:本来这里我还想说,sink的时候能够按照某一规则sink 到kafka指定分区中。后面再做吧

    4.原始日志+机器名+服务名这样的 json 格式的数据已经从 flume 到Kafka 中去。我们需要使用Spark Straeming +Spark SQL 对流日志进行处理,处理后的结果可以存储到InfluxDB(时序数据库),最后通过Grafana 进行可视化

    项目概要

    基于上面的几点说明,写一下本项目的大致流程:

    1. 基于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

    2. 基于flume 源码 做二次开发,参考exec sorce --> exec+机器名+服务名 的source

    3. 上一步做好之后,就能将数据采集到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"}
    
    1. 接着,就是开发spark 对接kafka ,进行各种编码,这个过程中,处理结果会实时写到InfluxDB中,然后我们使用Grafana进行展示。Grafana配置告警即可。类似:

    在这里插入图片描述

    项目收获

    大致写一下,本项目能够得到主要技能

    1. Flume: 1.源码二次开发 2. 自定义Interceptor 3.概念 安装 配置文件 与 命令使用
    2. Kafka: 1.多分区全局有序的实现 2.at lease once + offset 自定义管理 3. 概念 安装(分布式) 与 命令使用
    3. Spark 广播变量如何结合业务需要?+ 窗口函数的使用?
    4. Spark Streaming + Kafka 自定义Offset 管理到 MySQL
    5. InfluxDB + Grafana 配合做监控
    6. Spark On Yarn

    基于上面的流程,我们由易到难,

    现在开始!!!

    更多文章:企业级生产监控预警平台:https://blog.csdn.net/liuge36/category_9600405.html

  • 相关阅读:
    winform控件库二次开发yy
    Oracle数据库表死锁和解锁
    集合去重筛选
    linux手动生成core dump
    HandlerSocket简介以及php使用handlersocket
    使用truss、strace或ltrace诊断软件的“疑难杂症”
    Sqlserver 2012 导出表数据为SQL脚本
    MySQL的索引为什么使用B+Tree
    计算机体系
    docker使用
  • 原文地址:https://www.cnblogs.com/liuge36/p/12614693.html
Copyright © 2011-2022 走看看