3.1 日志生成和格式化
由于很多系统本身并没有日志模块,或者一些语言本身没有自动化日志库,所以我们很难收集到程序本身的运行情况,针对不同的系统,我们需要采用一些特定的技术手段,收集到程序运行时的输出信息,收集到程序的运行情况,大到某个模块的运行状态,小到某个方法的运行参数,运行时间,所以客户端针对不同的操作系统,针对不同的语言,提供了类库和插件,收集到这些信息。
在收集到这些信息以后,根据日志的类型,将日志格式化为标准日志格式,主要包括
日志类型:主要反应这条日志的类型是信息(I)、警告(W)还是错误(E)信息
产生时间:记录产生此条日志的行为发生的日期和时间
模块信息:记录产生这条信息的应用程序信息,模块名称
主机信息:记录了运行该模块的主机名称或者是IP地址
返回码:返回码就是HTTP返回码,可以看出此次请求的响应情况
访问IP:记录下了,此次访问行为的IP地址
响应时间:记录了此次访问行为的响应时间,可以很方便统计系统的效率
在将信息标准化为日志格式以后,客户端还负责将日志发送到中央服务器的服务地址,以便于后续处理和持久化及相关功能。
3.2 日志收集
客户端将日志发送到服务端以后,服务端根据配置信息,做两种不同的处理,分别是将日志持久化在指定的文件系统中,或者发送到其他的二级服务端中,其他服务端递归的作出相应处理,这部分细节,在后面的论述中,将详细说明。源:自~751·论`文'网·www.751com.cn/
3.3 日志持久化
日志持久化主要依靠的本地文件系统和分布式文件系统。
在系统日志量不大的情况下,可以简单的使用本地的文件系统,这样的好处就是,可以保证在读取日志信息的时候,不会因为信息分散存放在不同的节点上,而增加合并的代价,同时使得系统架构简单,可用性高,但是问题就是存储的日志量有限,而且多个应用同时访问日志的时候,会给单点的网络和磁盘造成较大的负担,使得机器性能下降。
为了应对这种情况,当日志量很大,访问量很大的时候,我们就必须从软件架构方面,基础设施方面下手,解决这个问题了,所以我们设计了一个可以实现简单集群的服务器框架,同时底层基础设施可以使用基于网络的DFS(分布式文件系统),将日志分布式的存储在不同的节点上,设计统一的访问接口,使得上层使用上和访问本地单机文件系统基本无差别,屏蔽上层对于下层结构的依赖。