用于python的statsd客户端
statsd-client的Python项目详细描述
StatsD是一个播放 用Graphite。他们一起收集, 聚合,并显示统计信息。如果你不知道这两个是什么, 为什么你还在读这个?如果你写软件或者知道 有人这么做了,我打赌收集数据会使你的软件 更好,或者至少给你点东西让你看看和思考 关于。statsd使得在代码中发送统计信息变得非常容易。这个 客户机使从python代码中获取统计信息变得更加容易。
安装
对管理外部包感到厌烦?这里有很多车站 出现在“pip search statsd”下的客户端。谁有时间 跟踪小项目的微小依赖关系?把statsd.py复制到 如果你对这类事情感兴趣的话,你的项目。不用依赖 一些多文件包应该是一个简单的客户端。抓紧走! 如果你是一个坚持依赖的人,你可能不需要知道 如何安装,但这里有任何方法:
克隆并安装:
git clone git@github.com:gaelenh/python-statsd-client.git cd python-statsd-client python setup.py install
使用pip安装:
pip install statsd-client
或者像我上面说的,只需将statsd.py复制到您的代码库中。
用法
基本
安装很简单。默认情况下,客户端将连接到 默认statsd端口(8125)。
import statsd statsd.incr('processed') # Increment processed bucket by 1 statsd.incr('processed', 5) # This time by 5 statsd.incr('processed', sample_rate=0.9) # Increment with a sample rate of .9 statsd.timing('pipeline', 2468.34) # Pipeline took 2468.34 ms to execute
要连接到非本地STATSD吗?使用 statsd.init_statsd(设置)。settings是一个包含这些内容的dict 按键:
STATSD_HOST (Default 'localhost'): String host name. STATSD_PORT (Default 8125): Integer port number. STATSD_SAMPLE_RATE (Default None (same as 1.0)): Integer/Float between 0 and 1. STATSD_BUCKET_PREFIX (Default None): String prefix added to all buckets. The code will handle dotting them together.
如果您不想使用init_statsd,您可以随时传入 创建客户端、计时器或计数器时的设置:
from statsd import StatsdClient client = StatsdClient(host='127.0.0.1', port=9999, prefix='app', sample_rate=0.9)
计数器
想数数吗?使用statsdcounter:
import statsd statsd.init_statsd({'STATSD_BUCKET_PREFIX': 'photos'}) counter = statsd.StatsdCounter('processed') # calls on counter will send updates to bucket named 'photos.processed' counter += 1 # equivalent to counter.incr() or counter.incr(1) counter += 5 # equivalent to counter.incr(5) counter -= 10 # equivalent to counter.decr(10)
计时
对时间感兴趣?查看所有可以计时的方法:
import statsd statsd.init_statsd({'STATSD_BUCKET_PREFIX': 'photos'}) timer = statsd.StatsdTimer('pipeline') timer.start() # Do stuff timer.split('stage1') # Sends timing data for bucket 'photos.pipeline.stage1' # Do more stuff timer.split('stage2') # Sends timing data for bucket 'photos.pipeline.stage2' # Do even more stuff timer.stop() # Sends timing data for bucket 'photos.pipeline.total'
计时器也可以用作装饰器:
from statsd import StatsdTimer @StatsdTimer.wrap('pipeline') def process(): pass process() # Sends timing data for bucket 'pipeline.total'
喜欢用语句!
from statsd import StatsdTimer with StatsdTimer('photos'): pass # Do stuff
更别说了:
from statsd import StatsdTimer with StatsdTimer('photos') as t: # Do stuff t.split('stage1') # Do more stuff t.split('stage2') # Finish up
将计时器与decorators一起使用,或者WITH语句仍将发送 统计代码块中是否引发异常:
from statsd import StatsdTimer class Foo(object): @StatsdTimer('photos') def proc(self): # Do stuff raise ValueError('Whoops') f = Foo() f.proc() # Raises exception, but sends timing data for bucket 'photos.total-except'
其他
客户端与Flask集成得很好。 当初始化所有其他的时候,只要调用statsd.init_statsd 框架组件。完成后,您可以使用计时器和 在你的代码中的任何地方都有计数器。
贡献
如果你发现了一个bug并想修复它,就用fork,branch,提交pull 请求。主分支将始终具有最新的工作代码。