一个简单的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

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

推荐PyPI第三方库


热门话题
验证Java验证用户输入的一系列数字   java如何在SpringBoot中字段验证失败时在ConstraintViolationException中获取RequestParam名称   java如何解决Vertx阻塞DNS问题   java意外类型平均值   java如何将dataframe的UUID列转换为包含相同十六进制序列的简单字符串?   身份散列映射的java用法   java无法在eclipse中导入现有项目   进程从运行的java程序中获取CPU号   java将文本视图的特定行滚动到顶部在最后一个屏幕上不起作用   无法初始化java SpringSecurityFilterChain   java当我在项目中使用volatile时,为什么下面的代码显示不同的结果?   是否有转换java的标准方法。util。函数,消费者<T>转换为java。util。作用函数<T,Void>   java nginx分块传输编码失败   java如何将几个IF转换为一个循环   java URI从路径中删除/删除