17.2 Chukwa架构
Chukwa有三个主要组成部分:客户端(Agent),它运行在每一个被监控的机器上,并且传送源数据到收集器(Collector)中;收集器(Collector)和分离解析器(Demux),收集器接受从Agent传来的数据,并且不断地将其写到HDFS中,而分离解析器则进行数据抽取并将其解析变换成有用的记录;HICC(Hadoop Infrastructure Care Center),其是一个门户样式的网页界面,用于数据的可视化。
图17-2为Chuwa的系统架构图。
图 17-2 Chuwa系统架构图
17.2.1 客户端及其数据模型
在Chukwa中,Agent的主要目的是:使内部进程通信协议能够兼容处理本地的日志文件。
随着分布式计算处理的开始或结束,分布存放的文件和套接字将会不断增加或减少,这种变化是需要被监控的,因此要在每一台机器上配置Agent。现在绝大多数的监控系统都要求通过特殊的协议传送数据,Chukwa也不例外,所以在Chukwa中,Agent不直接负责接收数据,取而代之的是一个可执行环境:提供可配置的承载数据模块(Adaptor)。这些Adaptor在文件系统或被监控的应用中的功能是读取数据,Adaptor的输出是一个逻辑上的比特流,单个数据流对应单个文件,或者在相应套接字上接收对应的数据包或一系列重复调用的UNIX程序。数据流被存储成序列块,每一个数据块由一些流级别的元数据(Stream-level metadata)加上一个数组比特构成。启动Adaptor可以通过UNIX命令来完成。Adaptor能够扫描目录,追踪新创建的文件。这样Adaptor便能够接收UDP消息,包括系统日志(Syslog),特别是可以不断地追踪日志,将日志更新到文件中。并且Adaptor是可以互相嵌套的,例如,一个Adaptor可以在内存中缓存来自另一个Adaptor的输出。在单个线程内运行所有的Adaptor,可以让管理员在资源受限的商业环境中实施一些必要的资源限制:内存的使用可以通过JVM堆的使用进行控制;CPU的使用可以通过进程优先级(Nice)控制;带宽的限制可以通过Agent进程协调,即设置它在网络中的最大传输速率,只要超过最大可利用的带宽,就在Agent进程中设置固定大小的队列,或者当Collector响应缓慢时,Collector会自动调节进程中Adaptor的工作。
Agent的主要工作是负责开始和停止Adaptors,并且通过网络传输数据。Agent支持行定位控制协议,方便程序对Agent控制。该协议包含的命令有:启动和停止Adaptor,以及查询它们的状态,也允许外部程序在开始读日志时重新配置Chukwa。Agent进程也将会定期查询Adaptor状态,并且存储Adaptor状态在检查点(Checkpoint)文件中,每一个Adaptor负责记录足够的状态以便能够在需要的时候完整地恢复原先的状态,Checkpoint只是包含状态,因此Checkpoint文件是很小的,一般每一个Adaptor的Checkpoint文件只有几百比特。
Agent和Adaptor会自动设置一些元数据,但是其中有两个元数据是需要用户自己定义的:集群名字和数据类型。集群名字被设置在etc/chukwa/chukwa-agent-conf.xml中,是在每一个进程当中的全局变量。数据类型描述了由Adaptor实例收集的数据类型,在启动实例时,它必须已经指定。下面的表17-1列举了块的元数据字段。
Adaptors需要以序列号(Sequence ID)作为参数,以便在崩溃后能重新恢复到之前的状态。在启动Adaptor时,通常会把序列号置为0,但是有时候也会为了其他的目的将序列号置为其他值,例如,只想追踪文件的下半部分。