一个简单的python度量框架,用于carbon/graphite。
graphite-pymetrics的Python项目详细描述
graphite pymetrics是一个轻量级的python框架,它使得添加应用程序度量变得非常简单 发送到远程石墨/碳服务器。
所需要的只是这个包(还包括pystatsd)和对远程graphite服务器的访问。
要安装它,只需像往常一样运行pip:
$ pip install graphite-pymetrics
- 包装要求:
- Pystatsd==0.1.6
- gevent
用法
确保有一个本地Graphite代理正在运行-在应用程序的早期启动它:
from metrics.graphite import start_graphite_proxy start_graphite_proxy({"host": "graphite.mycompany.com", "port": 2003})
代理是pystatsd,一个本地服务器,它从metrics客户端接收udp数据包并周期性地 通过TCP向Graphite发送数据。
计数器
要为代码中的任何地方添加计数器,请使用metric.add:
from metrics import Metric Metric.add("foo.bar")
使用@metric decorator计算特定的方法调用:
from metrics import metric @metric("bar.baz") def foo(): # do stuff here
计时
有几种方法可以记录计时。最简单的方法是先手动测量时间,然后提交:
from metrics import Metric import time start = time.time() # do stuff elapsed = time.time() - start Metric.timing("do.stuff", elapsed)
一个更简单的方法是让metric客户机使用metric.start_timing和call done()跟踪时间。 返回计时实例。下面是一个单独测量每个端点所用时间的示例 在Flask webapp中:
from metrics import Metric from flask import Blueprint, current_app, request, g app = Blueprint("myapp", __name__) @app.before_request def before_request(): try: g.timing = Metric.start_timing(str(request.endpoint)) # start timing except: current_app.logger.error("Unable to time call for 'request.endpoint'") @app.teardown_request def teardown_request(exc): try: g.timing.done() # stop timing except: current_app.logger.error("Timing not available")
与@metric decorator类似,还有一个@timing decorator,用于测量特定方法的时间:
from metrics import timing @timing("heavy.task") def heavy_task(x, y, z): # do heavy stuff here