机场订阅日志自助分析
直接按北京时间选择时间段即可,系统会自动换算到对应机场服务器的本地时间去查询,不用自己心算时差。

分析逻辑说明

1. 选好时间段点"生成分析包",请求存到这台机器上。
2. 对应机场VPS每分钟检查一次,发现新请求后,在自己本机按天粗筛订阅相关的日志行、压缩后传回这台机器 (机场VPS上不做任何统计分析,只做"抓数据"这一步)。
3. 这台机器收到压缩包后,按你选的小时范围精筛,再跑统计分析,生成"分析结果.txt"和"原始切片.txt"两个文件, 打包放进 reports/ 供下载。

脚本文件:/root/report-api/analyze_core.py(这台机器本地,宝塔文件管理器或SSH直接改)。 改完直接保存即可生效——每次生成分析包都会重新执行这个文件,不是常驻加载,不用重启任何服务。

XINGYUN_KNOWN_NODE_IPS / WEIDU_KNOWN_NODE_IPS

已知的自家节点/nyanpass转发出口IP清单。这些IP出现在订阅日志里不算异常(是终端用户挂着自己的节点/转发线路时顺带刷新订阅), 已经从"关联度"统计里排除。发现新增节点没被排除、或者清单里有的节点已经下线,直接改这两个 Python 集合,加一行或删一行IP即可。

XINGYUN_KNOWN_NODE_IPS = {
    "103.197.71.19", "103.197.71.22", ...
}

INFRA_IP_THRESHOLD_PCT

单个IP占当次总请求量的百分比超过这个数,就自动当成"基础设施/健康检查/订阅聚合器",不算终端用户,从关联度统计里剔除。 默认 5.0(即 5%)。发现漏判或误判,改这一个数字就行。

INFRA_IP_THRESHOLD_PCT = 5.0

TOP_CROSS_N / TOP_VOLUME_N

两张"关联度"表和最后"原始请求量"表各显示前多少名,默认分别是50和20。想看更多/更少改这两个数字就行。

TOP_CROSS_N = 50
TOP_VOLUME_N = 20

报告里"关联IP数"/"关联Token数"是什么意思

一份订阅本该只有一个人在用,也就只该从少数几个真实IP拉取。如果某个Token被很多不同的真实IP拉取过, 就是异常拉取信号;反过来,如果某个IP拉取过很多不同的Token,也是同样的可疑信号。 报告里的表格就是按这个关联度排序的,次数不高也会被排进来——这正是它比单纯按拉取次数排序更有用的地方。 这些数字只是筛选信号,不是定论,公司/校园共享出口IP等场景可能造成正常的"一个IP关联多个Token",请结合实际情况复核。

报告最后"订阅端点原始请求量 Top20 IP"是什么意思,跟上面两张表有什么区别

上面两张"关联度"表是用来抓"异常拉订阅"的,会先排除已知节点IP和高占比基础设施IP、也只统计能识别出token的请求, 否则会被节点/转发出口的正常流量淹没。这张表是另一个问题:排查"订阅入口被墙/被限速",看的是"谁把这个端点打得最响", 所以故意不排除任何IP、也不要求识别出token(连不带token的扫描/探测请求都算进来,这类请求在上面两张表里完全看不到)。 两张表回答不同问题,不能互相替代:异常拉订阅看关联度表,入口被墙/异常流量看这张原始次数表。