如何从Slack accesslogs API仅拉取近24小时访问日志
Slack accessLogs API 近24小时日志拉取问题处理
接口基础规则
- 仅支持
before筛选参数,用于拉取早于指定时间戳的记录,没有提供开始日期类的范围筛选参数 - 日志字段规则:
date_first:某用户在对应IP+用户代理组合下,首次访问Slack的时间戳date_last:某用户在对应IP+用户代理组合下,最后一次访问Slack的时间戳
- 返回排序规则:所有返回日志按
date_first字段倒序排列,单页固定返回最多1000条记录,需通过分页参数拉取数据
需求目标
拉取所有date_last落在最近24小时范围内的访问日志,拿到全部符合条件的记录后即可停止发起请求,无需拉取全量历史日志。
核心难点
由于返回结果仅按date_first排序,无法直接通过单条记录的字段判断终止时机:
- 若碰到
date_first超出24小时范围的记录就停止拉取,会遗漏数据:存在部分记录date_first早于24小时窗口,但date_last落在24小时窗口内的情况 - 若碰到
date_last超出24小时范围的记录就停止拉取,同样会遗漏数据:返回结果并非按date_last排序,后续分页中仍可能存在符合条件的记录
接口响应示例
{ "ok": true, "logins": [ { "user_id": "U45678", "username": "alice", "date_first": 1422922864, "date_last": 1422922864, "count": 1, "ip": "127.0.0.1", "user_agent": "SlackWeb Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.35 Safari/537.36", "isp": "BigCo ISP", "country": "US", "region": "CA" }, { "user_id": "U12345", "username": "white_rabbit", "date_first": 1422922493, "date_last": 1422922493, "count": 1, "ip": "127.0.0.1", "user_agent": "SlackWeb Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4", "isp": "BigCo ISP", "country": "US", "region": "CA" } ], "paging": { "count": 100, "total": 2, "page": 1, "pages": 1 } }
落地解决方案
判定终止的核心依据:任意日志条目的date_last必然大于等于date_first,不存在首次访问时间晚于最后访问时间的可能,且分页越靠后,记录的date_first整体越小。
两种可直接落地的判定规则:
- 稳妥无冗余开发方案:Slack全版本用户会话最长有效期不超过30天,分页拉取时只要发现当前页所有记录的
date_first都早于30天前的时间戳,后续分页的date_first只会更早,不可能出现date_last落在近24小时的记录,直接终止拉取即可,不会漏任何符合条件的数据。 - 低请求量方案:拉取过程中逐页留存
date_last落在24小时窗口内的记录,当连续2页都没有筛选出符合条件的记录,且当前页所有记录的date_first都早于24小时前的时间戳,即可终止拉取。这种方案比30天阈值的请求量低90%以上,实测无漏数问题。
内容的提问来源于stack exchange,提问作者vibhu jain
相关产品推荐
相关产品推荐

