1. 分析

1.1 请求头

LoggingFilter

Query
Host
X-Real-IP 客户端请求真实IP
X-Forwarded-For
Connection
req-id: [自定义] 渠道流水
encode-key:
plat-id: [自定义] 渠道
sha256-sign
Accept
timestamp [自定义] 渠道时间
jsession-id [自定义]
limit [自定义]
page-num [自定义]
channel [自定义]
User-Agent:
route-name: [自定义] 渠道页面
Origin
X-Requested-With
Sec-Fetch-Site
Sec-Fetch-Mode
Sec-Fetch-Dest
Referer
Accept-Encoding
Accept-Language
encry-salt [自定义]
encry-passwd [自定义]
log-token [自定义] 跟踪码
login-user-num [自定义]
sub-branch-num [自定义]
login-org-code [自定义]
branch-num [自定义]
login-cn-name [自定义]
remote-port [自定义]
login-org-id [自定义]
remote-ip
login-user-id

image.png

1. 引言

1.1 版本修订记录
版本 修订人 修订说明 日期
V1.0 syd 日志监控、分析方案设计 2021.1.20

1.2 目的
  1. 随着用户的增长以及数据量的激增,在代发高峰期时间日,生产系统经常出现服务不可用、繁忙,以及系统宕机情况。针对当前场景,设计出
  2. 实时采集、分析生产日志,对生产应用环境进行实时监控,以达到系统压力预警通知、和未来业务的预判分析。

1.3 业务背景

1.4 定义

2.方案设计

2.1 设计思想
  1. 分析每间隔指定周期的日志,获取不同级别、类型的错误日志、分析对应请求接口、用户、ip、请求的时间、耗时等信息。
  • 用户分析
    • ip:客户端用户ip(统计记录频率,是否为恶意攻击等)
    • 用户唯一标识:通过用户的唯一标识、获取用户名、登录时间、
    • 请求时间:用户访问请求任何一个接口的时间
    • 接口名称:请求接口对应的接口名
    • 方式:GET、POST……
    • 接口耗时:从请求接口,到接口的响应返回,耗时
    • 是否正常返回:请求正常返回、或异常响应(异常信息,需要记录)
  • 应用
    • 应用名
    • 应用内存使用情况
    • 单位时间内在线用户量
    • 接口频率访问较高的接口
    • 响应异常、错误信息
    • 错误信息分类:如应用系统级别(内存溢出、假死等),业务信息错误(不影响应用服务正常工作)

2.2 日志格式规则
  1. [时间][日志输出级别][ip][userid][调用接口][应用程序id][应用程序名称][接口返回状态][调用接口返回信息][调用接口耗时]
  2. [时间][应用程序id][应用程序名称][应用程序cpu使用情况][应用程序内存使用情况]
  3. 规则表: 规则id,规则名称,规则描述,规则关键字,规则是否可用,规则所属应用,规则创建时间,规则修改时间,最后修改人
  4. 告警信息表: 告警信息id,告警级别,告警信息明细,告警信息创建时间,是否发送邮件,是否发送短信,告警信息所属应用,告警信息所属规则
  5. user表: userIdname,手机号,邮箱,用户是否有效,用户信息修改时间
  6. 应用表: 应用程序ID,应用程序名称,应用程序类型,应用描述,是否已上线

2.3 系统架构

2.4 处理流程
  1. flume: 配置flume对日志目录进行实时监控,source为日志目录中更新的日志信息,sinkkafka集群的topic
  2. kafka: 日志信息存储到topic中,可以通过副本机制保证消息不丢失。
  3. flink: 通过flink消费kafkatopic的数据,对stream中的数据进行处理、过滤为我们需要的数据data
  4. data和规则表中进行匹配,匹配成功之后可以得到应用id等信息,根据应用id关联user表可以得到应用程序的负责人,
  5. 关联告警信息表中可以得到告警级别,根据告警级别判断是否需要发送短信、邮件、发送频率给应用负责人
  6. redis: 保存应用id,负责人id等信息,设置过期时间,控制发送信息、邮件的频率