每个大型系统都需要一个完备的监控体系,比如大宝(sodme)近期就在他的关于网游服务器运营的一些基础设施 中提到
一个正规的,商业的网游服务器,我想,最起码具备以下几方面的基础设施:
1.程序内的性能,安全,内存等的监控体系.
这套体系,不仅仅包括了日志记录,也包括了故障定位,紧急报警等相应的运营支持……
我在几个月前整理 google talk server 架构介绍 中也有类似描述。
7. 在服务器增加profile/monitor机制,包括配置文件,资源状况, 日志, 可以做离线分析。
这样某个服务器发现问题,首先去看 monitor console
profile/monitor不是侵入式的,不是通过在服务器程序嵌入代码实现。
大型系统通常有多台服务器组成,所以监控体系通常是分布式汇报,统一处理,而不用人工去每台服务器查看一下。而这个“分布式汇报,统一处理”的流程目前业界并没有非常成熟的工具来自动完成。而最近发现 facebook 开源的 Scribe 已经实现了这个功能,由于 facebook 每天要 log 上百亿条级别的信息(也就是每秒log上百万条的信息!),因此它对于这样一个工具的需求比其他公司更为强烈,也没有其他现成的产品能够满足它这种疯狂的需求,因此它只好自己做了一个。
Scribe 对于中心服务器没有high availability的依赖,当中心服务器不可用时候,所有的信息是log在本地,当中心服务器可用之后,本地保存的信息又会同步到服务器上。
Scribe 本身是由 non-blocking C++ 实现,由于它用的是 facebook 另外一个 Thrift 框架, Thrift 在我的理解就是一个高效的跨语言 rpc 框架。所以它可以支持通过 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, and OCaml 给服务器汇报。但Scribe下载后的包本身带的例子和配置基本上都是 Python 的。其他语言怎么调用可能还需要自行摸索一下。
Thrift 是优点,但毕竟还是要下一步花时间熟悉一下才会使用。如果 Scribe 是 RESTful 的话,我想我的Scribe系统已经可以跑起来了。