通过ZeroMQ向Librato发送度量。

Zibrato的Python项目详细描述


zibrato为python装饰器和上下文管理器提供插入代码的工具。
zibrato尝试非常有效地执行此操作,因此收集度量值并将其转换为zeromq队列,在该队列中,后端进程可以收集它们并将它们发送到librato。其他后端(如statsd)预计将在未来使用。


installation
----



您应该能够克隆位于
https://github.com/version2beta/zibrato的github存储库,并运行pip install the
requirements.txt文件。

请注意pyzmq是安装的先决条件。ubuntu用户(可能还有其他用户)需要安装python dev包才能构建python dev来运行测试,您还需要python nose和gary bernhardt的expecter
包::
pip install nose expecter

首先,它提供用于检测代码的zibrato模块。


zibrato模块

zibrato import zibrato
librato、backend和broker模块也可用。请参见代码。

z=zibrato()
设置zibrato的新实例以在代码中使用。接受多个
设置:

*主机:要连接的fqdn或ip地址。可选。
默认为"127.0.0.1"。请参阅下面的"Zibrato Workers"。
*端口:要连接的端口。可选的。默认为5550。
*context:ZeroMQ上下文实例。这是完全可选的,并且
只有在ZeroMQ也以其他方式使用的高级情况下才需要。name='counter_name')
每次调用修饰函数
时,递增一个名为'counter_name'的计数器。

递增一个名为'counter_name'的计数器。若要以
以外的间隔递增,请将值设置为该量。

@z.time\u me(level='debug',name='timer\u name')
在名为
'timer\u name'的量表下记录修饰函数的执行时间。

z.time\u me(level='debug',name='timer_name')
记录在给定上下文中花费的时间。

z.gauge(level='crit',name='gauge戋name',value=123)
记录值。


zibrato decorators,当然,返回包装函数的结果。
上下文管理器不返回任何结果,因为它们不打算从
"with"块中使用。gauge方法也不返回任何值。

metric decorators和上下文管理器最多接受四个参数:

*level:必需。监视级别,以日志级别(即
调试、信息、警告、错误、严重)为模型,但完全是任意的,因此
可以使用任何适合您的标签。Zibrato Workers配置为只关注指定的级别。
*mtype:必需。度量类型,通常为"计数器"、"计时器"和
"仪表"。请参阅下面的"公制类型"。
*名称:必需。正在记录的度量的名称。
*值:要记录的值。对于计时功能,值既不需要
,也不需要提供,如果提供,它将被
测量时间所代替。对于计数器,value表示应递增
计数器的数量,如果未提供,则默认为1。对于
仪表,这是固定读数,应提供。
*来源:公制来源。例如,这可能表示
程序、类或服务器的名称。可选,默认为
"未指定"。


示例代码::


import zibrato
z=zibrato()
或z=zibrato(host='127.0.0.1',port='5550')

