#timely-dataflow #dataflow #timely #differential #tdiag

app ddshow

Timely和Differential数据流日志分析和可视化

2个不稳定版本

0.2.2 2021年8月9日
0.1.1 2021年6月10日

#370 in 调试

MIT/Apache

2MB
15K SLoC

Rust 14K SLoC // 0.1% comments JavaScript 2K SLoC // 0.7% comments

DDShow

Timely数据流和Differential数据流程序的可视化

开始使用ddshow

首先,通过cargo安装ddshow。目前,ddshow尚未发布到crates.io,但将来会发布。在此之前,推荐使用--git选项与cargo install来安装ddshow。

cargo install --git https://github.com/Kixiron/ddshow

接下来,您需要为目标程序设置TIMELY_WORKER_LOG_ADDR环境变量。这应该设置为ddshow指向的相同地址(默认为127.0.0.1:51317),以便它们可以通过TCP进行通信。

# Bash
set TIMELY_WORKER_LOG_ADDR=127.0.0.1:51317
# Powershell
$env:TIMELY_WORKER_LOG_ADDR = "127.0.0.1:51317"
:: CMD
set TIMELY_WORKER_LOG_ADDR=127.0.0.1:51317

设置环境变量后,现在可以运行ddshow。应该将--connections参数设置为目标计算启动的timely工作进程的数量,如果没有提供,默认为1,并且为ddshow连接到的地址设置--address参数。注意,--address应该与您设置的TIMELY_WORKER_LOG_ADDR变量相同,否则ddshow将无法连接。

ddshow --connections 1 --address 127.0.0.1:51317

这将创建包含ddshow UI所需所有内容的dataflow-graph/目录。在浏览器中打开dataflow-graph/graph.html可以查看绘制的流程图。

ddshow支持的完整参数列表及其选项可以通过运行以下命令获取:

ddshow --help

对于基本用法

展示

调试技巧

如果输出为空而本不应该为空,请确保您没有使用Worker::log_register()覆盖Timely和DDflow设置的默认日志记录器,该实现不转发日志事件。

另一个常见问题是Timely版本不匹配。由于abomonation(用于发送事件)的工作方式,事件的结构在Timely版本之间(甚至不同的rustc调用)不一致,这可能导致错误、不兼容和静默失败。为此,唯一的已知解决方案是确保ddshow和目标程序使用相同的Timely和DDflow版本,或者使用具有稳定和FFI安全版本的时间日志类型的ddshow-sink存储库。

在寻找微分数据流见解时,请确保您的代码中包含此(或等效)片段,以便转发微分数据流日志

// `worker` should be an `&mut Worker<A>`, generally acquired from the inner
// closure of `timely::execute()`

if let Ok(addr) = std::env::var("DIFFERENTIAL_LOG_ADDR") {
    if !addr.is_empty() {
        if let Ok(stream) = std::net::TcpStream::connect(&addr) {
            differential_dataflow::logging::enable(worker, stream);
        } else {
            panic!("Could not connect to differential log address: {:?}", addr);
        }
    }
}

依赖项

~22–32MB
~430K SLoC