From 993a8dd1771096ad12a5074f212bda579872114a Mon Sep 17 00:00:00 2001 From: yuhan6665 <1588741+yuhan6665@users.noreply.github.com> Date: Fri, 15 Jul 2022 23:15:53 -0400 Subject: [PATCH] Add traffic stats tutorial (#284) * Add traffic stats tutorial Co-authored-by: ben-august <36500518+ben-august@users.noreply.github.com> * fix prettier Co-authored-by: ben-august <36500518+ben-august@users.noreply.github.com> --- docs/.vuepress/config/sidebar.ts | 1 + docs/document/level-2/README.md | 6 +- docs/document/level-2/traffic_stats.md | 118 ++++++++++++++++++++++ docs/en/document/level-2/README.md | 6 +- docs/en/document/level-2/traffic_stats.md | 118 ++++++++++++++++++++++ 5 files changed, 247 insertions(+), 2 deletions(-) create mode 100644 docs/document/level-2/traffic_stats.md create mode 100644 docs/en/document/level-2/traffic_stats.md diff --git a/docs/.vuepress/config/sidebar.ts b/docs/.vuepress/config/sidebar.ts index 60965de..f91763e 100644 --- a/docs/.vuepress/config/sidebar.ts +++ b/docs/.vuepress/config/sidebar.ts @@ -152,6 +152,7 @@ export function getDocumentLv2Sidebar( path + "tproxy.md", path + "iptables_gid.md", path + "redirect.md", + path + "traffic_stats.md", ], }, ]; diff --git a/docs/document/level-2/README.md b/docs/document/level-2/README.md index aebc9e2..7415a9a 100644 --- a/docs/document/level-2/README.md +++ b/docs/document/level-2/README.md @@ -14,6 +14,10 @@ 在 iptables/nftables 实现的透明代理中,一种新的规避 Xray 流量的方式。 -[通过 Xray 将特定的流量指向特定出口,实现全局路由“分流”](./redirect.md) by a [@Zzz3m](https://github.com/Zzz3m) +[通过 Xray 将特定的流量指向特定出口,实现全局路由“分流”](./redirect.md) by a [@Zzz3m](https://github.com/Zzz3m) 将 Xray 玩出花:基于 fwmark 或 sendThrough 方式实现“分流”。 + +[Xray 流量统计](./traffic_stats.md) by a [@yuhan6665](https://github.com/yuhan6665) + +适配 Xray 的流量统计和脚本。 diff --git a/docs/document/level-2/traffic_stats.md b/docs/document/level-2/traffic_stats.md new file mode 100644 index 0000000..5f195b9 --- /dev/null +++ b/docs/document/level-2/traffic_stats.md @@ -0,0 +1,118 @@ +--- +title: 流量统计 +--- + +# 流量统计配置教程 + +请熟悉[流量统计 白话文教程](https://guide.v2fly.org/advanced/traffic.html),本文在其基础上适配了 Xray(1.5.9+)。 + +## 查看流量信息 + +配置方法与 v2fly 一致。 +查看流量信息是 xray 命令行的其中一个功能。配置内设置的 api dokodemo-door 端口,即为 `--server` 参数的端口。 + +```bash +xray api statsquery --server=127.0.0.1:10085 #查看所有流量 +xray help api statsquery #statsquery 查询匹配的记录 +xray help api stats #stats 查询一个记录 +``` + +输出例子: + +```json +{ + "stat": [ + { + "name": "inbound>>>vmess-quic>>>traffic>>>downlink", + "value": "1176" + }, + { + "name": "user>>>love@example.com>>>traffic>>>downlink", + "value": "2040" + }, + { + "name": "inbound>>>api>>>traffic>>>uplink", + "value": "14247" + }, + { + "name": "user>>>love@example.com>>>traffic>>>uplink", + "value": "2520" + }, + { + "name": "inbound>>>api>>>traffic>>>downlink", + "value": "87618" + }, + { + "name": "outbound>>>direct>>>traffic>>>downlink", + "value": "0" + }, + { + "name": "inbound>>>vmess-quic>>>traffic>>>uplink", + "value": "1691" + }, + { + "name": "outbound>>>direct>>>traffic>>>uplink", + "value": "0" + } + ] +} +``` + +## 流量信息的处理 + +把以下脚本保存到 `traffic.sh`,注意使用 `chmod 755 traffic.sh` 授予执行权限。注意调整修改 `_APISERVER` 一行的连接具体的端口参数。 + +```bash +#!/bin/bash + +_APISERVER=127.0.0.1:10085 +_XRAY=/usr/local/bin/xray + +apidata () { + local ARGS= + if [[ $1 == "reset" ]]; then + ARGS="reset: true" + fi + $_XRAY api statsquery --server=$_APISERVER "${ARGS}" \ + | awk '{ + if (match($1, /"name":/)) { + f=1; gsub(/^"|link"|,$/, "", $2); + split($2, p, ">>>"); + printf "%s:%s->%s\t", p[1],p[2],p[4]; + } + else if (match($1, /"value":/) && f){ + f = 0; + gsub(/"/, "", $2); + printf "%.0f\n", $2; + } + else if (match($0, /}/) && f) { f = 0; print 0; } + }' +} + +print_sum() { + local DATA="$1" + local PREFIX="$2" + local SORTED=$(echo "$DATA" | grep "^${PREFIX}" | sort -r) + local SUM=$(echo "$SORTED" | awk ' + /->up/{us+=$2} + /->down/{ds+=$2} + END{ + printf "SUM->up:\t%.0f\nSUM->down:\t%.0f\nSUM->TOTAL:\t%.0f\n", us, ds, us+ds; + }') + echo -e "${SORTED}\n${SUM}" \ + | numfmt --field=2 --suffix=B --to=iec \ + | column -t +} + +DATA=$(apidata $1) +echo "------------Inbound----------" +print_sum "$DATA" "inbound" +echo "-----------------------------" +echo "------------Outbound----------" +print_sum "$DATA" "outbound" +echo "-----------------------------" +echo +echo "-------------User------------" +print_sum "$DATA" "user" +echo "-----------------------------" +``` diff --git a/docs/en/document/level-2/README.md b/docs/en/document/level-2/README.md index aebc9e2..7415a9a 100644 --- a/docs/en/document/level-2/README.md +++ b/docs/en/document/level-2/README.md @@ -14,6 +14,10 @@ 在 iptables/nftables 实现的透明代理中,一种新的规避 Xray 流量的方式。 -[通过 Xray 将特定的流量指向特定出口,实现全局路由“分流”](./redirect.md) by a [@Zzz3m](https://github.com/Zzz3m) +[通过 Xray 将特定的流量指向特定出口,实现全局路由“分流”](./redirect.md) by a [@Zzz3m](https://github.com/Zzz3m) 将 Xray 玩出花:基于 fwmark 或 sendThrough 方式实现“分流”。 + +[Xray 流量统计](./traffic_stats.md) by a [@yuhan6665](https://github.com/yuhan6665) + +适配 Xray 的流量统计和脚本。 diff --git a/docs/en/document/level-2/traffic_stats.md b/docs/en/document/level-2/traffic_stats.md new file mode 100644 index 0000000..5f195b9 --- /dev/null +++ b/docs/en/document/level-2/traffic_stats.md @@ -0,0 +1,118 @@ +--- +title: 流量统计 +--- + +# 流量统计配置教程 + +请熟悉[流量统计 白话文教程](https://guide.v2fly.org/advanced/traffic.html),本文在其基础上适配了 Xray(1.5.9+)。 + +## 查看流量信息 + +配置方法与 v2fly 一致。 +查看流量信息是 xray 命令行的其中一个功能。配置内设置的 api dokodemo-door 端口,即为 `--server` 参数的端口。 + +```bash +xray api statsquery --server=127.0.0.1:10085 #查看所有流量 +xray help api statsquery #statsquery 查询匹配的记录 +xray help api stats #stats 查询一个记录 +``` + +输出例子: + +```json +{ + "stat": [ + { + "name": "inbound>>>vmess-quic>>>traffic>>>downlink", + "value": "1176" + }, + { + "name": "user>>>love@example.com>>>traffic>>>downlink", + "value": "2040" + }, + { + "name": "inbound>>>api>>>traffic>>>uplink", + "value": "14247" + }, + { + "name": "user>>>love@example.com>>>traffic>>>uplink", + "value": "2520" + }, + { + "name": "inbound>>>api>>>traffic>>>downlink", + "value": "87618" + }, + { + "name": "outbound>>>direct>>>traffic>>>downlink", + "value": "0" + }, + { + "name": "inbound>>>vmess-quic>>>traffic>>>uplink", + "value": "1691" + }, + { + "name": "outbound>>>direct>>>traffic>>>uplink", + "value": "0" + } + ] +} +``` + +## 流量信息的处理 + +把以下脚本保存到 `traffic.sh`,注意使用 `chmod 755 traffic.sh` 授予执行权限。注意调整修改 `_APISERVER` 一行的连接具体的端口参数。 + +```bash +#!/bin/bash + +_APISERVER=127.0.0.1:10085 +_XRAY=/usr/local/bin/xray + +apidata () { + local ARGS= + if [[ $1 == "reset" ]]; then + ARGS="reset: true" + fi + $_XRAY api statsquery --server=$_APISERVER "${ARGS}" \ + | awk '{ + if (match($1, /"name":/)) { + f=1; gsub(/^"|link"|,$/, "", $2); + split($2, p, ">>>"); + printf "%s:%s->%s\t", p[1],p[2],p[4]; + } + else if (match($1, /"value":/) && f){ + f = 0; + gsub(/"/, "", $2); + printf "%.0f\n", $2; + } + else if (match($0, /}/) && f) { f = 0; print 0; } + }' +} + +print_sum() { + local DATA="$1" + local PREFIX="$2" + local SORTED=$(echo "$DATA" | grep "^${PREFIX}" | sort -r) + local SUM=$(echo "$SORTED" | awk ' + /->up/{us+=$2} + /->down/{ds+=$2} + END{ + printf "SUM->up:\t%.0f\nSUM->down:\t%.0f\nSUM->TOTAL:\t%.0f\n", us, ds, us+ds; + }') + echo -e "${SORTED}\n${SUM}" \ + | numfmt --field=2 --suffix=B --to=iec \ + | column -t +} + +DATA=$(apidata $1) +echo "------------Inbound----------" +print_sum "$DATA" "inbound" +echo "-----------------------------" +echo "------------Outbound----------" +print_sum "$DATA" "outbound" +echo "-----------------------------" +echo +echo "-------------User------------" +print_sum "$DATA" "user" +echo "-----------------------------" +```