使用 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 试过了,效果很好。
我有一个 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 试过了,效果很好。