本文记录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)
其工作流程如下:
- 两个websocat将clash数据转发到vector
- vector将数据进行路由、转换等操作,然后写入loki
- loki存储数据并提供搜索功能
- grafana提供面板访问,数据源来自loki
由上面的工作流程可以看出,如果要对接多个clash,只需要提供多个websocat即可。
目前本人有3个地方安装了clash:pc、手机、服务器。 其中服务器是多个服务器共同使用一个clash实例。
因为服务器是长时间运行的,可直接用部署的websocat进行数据采集。
而pc则不是一直使用的,不想为此多部署两个websocat容器,所以使用任务计划在系统启动时自动启动websocat程序即可。
二 部署clash-tracing
主要看官方的:https://github.com/Dreamacro/clash-tracing
以下是个人的修改配置,可参考:
- 把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
 
- 在docker-compose.yml里面把loki的端口也放出来。
 再把clash-tracing/grafana/provisioning/datasources/clash.yaml以及clash-tracing/vector/vector.toml中的 loki:3100 换成 域名:3100,因网络代理,loki可能无法解析
 
- 在docker-compose.yml里面把- user: root换成- user: "0:0"
 
- loki的版本使用2.4.1避免“too many outstanding requests”报错,见:https://github.com/grafana/loki/issues/4613 
- 两个websocat合并成一个 
然后去执行 docker-compose up -d 就行了
注意默认数据是存储在clash-tracing的各个组件目录下,工具loki的默认配置数据只存储168h,但还是要注意空间占用
docker-compose.yml参考如下:
| 12
 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 脚本如下
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 
 | Dim  clashServer,clashToken,vectorServer,commandclashServer="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路径
三 效果验证

