99 lines
2.5 KiB
Markdown
99 lines
2.5 KiB
Markdown
|
|
gstatsd - A statsd service implementation in Python + gevent.
|
|
|
|
If you are unfamiliar with statsd, you can read [why statsd exists][etsy post],
|
|
or look at the [NodeJS statsd implementation][etsy repo].
|
|
|
|
License: [Apache 2.0][license]
|
|
|
|
Requirements
|
|
------------
|
|
|
|
* [Python][python] - I'm testing on 2.6/2.7 at the moment.
|
|
* [gevent][gevent] - A libevent wrapper.
|
|
* [distribute][distribute] - (or setuptools) for builds.
|
|
|
|
|
|
Using gstatsd
|
|
-------------
|
|
|
|
Show gstatsd help:
|
|
|
|
% gstatsd -h
|
|
|
|
Options:
|
|
|
|
Usage: gstatsd [options]
|
|
|
|
A statsd service in Python + gevent.
|
|
|
|
Options:
|
|
--version show program's version number and exit
|
|
-b BIND_ADDR, --bind=BIND_ADDR
|
|
bind [host]:port (host defaults to '')
|
|
-s SINK, --sink=SINK a graphite service to which stats are sent
|
|
([host]:port).
|
|
-v increase verbosity (currently used for debugging)
|
|
-f INTERVAL, --flush=INTERVAL
|
|
flush interval, in seconds (default 10)
|
|
-p PERCENT, --percent=PERCENT
|
|
percent threshold (default 90)
|
|
-D, --daemonize daemonize the service
|
|
-h, --help
|
|
|
|
Start gstatsd listening on the default port 8125, and send stats to graphite
|
|
server on port 2003 every 5 seconds:
|
|
|
|
% gstatsd -s 2003 -f 5
|
|
|
|
Bind listener to host 'foo' port 8126, and send stats to the Graphite server
|
|
on host 'bar' port 2003 every 20 seconds:
|
|
|
|
% gstatsd -b foo:8126 -s bar:2003 -f 20
|
|
|
|
To send the stats to multiple graphite servers, specify '-s' multiple times:
|
|
|
|
% gstatsd -b :8125 -s stats1:2003 -s stats2:2004
|
|
|
|
|
|
Using the client
|
|
----------------
|
|
|
|
The code example below demonstrates using the low-level client interface:
|
|
|
|
from gstatsd import client
|
|
|
|
# location of the statsd server
|
|
hostport = ('', 8125)
|
|
|
|
raw = client.StatsClient(hostport)
|
|
|
|
# add 1 to the 'foo' bucket
|
|
raw.increment('foo')
|
|
|
|
# timer 'bar' took 25ms to complete
|
|
raw.timer('bar', 25)
|
|
|
|
|
|
You may prefer to use the stateful client:
|
|
|
|
# wraps the raw client
|
|
cli = client.Stats(raw)
|
|
|
|
timer = cli.get_timer('foo')
|
|
timer.start()
|
|
|
|
... do some work ..
|
|
|
|
# when .stop() is called, the stat is sent to the server
|
|
timer.stop()
|
|
|
|
|
|
[python]: http://www.python.org/
|
|
[gevent]: http://www.gevent.org/
|
|
[license]: http://www.apache.org/licenses/LICENSE-2.0
|
|
[distribute]: http://pypi.python.org/pypi/distribute
|
|
[etsy repo]: https://github.com/etsy/statsd
|
|
[etsy post]: http://codeascraft.etsy.com/2011/02/15/measure-anything-measure-everything/
|
|
|