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