向statsd发送有关python代码的性能指标
perfmetrics的Python项目详细描述
简介
perfmetrics包提供了一种添加软件性能的简单方法 python库和应用程序的度量。使用perfmetrics查找 生产应用程序中的真正瓶颈。
perfmetrics包是etsy的statsd守护进程的客户端,etsy 又是graphite的客户机(特别是carbon守护进程)。因为 perfmetrics包向statsd发送udp包,perfmetrics添加 应用程序没有I/O延迟,CPU开销很小。它可以工作 同样适用于线程(同步)或事件驱动(异步) 软件。
用法
使用 @metric 和 @metricmethod 修饰符包装函数 以及应该向statsd发送计时和调用统计信息的方法。 将decorators添加到任何可能成为瓶颈的函数或方法, 包括库功能。
示例:
from perfmetrics import metric from perfmetrics import metricmethod @metric def myfunction(): """Do something that might be expensive""" class MyClass(object): @metricmethod def mymethod(self): """Do some other possibly expensive thing"""
接下来,告诉perfmetrics如何连接到statsd。(在你之前, decorators不起作用。)理想情况下,应用程序应该读取 启动时来自配置文件的statsd uri,或者应该设置 statsd_uri环境变量。下面的示例使用 硬编码的uri:
from perfmetrics import set_statsd_client set_statsd_client('statsd://localhost:8125') for i in xrange(1000): myfunction() MyClass().mymethod()
如果运行该代码,它将在端口激发2000个udp数据包 8125。但是,除非你已经安装了Graphite和Statsd, 所有这些包都将被忽略并丢弃。掉下去是件好事: 你不希望你的生产应用程序失败或减速只是 因为您的性能监视系统已停止或不工作。
安装graphite和statsd来接收和绘制度量。一个好办法 安装它们的方法是github上的graphite构建示例 在没有根访问权限的自定义位置安装Graphite和StatSD。