Python应用性能指标
我们正在开发一个Python的网页应用,想要了解用户的一些基本行为。
举个例子,我们有很多旧的方式来设置用户的语言,比如通过网址参数、使用不同格式的cookies、Accept-Language
头信息等等。我们真的想以某种方式来测量这些行为(但记录所有数据会太庞大了)。
我试着找一些像Node.js的Metrics这样的库,但似乎没有适合Python的。目前,我觉得我们可以用一些类似UNIX负载的计数器来应付。(不过多一些总是好的,对吧?)
我是不是错过了什么明显的库或者聪明的技巧呢?
5 个回答
查看多个日志。
我们有很多独立的日志(每个日志都有不同的处理方式和格式),并使用Python的日志功能将这些事件记录到不同的日志中。
我们有很多函数,里面有这样的内容。
def some_feature( ... ):
customer_log.info( "Requested some_feature" )
...
vendor_x_log.info( "Got foo" )
...
vendor_y_log.info( "Got bar" )
现在我们有了详细的日志。因为这个日志模块可以写入数据库(或者做其他合适的事情),所以我们通过一个简单且易于配置的界面获得了所有的细节。
有一个叫做Graphite的Python项目,和一个叫做Statsd的Node.js项目,它们可以完全满足你的需求。很多人用这两个项目来监测软件性能和商业指标。
顺便提一下,还有一些托管应用版本,它们提供了和Graphite以及Statsd相似的功能。比如我公司的产品Instrumental,可以帮你处理指标的托管和图表生成;在Python中,你可以使用Python statsd客户端,配合我们的Statsd到Instrumental的代理,将你的指标报告给我们的服务。
因为之前的回答是基于文件记录的(至少默认是这样),我想提一下这些不同工具之间的传输层是很有趣的:一个statsd服务器(无论是官方的还是我们的代理)使用UDP协议将你的指标信息发送到服务器。你也可以直接使用基于行的TCP协议联系Graphite或Instrumental;其他一些商业服务,比如librato Metrics或Stathat,则通过HTTP消息接收你的指标。根据你发送消息的规模,这些工具中的任何一个可能对你来说都更有吸引力。
我刚发现了一个叫做 PyCounters 的项目,感觉这个正是我开始需要的东西。