gmond的目标是对同一局域网(LAN)内的大量机器进行测量数据的采集。gmond是用UDP发送消息的,因而是不可靠的。为最小化因丢失消息造成的影响,以及提供隐含的优先排序,gmond监控的每项测量数据都对采集间隔、时间/值的阈值有唯的设定。
采集间隔
定义了采集的频率,gmond按照这个频率对某项数据进行采集和处理。对某些常量数据,如机器CPU的核数,只采集一次。
值阈值
定义采集值和上次报告的值之间的绝对值差(absolutedifference),只有值的显著变化才会引发一条消息。
时间阈值
该阈值定义了两次报告测量值之间的最大时间间隔,而不管测量数据的值具体是多少。这个阈值是解决UDP的不可靠性的一种变通方案,提供了一种计算值的年龄的手段,如果自从我们上次收到报告以来,已经过去了一次或几次该國值的时间,则认为我们的当前测量值是过时的。
从高层来看,gmond对其监测的测量数据遵从下列步骤:
1.采集当前的测量数据值。
2.如果当前值和上次报告的值的绝对值差大于指定的值阈值,转步骤5。3.如果当前时间超过了发送测量数据的硬限制(hardlimit),转步骤5。
4.转步骤7。
5.发送测量数据的值,并保存用于下次比较(在步骤2中)。
6.把时间阈值加到当前时间上,作为下次发送测量数据的硬限制。
7.进人睡眠,时长为采集间隔。
8.转步骤1。
这种方式使得gmond只在测量数据发生显著变化时才发送消息,而且,前述的计算也加上了一个随机值,以减少网络争用。最后,对于数千台机器,测量数据的采集与发送要协调进行。
对降低测量数据采集的成本同样重要的是,将成本固定下来。最坏情况下,每次采集间隔的每次采集都发送一条消息,最好情况下,消息仅在指定的时间阈值过去之后发送。这个范围使你能够对测量数据采集建立一个固定的成本预算,当然,除非阈值有问题。
对于网络测量数据,要小心选择值國值。我在第一次把网络测量数据采集加到Ganglia上时,把默认的采集间隔设置得太短,值阈值也设置得太小,在我的笔记本电脑上没有注意到这种配置错误,在将Ganglia部署到大量的集群上的时候,这种错误就非常明显了。每个节点都开始发送网络测量数据更新,以响应其他节点的发送,Ganglia导致了一场巨大的网络风暴。希望你不会发生这种尴尬的事情。
Ganglial应有而没有的一个功能是测量数据的批量处理。你要是自己写测量数据采集系统,记住要支持这个功能。将测测量数据收集起来批量发送,既减少了发送的网络包数,也减少了带宽占用。例如,你发送的每个IPv4UDP包都包含一个14字节的以太网头部、一个20字节的P头部、一个8字节的UDP头部和一个4字节的以太网尾部。实际上这些数字还没考虑如填充、VLAN、IP选项、IPv6的差异等因素,但我们可以用这些数字做一个大概的计算。假设你发送的数据是32字节,发送10次更新,则需要10个78字节的包,总计780字节。批量发送的话,则只需要1个366字节的包,其中320字节用于测量数据。这个例子中,批量发送减少了90%的包,带宽减少了一半以上。批量发送的缺点是,一旦包丢失汇集与组织测量数据将会丢失多个数据,而不是一个。
如果一项测量数据对于一台机器是有价值的,则可能对所有机器都有价值,这一点对系统测量数据而言是对的,但对于应用而言则不一定对。如,采集MYSQL的测量数据,只对运行数据库的机器才有意义。但是,每分钟的负荷,则对于不论运行什么应用的机器而言,都是有意义的。
Ganglia元数据进程(gmetad)采集、汇集、存储一组机器的测量数据,这种汇总数据将通过数据采集的层次结构,传递给上游的gmetad。这种层次结构的代理模式能够创建很大的非中心化的测量数据采集重叠,这些重叠可以跨越一座校园或整个地球。
作为一个极端的例子,设想将美国的每台机器都连到一个大的测量数据采集重叠上,我们将有一个国家级的gmetad,这个gmetad从运行在每个州的50个授权gmetad中获取数据,每个州的gmetad从每个县级的gmetad中收集数据,而每个县级的gmetad从每个市级的gmetad中收集数据,等等。
这个例子中的根节点不会被美国的每台机器中的所有测量数据压垮,它只从每个州州获取汇总数据,然后生成全美国的汇总数据。所以,对于将50个数加在一起这样的运算,是不需要很强大的计算能力的。
Ganglia的Web前端通常安装在运行gretai的机器上上,Web前端将gmetad的数据进行可视化,你可以直观地测览,并在测量数据采集重叠中进行导航。例如,你可以通过根节点的gmetad查看全美国的汇总信息,以及每个州的数据源,然后在图上点击伊利诺伊州,进入感兴趣的数据。这种树状的测量数据值属于空间组件,除此之外,还有时间组件。伊利诺伊州的Web前端,查看详细信息。Ganglia:还让你可对图片进行放大和缩小,以找到Gmetad:将测量数据存储于RD数据库中,RRD数据库用于存储数值数据并生成历史报表。RD一个非常有用的特点是体积并不随着时间的增长而增长。RRD的每个内部档案库(archive)都有固定数量的“桶”,新数据到来后,更新所有相关的档案库,并丢弃陈旧的数据。对于一个简化的例子,你可以用24个桶对应于一天的24小时,另外的7个桶对应于一周的7天。要在不同时期中发现数据的趋势,RRD是一个理想的工具。将日时序数据和前述的层次代理模式结合起来,可以用于回答这样的问题:“对于全美国来说,过去一年CPU的利用率是一个什么样的趋势?”
尽管我希望如此,Ganglia却从来没有这样大范围地部署过。一个更为实际的例子是像Grid3群组这样的,2003年使用Ganglia,从数千台机器中采集测量数据,这些机器分布在美国和韩国的几十个站点,用于高等物理研究。这些为Grid3采集的测量数据嵌人其他系统,如Globus,让人们分享计算资源进行物理实验。
从大量机器中汇集不同时期的数据,对于容量规划也很有用。了解单台机器的CPU利用率为80%是有用的,但知道整个网站建设集群上个月的利用率为80%却更有价值。能够看到这种种“宏观图景”,对于计划硬件采购、发现处理流水线中的瓶颈、洞察Web运维的动态,都是非常有帮助的。
>>> 查看《怎么对集群测量进行隐含排序?》更多相关资讯 <<<
本文地址:http://www.phpweb.com.cn/news/html/3314.html