用于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 请求。主分支将始终具有最新的工作代码。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java GridBagLayout不填充区域   java Memozied Fibonacci未运行与常规Fibonacci解决方案   Java Web启动未启动问题   Java中异常和if-then的区别   java从命令提示符运行批处理文件获取错误   socket在Java中验证SSL证书的公共名称   如何在JAVA中检查字符串数组中的相等字   用java语言将音频文件转换成文本文件的语音识别   java为什么foo(1,2,3)没有传递给varargs方法foo(对象…)作为整数[]   java通过蓝牙将奇怪的数据从Arduino传输到Android   java ContainerRequestFilter获取空entitystream   java如何从安卓 studio中删除不兼容类型错误   基本Java错误   在Spring引导中使用REST API时发生java错误   javascript通过从SQL查询派生的URL打开页面