跳到主要内容
NextProxyNextProxy文档

用量统计

能查到哪些维度、时间口径怎么算、数据保留多久,以及怎么自己导出留档。

用量数据决定你能不能发现异常消耗。这一篇说清楚每个接口给什么、时间边界在哪、数据能留多久。

汇总

GET/api/v1/proxy/usage/summary

给出的是账户级的全局视图:

  • 当前流量池余额和累计购买量
  • 本月上月的计费字节
shell
curl 'https://api.example.com/api/v1/proxy/usage/summary' \
  -H 'Authorization: Bearer at_YOUR_ACCESS_TOKEN'

这是监控脚本最该轮询的接口——余额低于阈值就告警。

逐日统计

GET/api/v1/proxy/usage/daily

范围 1–90 天

shell
curl 'https://api.example.com/api/v1/proxy/usage/daily?days=30' \
  -H 'Authorization: Bearer at_YOUR_ACCESS_TOKEN'

用量曲线

GET/api/v1/proxy/usage/series

可查的时间粒度:

粒度范围
小时今日 24 个小时
最近 7 天 / 30 天(按北京自然日)

还支持按目标域名筛选,这在定位"是哪个站把流量吃掉了"时很有用。

访问过的域名

GET/api/v1/proxy/usage/domains

返回最近访问过的域名,最多 500 个

shell
curl 'https://api.example.com/api/v1/proxy/usage/domains' \
  -H 'Authorization: Bearer at_YOUR_ACCESS_TOKEN'

数据保留

数据保留时长
日汇总长期
小时级明细60 天
域名小时级明细60 天

客户接口的维度限制

::note{title="没有"按子账号查询"参数"} 接口目前提供的是用户级汇总,没有"指定任意子账号 ID 查询"的参数。

按子账号分开看用量,当前要靠控制台的展示,或者在业务侧自己按子账号记账。 ::

这一点在做团队分账时要提前考虑。可行的替代做法:

一个子账号对应一个业务单元,然后用 remark 字段标记归属,在业务侧自己统计。见 代理子账号

统计口径

原始流量 = 上传 + 下载的双向 payload 字节。

计费流量 = 原始流量 × 产品倍率,累计后向下取整。

两个数在倍率为 1:1 时相同。完整口径(什么算、什么不算)见 流量计费口径

自己导出留档

python
import csv
import json
from datetime import date, timedelta


def export_daily_usage(client, days: int = 90, path: str = "usage.csv") -> None:
    """导出逐日用量。

    小时级明细只保留 60 天,日汇总是长期的,
    但仍建议定期导出——接口一次最多给 90 天。
    """
    payload = client.get("/api/v1/proxy/usage/daily", days=days)

    with open(path, "w", newline="", encoding="utf-8") as handle:
        writer = csv.DictWriter(
            handle,
            fieldnames=["date", "uploadBytes", "downloadBytes", "bytesBilled"],
        )
        writer.writeheader()
        writer.writerows(payload["items"])


def export_hourly_snapshot(client, path: str = "hourly.jsonl") -> None:
    """导出小时级明细。这类数据 60 天后消失,需要定期跑。"""
    payload = client.get("/api/v1/proxy/usage/series", granularity="hour")

    with open(path, "a", encoding="utf-8") as handle:
        for point in payload["items"]:
            handle.write(json.dumps(point, ensure_ascii=False) + "\n")


def export_domains(client, path: str = "domains.csv") -> None:
    """域名明细最多 500 个,且是"最近访问"的滚动窗口。"""
    payload = client.get("/api/v1/proxy/usage/domains")

    with open(path, "w", newline="", encoding="utf-8") as handle:
        writer = csv.DictWriter(handle, fieldnames=["domain", "bytesBilled"])
        writer.writeheader()
        writer.writerows(payload["items"])

交易记录

流量购买、充值、退款走的是交易接口,跟用量统计是两条线:

GET/api/v1/transactions
GET/api/v1/transactions/metrics

metrics 给的是充值 / 消费 / 退款的指标汇总。

钱包余额和最近账本:

GET/api/v1/wallet

一个日常巡检脚本

python
def daily_check(client, *, warn_gb: float = 20.0, spike_ratio: float = 2.0) -> None:
    """每天跑一次:余额告警 + 消耗突增检测。"""
    summary = client.get("/api/v1/proxy/usage/summary")
    remaining_gb = summary["trafficRemainBytes"] / 1024 ** 3

    if remaining_gb < warn_gb:
        alert(f"流量余额 {remaining_gb:.1f} GB,低于 {warn_gb} GB")

    daily = client.get("/api/v1/proxy/usage/daily", days=8)["items"]
    if len(daily) < 8:
        return

    # 拿最近一天和前七天均值比,突增说明有异常任务
    recent = daily[-1]["bytesBilled"]
    baseline = sum(item["bytesBilled"] for item in daily[-8:-1]) / 7

    if baseline > 0 and recent > baseline * spike_ratio:
        domains = client.get("/api/v1/proxy/usage/domains")["items"][:5]
        top = ", ".join(f"{d['domain']}" for d in domains)
        alert(
            f"用量突增:{recent / 1024 ** 3:.1f} GB vs 均值 "
            f"{baseline / 1024 ** 3:.1f} GB。消耗最高的域名:{top}"
        )

平台侧的预警

平台自带的流量余量预警每天最多发一次(低于阈值期间,按北京自然日),支持 Email / Webhook / Bark / Telegram 四种渠道。

配置方式和能力边界见 通知与 Webhook。如果需要更及时或更多维度的告警,自己轮询是当前唯一的办法。

这篇解决你的问题了吗?