@z。时间(级别='debug',名称='myfunct_timer',源='myprog')
def myfunctt():
耗时的操作(

@z.count_me(级别='info',名称='myfunct_counter',,值=5)加上5
def myfunctc():
传递

使用z.count名称(level='信息',name='计数器名称',source='死亡之星'):
传递

使用z.time名称(level='调试',name='计时器名称'):
慢速函数到时间()

z.gauge(level='crit',name='gauge\name',value=123)


zibrato workers
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

zibrato需要一个代理将一个或多个测量发布者(源代码并行运行)连接到一个或多个测量后端(librato和statsd,例如。)

zibrato代理
++++++++++++++++它为Zibrato发布服务器(代码
仪器)提供了发送测量值的TCP端点,以及一个TCP端点,Zibrato
后端可以订阅该端点以获取用于发送到其他服务的度量。


代理可以如下方式启动:

/usr/bin/librato broker--host 127.0.0.1--port 5550

"port"指定代理应绑定到的连续对的较低端口。主机和端口
都是可选的。默认值分别为127.0.0.1和5550。较低的
端口地址用于侦听Zibrato发布服务器(请参阅上面的"Zibrato模块"
),较高的端口用于发布到Zibrato Workers(请参阅下面的"Zibrato
Workers"。

主管:

[程序:zibrato broker]
命令=/usr/bin/zibrato broker--主机127.0.0.1--端口5550
进程名=%(程序名)s
自动启动=真
自动重新启动=真
停止信号=退出
用户=www数据

zibratoworkers
+++++++++++++++++++++++


此版本的zibrato还包括一个worker,该worker处理排队的
测量并将其发送到librato。

示例::


可用参数为:

*--主机:zibrato后端的fqdn主机名或IP地址。
*--端口:zibrato工作应连接到的端口。这是两个端口中的较高端口,比启动后端时指定的端口
大一个。
*--级别:此工作进程应订阅的级别。
*--刷新:应将测量发送到
librato的频率。
*--用户名:librato用户名,用于连接到其api.
*--api token:用于连接到其api的librato api令牌。

或者,可以从supervisord运行worker::

[程序:zibrato librato]
命令=python/usr/bin/zibrato librato--用户名用户名\
--apitoken key--级别信息,警告--刷新60
进程名=%(程序名)s
autostart=true
autorestart=true
stopsignal=quit
user=www data


zibrato/backend.py中。它们可能需要重新实现connect、parse、
post和flush方法,并且必须包含作为main运行的代码。请参见
zibrato/librato.py作为示例。

脚本的"入口点"部分。附加worker的首选实现是按照"zibrato服务"模式命名
,并将其添加到控制台脚本
数组中。


metric types
r/>
*计数器。zibrato计数器跟踪在后端两次刷新之间发生
公共名称的事件的次数。因此对于
示例,假设您正在跟踪如何调用"myfunct"时间,并且每60秒将数据刷新到后端。
如果未指定值,则"myfunct"计数器将在每次遇到计数器并发送计数器时递增一次每60秒归零一次。如果指定了source,则计数器
按源和名称而不是仅按名称唯一跟踪。计数器的
时间戳是在计数器被刷新时给出的。
*仪表。仪表在给定时间内保持一个值。每个仪表测量值
记录到后端,并带有Zibrato
接收测量值的时间戳。
*计时器。Zibrato提供了一个特殊的量表,它会自动填写
所花的时间。使用python的datetime.now()方法以秒为单位测量时间,以
微秒分辨率。


请注意,zibrato后端最终负责实现如何记录每个度量类型。在这个版本中,只提供了一个
后端,但在将来的版本中,请查看后端
文档,以确定度量的行为。


请注意,zibrato最初的编写目的是专门提供代码
工具,并专门连接到librato。这会导致阻抗不匹配,因为Librato的可用度量类型(截至
)仅限于仪表和计数器,而Librato的计数器不会按照我们需要的方式工作。因此,本代码中实现的指标仅转换为Librato的量表。


其他业务
——



tests


另外,还帮助理清了zeromq的复杂性和这个程序的体系结构。

感谢ZeroMQ的常客,他们耐心地回答了初学者的问题。


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

推荐PyPI第三方库


热门话题
手机上的html调试Java web应用程序   Java当前日期和过去日期之间的差值,以年、月、日、小时、分、秒为单位   如果方法名称相同,java如何使扩展类不从上面的类触发方法?   即使在提供了准确的firebase引用之后,java仍出现“无法跳转到类型”异常。请看详情   jar文件中的java图像   java如何避免从缓存读取时修改相同的对象实例?   Android中java完全控制的线程队列   JTextArea中的java计算   java如何独立运行。jar作为64位mashine上的32位   java在尝试实例化自引用泛型类的实例时,如何处理自引用类型参数   java如何安装着色jar而不是原来的jar   java在resultSet之后使用If-Else   多线程是java。朗,反思一下。方法调用线程安全   java 7语言向后兼容性   Objective C中的Category和Java 8中的Default方法是否等效?