今天小编想要给大家介绍一个开源集群监视项目——Ganglia,其主要的功能是用来监控系统的性能。大家对这个监控程序有什么了解的吗?不熟悉也没关系,在这里就来和小编一起来学习一下它的一些基础知识吧!
Ganglia 是UC Berkeley(加州大学伯克利分校)发起的一个开源监视项目,它的运行消耗非常少的系统资源,官方称目前已有2000节点的cluster。设计初衷就是要做好分布式集群的监控,监控层面包括资源层面和业务层面,资源层面包括cpu、memory、disk、IO、网络负载等。至于业务层面由于用户可以很方便的增加自定义的metric,因此可以用于做诸如服务性能、负载、出错率等的监控,例如某web服务的QPS、Http status错误率。此外,如果和NagiOS集成起来还可以在某指标超过一定阈值时触发相应的报警。
下图是Ganglia监控界面:
Ganglia组件
Ganglia 监控套件包括三个主要部分:gmond,gmetad,和网页接口,通常被称为ganglia-web。
gmond(Ganglia Monitor Daemon):运行在每个需要监控的节点上,通过UDP协议收集和发送数据(如处理器速度、内存使用量等)
gmetad(Ganglia Metadata Daemon):通过tcp协议从cluster抓取数据,并保持倒rrdtoo的数据库。
Ganglia-web :顾名思义,他应该安装在有gmetad运行的机器上,以便读取RRD文件。 集群是主机和度量数据的逻辑分组,比如数据库服务器,网页服务器,生产,测试,QA等,他们都是完全分开的,你需要为每个集群运行单独的gmond实例。
一般来说每个集群需要一个接收的gmond,每个网站需要一个gmetad。
Ganglia的结构
下列是官方网站的Ganglia结构图,在ClusterA、B、C中gmond进程将数据发送(单播或者多播)到某个或者多个gmond上(如果是单播就发生到确定的gmond上,如果是多播则每个gmond都可以接受cluster数据),gmetad.conf中配置了要监控的cluster(一个data_source配置就是一个cluster),gmetad进程将从配置的cluster抓取监控数据,并保持倒rrdtool数据库。
cluster内数据发送有两种方式:单播和多播:
单播要求配置cluster中收集数据的节点,这样所以gmond都发送数据到这台机器,然后gmetad从这台机器抓取监控数据。
多播配置一个广播地址(必须是D类),每台机器都发送数据到其它gmond进程,每个gmond进程都接受其它进程的数据,在gmetad中可以配置cluster内任何一个或者多个gmond(如果配置多个,其中一起机器挂掉会使用第二台)抓取监控数据。
Ganglia的优点
1.自动收集数据
集群内各个节点的信息收集可以通过ganglia系统自动的收集起来,这个收集是独立进行地。其通信性能都是经过良好设计和优化的。具体的机制是:周期性的将这些信息发送给gmond,这样信息就加入了ganglia监控系统。通过ganglia的监控机制完成监控数据的收集显示的功能。
2.图形界面
数据可以通过图形显示出来。通过登录Web服务器即可查看。目前可以通过该视图查看集群及单独节点的状态曲线。同时具有基本的排序机制,可以根据值降序或者升序排序。可以查看过去1小时 1天 1周 1年等时间段的状态曲线。
3.数据库rrdtool存储了历史数据
由于采用了rrd存储数据,这样我们不单可以查看当前的状态,还可以查看之前的状态历史,同时可以将metrics随时间的变化以曲线的方式变现表现出来。而单独的向文件写日志很难保存和方便地查看之前的历史记录。而且有可能使得日志文件很大。
Ganglia存在的问题
1.开销估计:网络 IO CPU
只运行gmond进程的节点开销很小,通常需要1m左右内存,cpu大概1%不到,同时gmond只把数据保存在内存中,因此io开销可以忽略。同时向其他节点单播本身的信息本身的网络压力也不会很大。因此对于只运行gmond的节点来说,开销很小。 如果采用了unicast模式,主要的开销就会在各节点的gmond进程向中央节点发送的udp数据带来的网络开销,此外gmond和gmetad的通信,web服务也在该中央节点上进行。这样主要的瓶颈就在中央节点上,其网络 IO CPU的压力都会很大。
2.使用的服务及端口以及依赖的库
Ganglia的gmond进程使用了udp进行单播,默认端口8649,同时还有负责tcp监控的端口8651 8652 8650也会被使用,这些端口需要在集群内部打开,这些使用的端口可以进行配置。另外apache也需要一个端口提供服务,这个端口会被从外部访问,默认是80。
3.同一个host的不同进程的相同Metirc可能混淆
由于ganglia本身是根据host+metric_name来区分不同的状态参数的,也就是它无法区分同一host内的不同进程相同的名称的状态变量。但是对于单纯的一个状态量,虽然可能是多个进程的状态,但对它来说只能看到一个名称,所以当多个进程同时向它报告具有同一个名称的状态的value时,它无法区分出进程间的不同。如果要区分它们,就需要加入一个命名机制区分它们。
以上这些知识点的学习,大家掌握了吗?如有问题可以留言小编哦。感谢大家的阅读,希望大家在阅读完这篇文章之后对学习Ganglia有所帮助。更多更全的IT学习网络课程尽在课课家教育网站,期待大家的到来。
上一篇:给大家简单谈谈LoRa无线技术
¥10500.00
¥5999.00
¥499.00
¥49.00
¥1888.00