用户访问日志设置
场景描述
1、提供基于服务网关记录用户的登录、注销、页面访问、服务API访问等数据,数据包括用户访问时的IP地址、用户名、访问时间、访问接口、客户端类型等,并提供统一的访问日志查询和访问统计功能
2、访问日志数据量达到上千万级别,数据库磁盘消耗高,QPS响应慢,需要通过分库分表来优化
开启记录访问日志后,可以在门户的用户使用情况中进行查询
操作步骤
访问日志说明
- 访问日志数据是access_log插件生成的,access_log插件不会自动安装,需要从新控制台手工加
设置日志插件
- 租户在使用时需要开启日志插件
- 点击服务操作里的网关,打开插件配置页面
- 点击下拉列表,选择所有应用服务
- 选择access_log插件,点击开关按钮开启插件
- 点击设置插件参数,打开参数设置页面进行参数设置
- 日志接收服务地址中,需要修改xxx为租户名
- 其他参数根据实际需求进行设置即可
- 对于特别关心的接口设置,点击新增配置内容
如图为登录接口,API访问路径以^符号开始,$符号结束
一个简单的案例
只记录所有对cs1应用dingdanzb数据表的请求,请求url为/cs1/main/dbrest/dingdanzb,记录每个请求的请求体和返回体
- 选中“是否记录请求体”、“是否记录返回体”
- 设置“最大请求体大小”、“最大返回体大小”
- 在“需要包含请求查询的地址”中,添加请求url
- 第一个“日志接收概率”设置为0,表示只记录用户关心接口的请求
请求的记录结果如下图所示
日志数据存储
访问日志存储在门户应用的日志数据库的opm_user_access_log表中
设置分库分表
- 在应用服务管理中,选择门户,点击配置
- 打开日志数据库连接参数
- 在分库分表配置属性中设置参数,参数内容说明如下
#数据库连接参数,数据库名称(可以与数据库中的库名不一致)
dataSources:
ds_0: !!com.zaxxer.hikari.HikariDataSource
driverClassName: com.mysql.jdbc.Driver
jdbcUrl: jdbc:mysql://192.168.10.22:3306/20211215092308b6haeogn?useServerPrepStmts=true&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false
username: b6haeogn_131
password: SbFb_4616096
#分表策略
shardingRule:
tables:
opm_user_access_log: 逻辑表名
actualDataNodes: ds_0.opm_user_access_log_login, ds_0.opm_user_access_log_20220${1..9}, ds_0.opm_user_access_log_2022${10..12} #需要手工创建,数据库物理表名
tableStrategy:
justep:
shardingType: 3 #1:根据flogtype字段值分表 2:根据faccesstime字段值分表 3:前面两种支持,优先级1>2
shardingColumnString: flogtype
shardingColumnDatetime: faccesstime
shardingFieldValueTableNameMap: login:opm_user_access_log_login #flogtype字段值存到哪个表里: 值:表名
shardingDatetimeSuffixPattern: MM #月份
datetimeValuePattern: yyyy-MM-dd HH:mm:ss #faccesstime值格式
datetimeLower: 2021-01-01 00:00:00 #faccesstime起始时间
datetimeUpper: 2023-01-01 00:00:00 #faccesstime终止时间
datetimeIntervalUnit: Months #单位
datetimeIntervalAmount: 1 #计算步长
defaultTableStrategy:
none:
- 根据上面设置,效果如下,在opm_user_access_log_login 表里记录的是登录接口访问日志,其他的记录按月记录在这些表中:opm_user_access_log_20220${1..9}, ds_0.opm_user_access_log_2022${10..12}