我的服务器系列:使用clash-tracing统计windows下clash使用情况

本文记录clash-tracing的部署使用(踩坑经验),以及windows下clash的trace数据采集方法。

一 前言说明

clash-tracing(https://github.com/Dreamacro/clash-tracing )是clash作者推出的clash数据采集展示工具。
核心是一个docker-compose配置,包含组件有:
loki、grafana、vector、traffic_scraper(websocat)、tracing_scraper(websocat)
其工作流程如下:

  1. 两个websocat将clash数据转发到vector
  2. vector将数据进行路由、转换等操作,然后写入loki
  3. loki存储数据并提供搜索功能
  4. grafana提供面板访问,数据源来自loki

由上面的工作流程可以看出,如果要对接多个clash,只需要提供多个websocat即可。

目前本人有3个地方安装了clash:pc、手机、服务器。 其中服务器是多个服务器共同使用一个clash实例。

因为服务器是长时间运行的,可直接用部署的websocat进行数据采集。
而pc则不是一直使用的,不想为此多部署两个websocat容器,所以使用任务计划在系统启动时自动启动websocat程序即可。

二 部署clash-tracing

主要看官方的:https://github.com/Dreamacro/clash-tracing
以下是个人的修改配置,可参考:

  1. 把grafana/grafana-oss:latest换成grafana/grafana-oss:latest-ubuntu
    grafana/grafana-oss:latest使用镜像不支持no_proxy环境变量,会导致大量不需要代理的连接进入clash影响统计。
    比方说tailscale的连接,因为我的grafana是通过tailscale访问的。
    见:https://linshenkx.github.io/clash_docker/#6-no-proxy%E7%9B%B8%E5%85%B3%E8%AF%B4%E6%98%8E

  2. 在docker-compose.yml里面把loki的端口也放出来。
    再把clash-tracing/grafana/provisioning/datasources/clash.yaml以及clash-tracing/vector/vector.toml中的 loki:3100 换成 域名:3100,因网络代理,loki可能无法解析

  3. 在docker-compose.yml里面把user: root换成 user: "0:0"

  4. loki的版本使用2.4.1避免“too many outstanding requests”报错,见:https://github.com/grafana/loki/issues/4613

  5. 两个websocat合并成一个

然后去执行 docker-compose up -d 就行了

注意默认数据是存储在clash-tracing的各个组件目录下,工具loki的默认配置数据只存储168h,但还是要注意空间占用

docker-compose.yml参考如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
version: '3'
services:
loki:
image: grafana/loki:2.4.1
container_name: loki
restart: always
user: "0:0"
volumes:
- ./loki/data:/loki
- ./loki/config.yaml:/etc/loki/local-config.yaml
ports:
- "3100:3100"
grafana:
image: grafana/grafana-oss:latest-ubuntu
container_name: grafana
restart: always
user: "0:0"
volumes:
- ./grafana/data:/var/lib/grafana
- ./grafana/panels:/etc/dashboards
- ./grafana/provisioning/dashboards:/etc/grafana/provisioning/dashboards
- ./grafana/provisioning/datasources:/etc/grafana/provisioning/datasources
ports:
- "3000:3000"
vector:
image: timberio/vector:0.X-alpine
container_name: vector
restart: always
volumes:
- ./vector/vector.toml:/etc/vector/vector.toml
ports:
- "39000:9000"
depends_on:
- loki
scraper:
image: vi0oss/websocat:0.10.0
container_name: scraper
restart: always
entrypoint:
- /bin/sh
- -c
- |
/usr/local/bin/websocat -v --autoreconnect-delay-millis 15000 autoreconnect:ws://$CLASH_HOST/traffic?token=$CLASH_TOKEN autoreconnect:tcp:vector:9000 &
/usr/local/bin/websocat -v --autoreconnect-delay-millis 15000 autoreconnect:ws://$CLASH_HOST/profile/tracing?token=$CLASH_TOKEN autoreconnect:tcp:vector:9000
depends_on:
- vector


三 windows使用websocat采集clash数据

1 编写脚本

https://github.com/vi/websocat 下载对应的webscocat执行程序。
编写 run.vbs 脚本如下

1
2
3
4
5
6
7
8
9
10
11
12
13
Dim  clashServer,clashToken,vectorServer,command
clashServer="localhost:29090"
clashToken="myToken"
vectorServer="my.vector:39000"
command= "D:\Program1\websocat\websocat -v --autoreconnect-delay-millis 15000 autoreconnect:ws://" & clashServer & "/profile/tracing?token=" & clashToken & " autoreconnect:tcp:" & vectorServer
command2= "D:\Program1\websocat\websocat -v --autoreconnect-delay-millis 15000 autoreconnect:ws://" & clashServer & "/traffic?token=" & clashToken & " autoreconnect:tcp:" & vectorServer

' 输出指令进行调试
' WScript.Echo command
' 把0改成1,使得窗口不自动隐藏进行调试
WScript.CreateObject("WScript.Shell").run command , 0
WScript.CreateObject("WScript.Shell").run command2 , 0

2 配置开机执行

打开“任务计划程序”,创建任务,重要的配置项如下:

  • 触发器-新建-登陆时
  • 操作-启动程序-“程序或脚本”设置为run.vbs路径

三 效果验证

clash统计界面
clash日志


我的服务器系列:使用clash-tracing统计windows下clash使用情况
https://linshenkx.github.io/clash-tracing-windows/
作者
John Doe
发布于
2023年4月5日
许可协议