[分享] 拋棄 SCP:我用單一 Binary (APE) 透過 WebRTC 將遠端 Nginx Log 串流到本地 GoAccess (零依賴)

1 月 17 日
 bear330

大家好,之前有在版上介绍过我自己写的 CLI 传档工具 ffl 上一篇传送门

这阵子在维运时遇到一个痛点:「想分析 Production 容器里的 Nginx Log ,但不想在 Server 上装 GoAccess ,也不想把几百 MB 的 Log 载回来占空间。」

通常大家会用 scp 下载,或者搞复杂的 SSH Tunnel 。但我个人还是感觉有点麻烦,尤其是档案在 Container 内 或属于 Root 权限 时,SFTP/SCP 很难直接一把抓出来。

于是就有了这个玩法的 Demo 。👇

📺 实际效果 (Log 串流分析)

(影片示范的是将远端 160MB 的 Log 直接串流到本地 GoAccess 进行即时分析)

🛠️ 这个方案解决了什么?

  1. Server 端零洁癖 (Zero Dependencies) 因为是用 APE 封装,不用装 Python 、不用装 Node ,甚至不用管 OS 版本( Alpine/Debian/CentOS/x86/ARM 通吃)。直接 curl 下来就能跑,跑完就删,不弄脏环境。

  2. 即时且节省空间 资料不落地。流程变成:Remote Stream -> Local Pipe ,流量走完就结束了,不会占用本地硬碟。当然你想存下来也可以,连结丢进浏览器下载走的是 WebRTC P2P ,速度也是非常快。

  3. 穿透内网 如果你的 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 异地备份),有什么脑洞大开的用法也欢迎交流!

1267 次点击
所在节点    分享创造
3 条回复
Need4more
1 月 18 日
好奇怪的表达, [档案] 是文件的意思吗?
bear330
1 月 18 日
真是不好意思, 其實我是台灣人, 我們都說檔案, 我下次注意要說文件 :) 謝謝提醒
ztm0929
1 月 19 日
@bear330 其实没啥,港澳台、东南亚和大陆的中文本来就有点差异,按自己语言习惯来就好~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/1186392

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX