使用nginx记录用户登录数

最近产品提了个需求,想看平台的每日用户登录数。
平台用户的验证是用token,用一个user_token表记录。所以第一想到的从这个token表中取出登录用户,统计登录数,然后再存入用于统计用户登录数的表中。之后发现这个方法不可行,因为token没有做有效时间,如果一个用户一直没有重新登录,他的token就一直是这个,所以要用其他方式了。
方式一,在用户请求api中加个中间件,记录这个请求的用户。这个方式的缺点是要修改现有的业务代码,增加了处理步骤,运营需求和业务需求捆绑在一起了。
方式二,api接口是通过nginx来负载的,把请求通过nginx记录到日志中,另外写脚本分析该日志,提取出需要的数据。这个方式的缺点是要额外增加脚本,维护nginx日志。
综合考量下,选择了方式二。
实施步骤就简单了:
1.nginx设置日志格式
2.做个任务计划,每日读取该nginx日志,根据token,统计出对应的
用户存到表中

设置nginx日志格式

推荐写成json格式,方便解析处理。比如这次主要记录用户token,时间,ip,请求方式,api处理时间,客户端。格式如下:

log_format  api  '{"data":"$time_local","ip":"$remote_addr","request":"$request","request_time":"$request_time","Authorization_User":"$http_authorization_user","http_user_agent":"$http_user_agent"}';

这里用到的指令参考nginx指令

切割nginx日志

nginx日志如果一直放在一个文件中,则会越来越大,可以加个脚本,做个任务计划切割下
切割脚本参考

#!/bin/bash 
#日志文件存放目录 
log_path="/opt/wwwlogs/platform/"

#重命名日志文件 
mv ${log_path}api.log ${log_path}app.$(date -d "yesterday" +"%Y%m%d").log

#reload一下nginx
/usr/local/nginx/sbin/nginx  -s reload
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值