带有端口转发/隧道的 LTTng 实时视图

问题描述

我有一台 PC A,其中 LTTng 跟踪正在实时视图中运行

lttng create trace-session --live

# Traces will be output to tcp4://127.0.0.1:5342/ [data: 5343]

另一台PCB通过以太网线直接与A相连。同时,B 连接到本地网络。

现在如何查看与 B 位于同一本地网络的第三台 PC C 的实时跟踪事件,例如使用

babeltrace2 "net://${B_IP}/host/${B_HOSTNAME}/trace-session"

我在 PC C 上运行了以下命令,以建立到 PC *A 的隧道。

ssh -L 5342:${A_IP}:5342 -N user_name@${B_IP}

然而,它似乎没有奏效。我想问:

  • 在这里做错了什么?
  • “转发”LTTng 实时跟踪事件以供babeltrace2 查看的标准方法是什么?

解决方法

Babeltrace2 使用 lttng-relayd 进程的 live 端口而不是数据和控制端口连接到 lttng-relayd

当命令行报告如下:

# Traces will be output to tcp4://127.0.0.1:5342/ [data: 5343]

这意味着 lttng-sessiondlttng-consumerd 进程将与 lttng-relayd 进程通信,该进程监听 127.0.0.1:5342 以获取控制消息和 127.0.0.1:5343 以进行跟踪数据交换.查看器(在本例中为 Babeltrace2)可以连接到 live 进程的 lttng-relayd 端口以流式传输实时会话。您可以更深入地查看组件图 here

默认实时端口为 5344,lttng-relayd 进程的默认行为是绑定所有接口以进行侦听。如果没有指定任何端口与 Babeltrace2 进程通信,那么 lttng-relayd 自然也会默认使用该端口。

有关详细信息,请参阅 lttng-relayd 的手册页。

我在这里做错了什么?

在您的场景中,您需要建立 5344 端口的隧道。请注意,我不精通 ssh 隧道,因此无法在此处验证 ssh 方法。

ssh -L 5344:${A_IP}:5344 -N user_name@${B_IP}

“转发”LTTng 实时跟踪事件以供 babeltrace2 查看的标准方法是什么?

Babeltrace2lttng-relayd 使用 TCP 进行通信。因此,这里所有的 TCP“转发”方法都是可以接受的。您可能已经注意到,LTTng 不会以任何方式加密通信和跟踪数据。如果您需要在不受信任的网络上移动数据,我会说在这里使用 ssh 隧道是合适的。