当你的系统变得很复杂后,后端服务器就需要有很好的监控和报警机制。监控的东西无非就两种:counting and timing。
  • counting:比如api调用的次数,disk I/O的次数,异常的次数等。
  • timeing:比如api调用的平均时间等。
这里介绍的statsd是很好用的收集/监控服务器指标的工具。它是一个daemon process,nodejs写的。你可以用各种语言来写客户端,发送指标到这个daemon process。它就是很好地支持了counting和timing的数据的搜集,然后可以用GraphiteLibrato把数据可视化出来。 根据我的经验,所有的网络通信都要监控,尤其是到第三方服务的通信,比如google maps, twilio等。第三方服务是会挂掉的,你不想在他们挂掉了的时候,花大量时间去排查(湾区工程师一小时薪水至少$40),然后得出结论不是你自己的问题而是别人的问题。 比如我们用python自己写了一层statsd的封装,可以很方便地收集某段代码调用的次数、时间、异常的数量:
with count_time('google.maps', 0.01):
    lookup_address_from_google_maps(address)
这个例子中,我们监控了跟google maps的所有通讯。它会发送三个指标到Librato可视化出来(如果异常,会发alert给oncall的人):google.maps.count(调用次数),google.maps.time(调用时长),google.maps.exception(如果有异常的话,统计异常的次数)。0.01是sample rate,也就是每100次调用,我们只记录一次的数据(性能上的考虑)。
分享到: