大家好,之前有在版上介绍过我自己写的 CLI 传档工具 ffl 上一篇传送门。
这阵子在维运时遇到一个痛点:「想分析 Production 容器里的 Nginx Log ,但不想在 Server 上装 GoAccess ,也不想把几百 MB 的 Log 载回来占空间。」
通常大家会用 scp 下载,或者搞复杂的 SSH Tunnel 。但我个人还是感觉有点麻烦,尤其是档案在 Container 内 或属于 Root 权限 时,SFTP/SCP 很难直接一把抓出来。
于是就有了这个玩法的 Demo 。👇
(影片示范的是将远端 160MB 的 Log 直接串流到本地 GoAccess 进行即时分析)
Server 端零洁癖 (Zero Dependencies)
因为是用 APE 封装,不用装 Python 、不用装 Node ,甚至不用管 OS 版本( Alpine/Debian/CentOS/x86/ARM 通吃)。直接 curl 下来就能跑,跑完就删,不弄脏环境。
即时且节省空间 资料不落地。流程变成:Remote Stream -> Local Pipe ,流量走完就结束了,不会占用本地硬碟。当然你想存下来也可以,连结丢进浏览器下载走的是 WebRTC P2P ,速度也是非常快。
穿透内网 如果你的 Server 在层层 NAT 后面,或者你只是想把 Log 分享给没有 SSH 权限的同事看,这个连结丢给他,浏览器打开也能收(会走 P2P 传输)。
1. 远端 (Producer): 把 Log 吐出来,Pipe 给 ffl:
# 下载 (APE 格式,单一 binary)
curl -fL [https://fastfilelink.com/ffl.com]( https://fastfilelink.com/ffl.com) -o ffl.com && chmod +x ffl.com
# 把档案变连结 (资料夹也可)
./ffl.com /var/log/nginx/access.log
2. 本地 (Consumer): 拿到连结后,用 curl 接住并喂给 GoAccess:
curl -sN [LINK] | goaccess - --log-format=COMBINED
🔗 专案地址
如果你也是 CLI / APE 爱好者,欢迎来 GitHub 看看,也欢迎 Star 或 PR ! 👉 https://github.com/nuwainfo/ffl
目前正在尝试更多 stdin 的玩法(例如 mysqldump 异地备份),有什么脑洞大开的用法也欢迎交流!