AWS Lightsail 的 VPS,如果流量超额了将会收取更多的费用,需要做一个流量使用情况监控。
想到 Clash 订阅可以显示流量信息,参考 subscription-userinfo,可以实现在订阅链接展示流量使用情况。
使用的方案是 crontab 定期运行脚本,通过 AWS API 获取流量信息,更新数据到 Cloudflare Workers KV 变量,在客户端更新订阅时可以获取到流量信息。
在之前的文章 AWS Lightsail 修改 IP 并更新 DNS 记录 已创建好 AWS 和 Cloudflare 的用户 API 令牌,可以继续使用,但需要修改部分权限。
AWS IAM 用户需要添加 GetInstanceMetricData
权限,以下是示例的 json 数据:
1 | { |
Cloudflare 用户 API 令牌中,需要添加 账户 -> Workers KV 存储 -> 编辑
权限:
在 Cloudflare 账户主页中,找到 Workers 和 Pages -> KV
,创建命名空间。
流量更新脚本
1 | from boto3 import client |
将密钥信息明文存储在脚本内是非常危险的行为!
执行脚本后,可以获取到本月 Lightsail 流量的使用情况,这里获取的统计信息会比账单里更新的要快。流量数据会被更新到 Cloudflare Workers KV 命名空间里的 NetworkOut
和 NetworkIn
,
因为是个人用,并不需要太频繁的更新,且考虑到 API 和 KV 读写的限额,在 Lightsail VPS 里配置 crontab 任务,每 4 小时执行一次更新。
流量数据更新到 Cloudflare Workers KV 后,需要在 Cloudflare Workers 的订阅里调用这部分数据。
将使用 Workers 制作订阅链接并追踪访客 IP 里的脚本修改如下。
订阅链接脚本
1 | // 默认节点信息 |
脚本里不再存储 tg bot 密钥等信息,改用 Workers 的变量功能提供:
将之前创建的 KV 命名空间绑定到 Workers 后,可以通过 env.kv.get("keyname")
使用:
变量配置完成后,更新订阅就可以获取到已用流量信息了。