使用 Python3 将数据导入 Graphite/Carbon

Get data into Graphite/Carbon using Python3

我有一个 Grafana docker 图片 运行 Graphite/Carbon。使用 CLI 获取数据有效,示例:

echo "local.random.diceroll $(((RANDOM%6)+1)) `date +%s`" | nc localhost 2003;

以下 Python 2 代码也有效:

sock = socket.socket()
sock.connect((CARBON_SERVER, CARBON_PORT))
sock.sendall(message)
sock.close()

message是一个包含key value timestamp的字符串,这个行得通,可以查到资料。所以 Grafana docker 图像正在接受数据。

我想让它在 Python 3 中工作,但是 sendall 函数需要字节作为参数。代码更改是:

sock = socket.socket()
sock.connect((CARBON_SERVER, CARBON_PORT))
sock.sendall(str.encode(message))
sock.close()

现在数据没有插入,我不知道为什么。我在远程机器(同一网络)和本地服务器上试过这个。我也尝试了几个包(graphiti,graphiteudp),但它们似乎都无法插入数据。它们也不显示任何错误消息。

graphiteudp 的简单示例在 Github page

上也不起作用

知道我哪里做错了吗?

您可以将 \n 添加到您发送的消息中。我用 Python 3 试过了,效果很好。