CAT实时监控系统,是面向应用的监控系统,提供了应用性能、日志等监控,包括java的异常堆栈的监控。github地址:https://github.com/dianping/cat ,目前由美团点评监控团队进行维护。本文主要是对CAT中logviw(即:日志)存储设计的介绍。
1.介绍
首先看一下logview的结构:
图1
其中每一行,都代表程序中一段代码的耗时,如果有异常,异常堆栈也会被列出来。
对于上图的一条日志,我们称为一个logview,每个logview都会对应一个ID,我们称为logviewId,或者msgId
每个日志,都会生成一个唯一的msgId,用户在查看日志时,通过msgId来查询到具体的日志
2.msgId生成逻辑
每个日志,都会生成一个唯一的msgId,用户在查看日志时,通过msgId来查询到具体的日志
a. msgId组成
{domain}-{ip}-{hour}-{index} 示例:ShopWeb-0a010680-375030-2
CAT消息的MessageId格式如上,msgId一共分为四段
第一段是应用名shop-web。
第二段是当前这台机器的ip的16进制格式,01010680表示10.1.6.108。
第三段的375030,是系统当前时间除以小时得到的整点数。即:System.currentTimeMillis()/ONE_HOUR
第四段的2,是表示当前这个客户端在当前小时的顺序递增号。
b.msgId生成方法
CAT监控系统是面向应用的监控,每个应用(即:domain)会有很多机器,对于特定的一台机器,其domain、ip是固定的,hour跟随当前小时数进行变化,index就代表当前小时第几个日志。msgId是在客户端的每台机器生成的,生成后的msgId连同其对应的日志一起发送到监控系统服务端,服务端进行处理后,给用户提供查询展示。这样由每台机器进行生成msgId,保证了msgId的唯一性。
index就是简单的一个计数器,其初始值为0。