用Python实现StatsD/Graphite

1 投票
1 回答
699 浏览
提问于 2025-04-18 08:56

我在 OS X 10.9.3 上成功运行了 Etsy 的 StatsD 和 Graphite。

现在我想用 Python 来实现它们,但我不想使用 python-statsd 这个库,因为我想先搞明白这些技术是怎么工作的,免得以后需要用 Ruby 或 PHP 的时候就不懂基本原理了。

也就是说,我想用 Python 把应用的数据发送到 StatsD,然后这些数据会在 Graphite 中显示出来。

在我的应用里,我使用的是 Steve Ivy 的 python_example.py 的一个完全相同的副本。

在我的代码中,我是这样调用增量函数的:

from statsd import StatsdClient
client = StatsdClient()
client.increment('somename.someval')

这里出现了一个错误:

File "/Users/bengrunfeld/Desktop/Work/code/wf-ghconsole/console/statsd.py", line 163, in send
udp_sock.sendto(":".join(item).encode('utf-8'), addr)
....
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/remote_api/remote_api_stub.py", line 234, in _MakeRealSyncCall
raise pickle.loads(response_pb.exception())
RuntimeError: error('illegal IP address string passed to inet_pton',)

这是 udp_sock.sendto 发送的内容: ('somename.someval:1|c', ('localhost', 8125))

我的代码链接在这里: https://github.com/bengrunfeld-wf/gae-github-console/blob/statsd/console/statsd.py

1 个回答

1

你的代码看起来没问题,但首先要做的是在应用引擎之外运行一下代码。如果这样能正常工作,那么就要确认一下应用引擎是否支持UDP。如果我没记错的话,它是不支持的。上次我用应用引擎实现这个的时候,是需要创建一个HTTP代理的。

撰写回答