我正在尝试捕获作为 StatsD 指标发送的 UDP 流量(在端口 8125 上)。
我尝试过的最简单的方法是运行nc -ul 8125
将指标打印到终端......但它们不是换行符分隔的。此外,将输出传送到 grep 不会显示任何内容。
我尝试的下一个方法是socat - udp-listen:8125
与 netcat 给出类似的结果。
但是,当我将 -v flat和管道 stderr 传递给 stdout ( socat -v - udp-listen:8125 2> &1 | grep ...
) 时,我会得到模糊的不错的结果,但还有很多额外的不需要的输出。
我也尝试过 tshark,tshark -l -f "port 8125" -i ln0 -E separator=, -Tfields -e data
但这会将输出打印为十六进制......而不是 ascii。我可以传入 -x 标志,它并排打印十六进制和 ascii。不是我想要的,也不是很友好。我还尝试了许多其他 tshark 选项,但没有任何东西能够简单地打印 UDP 指标。
我已经看到了一些例子,其中有人做类似的事情正在增加输出,例如| while read output; do echo $output; done;
但是,我没有用这种方法取得任何成功,而且我不是一个真正的 unix 人,所以我正在努力想出一个解决方案。
毕竟,这似乎并没有什么不寻常的任务,而且nc -ul 8125
几乎就在那里......
为了提供更多上下文......执行发送的代码如下所示:
var udpClient = new UdpClient();
udpClient.Connect("127.1", 9999);
while (true)
{
var bytes = Encoding.UTF8.GetBytes("hi");
udpClient.Send(bytes, bytes.Length);
Thread.Sleep(1000);
}
所需的输出看起来像
hi
hi
hi
...
而nc -ul 9999
输出hihihihihi....