用于生成应用程序统计信息的度量系统

markus的Python项目详细描述


markus是一个用于生成度量的python库。

Code:https://github.com/willkg/markus
Issues:https://github.com/willkg/markus/issues
License:MPL v2
Documentation:http://markus.readthedocs.io/en/latest/

目标

Markus通过以下方法更容易在您的程序中生成度量:

  • 提供多个后端(datadog statsd,statsd,logging,logging rollup, 等等)用于将数据发送到不同的位置
  • 同时向多个后端发送度量值
  • 为简单的测试提供测试框架
  • 提供一个分离的体系结构,使编写代码更容易生成 无需担心创建和配置 metrics客户端已经完成了——类似于python日志python日志 这样的模块

我在mozilla的崩溃接收管道的收集器中使用它。彼得用过 它也用来建立我们的符号查找服务器。

安装

要安装Markus,请运行:

$ pip install markus

(可选)安装 markus.backends.datadog.DatadogMetrics后端:

$ pip install markus[datadog]

快速启动

与使用日志库类似,每个python模块都可以创建 MetricsInterface(松散地等同于python日志记录器) 包括在模块导入时,并使用该时间生成度量。

例如:

import markus

metrics = markus.get_metrics(__name__)

使用__name__创建MetricsImplementation将导致 生成前缀由__name__确定的所有stats键 是指向该模块的点式python路径。

然后您可以在模块中的任何位置使用MetricsImplementation

@metrics.timer_decorator('chopping_vegetables')
def some_long_function(vegetable):
    for veg in vegetable:
        chop_vegetable()
        metrics.incr('vegetable', 1)

在应用程序启动时,使用要用于的后端配置markus 发布度量及其所需的任何选项。

例如,让我们配置指标以发布到日志和数据狗:

import markus

markus.configure(
    backends=[
        {
            # Log metrics to the logs
            'class': 'markus.backends.logging.LoggingMetrics',
        },
        {
            # Log metrics to Datadog
            'class': 'markus.backends.datadog.DatadogMetrics',
            'options': {
                'statsd_host': 'example.com',
                'statsd_port': 8125,
                'statsd_namespace': ''
            }
        }
    ]
)

编写测试时,请使用MetricsMock简化测试:

import markus
from markus.testing import MetricsMock


def test_something():
    with MetricsMock() as mm:
        # ... Do things that might publish metrics

        # This helps you debug and write your test
        mm.print_records()

        # Make assertions on metrics published
        assert mm.has_metric(markus.INCR, 'some.key', value=1)

历史记录

1.2.0(2018年4月27日)

功能

  • .clear()添加到MetricsMock使构建pytest更容易 使用MetricsMock上下文的fixture和操作记录以方便 测试。#29

bug修复

  • 更新CycDead后端固定^ {TT11}$和^ {TT12}$ 发送datadog现在支持的histogrammetrics类型。#31

1.1.2(2018年4月5日)

输入错误修复

  • 确定上一版本的日期。呃。

1.1.1(2018年4月5日)

功能

  • 正式切换到Semver。

错误修复

  • 修复MetricsMock,使其继续工作,即使configure 被称为。#27

1.1(2017年11月13日)

功能

  • 添加了markus.utils.generate_tag实用函数

1.0(2017年10月30日)

功能

  • 增加了对Python2.7的支持。
  • 添加了使用 用于statsd pings的pystatsd客户端。谢谢你,哈维尔!

错误修复

  • 在文档中添加了LoggingRollupMetrics
  • Mozilla已经运行Markus 6个月了,所以我们 现在可以标记为生产就绪。

0.2(2017年4月19日)

功能

  • 添加了一个markus.backends.logging.LoggingRollupMetrics后端 汇总指标并对其进行一些简单的计算。可能有用 用于开发的轻剖面。

错误修复

  • 许多文档修复。谢谢你,彼得!

0.1(2017年4月10日)

最初的写作。

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

推荐PyPI第三方库


热门话题
java可以从struts传递<param/>。xml作为隐藏参数?   带有文件字符串的java建议   安卓中带有用户名和密码的java RTSP流   eclipse如何在我的java代码中导入CSVreader特性?无论出于什么原因,我都不能使用cvsreader功能   Java类型推断在编译时失败,但Eclipse编译并运行良好   SpringBootJava。木卫一。IOException weblogic。乌提尔斯。编译器。ToolFailureException   在Spark中排序时出现java NotSerializableException   java在整数数组中查找缺少的数字   Angular 4中的AES 128加密和Java中的解密   显示GUI的java问题   java不包括ant build in javadocs中的文件   关闭弹出窗口后关闭java平台| JavaFX   java使用for循环还是while循环进行迭代?   java如何使用POI Apache获取生成的Excel文件中列的大小或长度   java Thornttail ArquillianTest,带有用于pactProvider测试的h2数据库   为什么XPATH(Java7)选择了太多的节点?   在自定义远程webapp上将数据附加到我的HDFS时发生java异常   xml如何在java多模块项目中创建bean entityManagerFactoryBean?   ConcurrentHashMap中的java死锁   Tomcat Java内存选项保存在哪个文件中