开源Whamm:WebAssembly赋能,实时监测与修复运行中应用

9 阅读3分钟

Whamm是WebAssembly插桩框架,用于调试、监控和操纵Wasm应用。安装需Homebrew、Git、Rust和Wasm目标。它能提升Wasm应用的可观测性并动态修复错误。

译自:Open Source Whamm: Use WebAssembly To Monitor and Fix Running Apps

作者:B. Cameron Gain

Whamm 旨在允许用户使用编程语言或代码对其 WebAssembly (或 Wasm) 应用程序进行插桩,或者让他们直接在模块中编程其 WebAssembly 应用程序。有了它,他们可以在 WebAssembly 模块中调试和监控其应用程序。

如果您已经安装了 Homebrew,那么在安装 Whamm 时,更新将自动安装。此命令会下载并安装 Homebrew:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

从发布页面下载适用于您平台的最新版本。

克隆 Whamm 仓库:

git clone https://github.com/ejrgilbert/whamm.git

需要 Rust,即使您对 Rust 不太了解——我当然也不——一旦安装好,您就可以开始使用 Whamm 了。我通过此可信站点使用此命令(我强烈推荐这样做)在我的 Mac 上下载并安装了 Rust:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

然后我运行了这些命令,以确保 Rust 在所有终端会话中都可用。这是必要的,因为 Rust 使用起来非常复杂,或者极其逻辑化,或者两者兼而有之:

grep -q ".cargo/env" ~/.zshrc 2>/dev/null || echo 'source "$HOME/.cargo/env"' >> ~/.zshrc && echo "Added to ~/.zshrc - will work in new terminals"

构建源代码:

cargo build --release

当我第一次提示 Whamm 构建源代码时,我收到了一条错误消息:

我没有安装 WebAssembly 目标是错误的原因。因此,我安装了 WebAssembly 目标作为修复:

cd ~/whamm && rustup target add wasm32-wasip1

我再次尝试构建源代码:

cargo build --release

成功了!

将构建好的二进制文件添加到您的 PATH。此二进制文件应位于:

target/release/whamm

完成此操作后,您可以使用 Whamm 和 Wasm 完成的巧妙操作会整齐地列出。您可以按照指示使用命令行界面 (CLI) 作为所有可用命令的参考。这些命令包括——如所示——监控或操纵程序的执行。我在这里不会深入探讨应用程序监控的含义,但它是为 Wasm 应用程序添加更多可观测性的开始。使用 Whamm 进行此操作通常用于调试、收集和分析应用程序运行时的日志和指标,而不仅仅是静态地进行。

一旦找到错误源,所谓的“操纵执行”允许您通过改变“动态行为”来修复错误,换句话说,就是修复错误。正如文档所述,您可以通过“操纵应用程序的动态行为”来改变应用程序状态。

基本测试

您可以运行一个基本测试,通过运行以下命令来确保 Whamm 二进制文件在您的路径中并按预期工作:

whamm --help

您应该会看到以下内容:

由于我尚不清楚的原因,我最初对 Whamm 功能的测试并未奏效,如上所示。但随后我回顾了以上所有命令,包括重新安装 Rust 目标,并重新构建或重新安装 WebAssembly 目标,以及重新安装 Rust 的 Cargo 以确保其在所有终端中都可用。因此这很可能是一个 Rust 问题,尽管我不确定。无论如何,我执行了大部分上述命令并最终成功了。

现在您已准备好开始您的 Whamm 之旅,进行代码的插桩、重新构建、纠错、监控和调试。向该项目的创建者——以及现在,我猜想是主要维护者——卡内基梅隆大学的博士生 Elizabeth Gilbert 致敬,感谢她带来了这个出色的项目。

尽管我认为这看起来很简单且相对易于使用,但它是一个了不起的构建,代表了大量的辛勤工作和工程奉献。这无疑是 WebAssembly 社区的又一次胜利,也为可观测性、调试以及使用 Wasm 动态更新应用程序的能力带来了胜利。