运用Storm实现实时业务监控

需求描述

有多个线上系统,需要收集各个系统吐的日志,并实时统计、分析数据,及时预警。

实现难点

  • 实时日志推送,对各系统性能可能产生影响
  • 如何让接入系统以最低开发成本接入
  • 怎么做到实时监控、预警

技术选型

类别 框架/软件 描述
日志推送 Log4j 最流行的日志框架,可通过配置远程推送日志到实时监控平台
日志收集 Kafka 高吞吐量消息中间件,海量日志数据缓冲存储
实时计算 Storm 实时计算环境
集群协调 Zookeeper 集群协调服务,Kafka和Storm需要使用
内存数据库 Redis 用于实时计数统计和数据存储
数据库 Oracle 持久化统计数据
数据可视化 Echarts 丰富的可视化控件
开发框架 SpringBoot 快速开发框架

技术架构

技术架构图

架构说明

  • 接入渠道(系统A、系统B…)通过现有的日志框架Log4j,将日志实时推送至Kafka消息中间件;
  • Strom实时消费Kafka消息,通过编写TOP计算任务,采用Redis计数器实时计算各种统计任务;
  • 将Storm实时计算结果同步给内存数据库Redis;
  • 可视化组件Echarts实时读取Redis中的计算结果,输出实时数据报表;

落地效果图

实时统计

附:系统接入说明

  • 接入配置:log4j.properties
1
2
3
4
5
6
7
8
9
10
11
log4j.logger.login-topic= INFO,login-kafka
# appender kafka
log4j.appender.login-kafka=kafka.producer.KafkaLog4jAppender
# kafka topic
log4j.appender.login-kafka.topic=login-topic
# kafka节点地址
log4j.appender.login-kafka.brokerList=134.64.53.113:9092,134.64.53.143:9092
log4j.appender.login-kafka.compressionType=none
log4j.appender.login-kafka.syncSend=true
log4j.appender.login-kafka.layout=org.apache.log4j.PatternLayout
log4j.appender.login-kafka.layout.ConversionPattern=%m%n
  • 接入配置:引入相关jar包
1
log4j-1.2.15.jar、commons-logging-1.1.3.jar、kafka_2.11-0.8.2.2.jar、kafka-clients-0.8.2.2.jar、scala-library-2.11.5.jar、slf4j-api-1.7.25.jar、slf4j-log4j12-1.7.25.jar
  • 日志推送
1
FileLogger.getLogger("login-topic").info("10|LOGIN|18956032431|551|4|SUCCESS|2000|登录成功|20170719171401|134.65.33.67|WapServ_A|0|1|2|3");
坚持原创技术分享,您的支持将鼓励我继续创作!
分享