本文记录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参考如下:
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 脚本如下
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路径
三 效果验证
Q.E.D.