用户访问日志设置
场景描述
1、提供基于服务网关记录用户的登录、注销、页面访问、服务API访问等数据,数据包括用户访问时的IP地址、用户名、访问时间、访问接口、客户端类型等,并提供统一的访问日志查询和访问统计功能
2、访问日志数据量达到上千万级别,数据库磁盘消耗高,QPS响应慢,需要通过分库分表来优化
操作步骤
访问数据说明
- 访问日志数据是access_log插件生成的,access_log插件不会自动安装,需要从新控制台手工加
设置日志插件
- 租户在使用时需要开启日志插件
- 点击服务操作里的网关,打开插件配置页面
- 点击下拉列表,选择所有应用服务
- 选择access_log插件,点击开关按钮开启插件
- 点击设置插件参数,打开参数设置页面进行参数设置
- 日志接收服务地址中,需要修改xxx为租户名
- 其他参数根据实际需求进行设置即可
- 对于特别关心的接口设置,点击新增配置内容
如图为登录接口,API访问路径以^符号开始,$符号结束
设置分库分表
- 在应用服务管理中,选择门户,点击配置
- 打开日志数据库连接参数
- 在分库分表配置属性中设置参数,参数内容说明如下
#数据库连接参数,数据库名称(可以与数据库中的库名不一致)
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}
补充说明
平台使用的是4.11版本的ShardingSphere
分库分表的分片算法(新版本)参考 https://github.com/apache/shardingsphere/blob/master/docs/document/content/user-manual/common-config/builtin-algorithm/sharding.cn.md
本文档示例代码中,表策略tableStrategy中的justep是在4.11版本上实现了时间范围分片算法INTERVAL,ShardingSphere 4.11版本支持的策略和算法都可以直接使用