前言
为什么需要监控集群,其实这个问题都不用谈了。成百上千台机器在哪里工作,如果不知道它们的工作状态,岂不是一件很虚的事情。还有,如果没有监控,你怎么评价你的程序是否高效,仅仅凭能够执行通过么?
监控软件的一些基本特点
到目前为止,我只学习过ganglia和zabbix,通过它们,我发现监控软件一般有以下基本特点:
- 从架构上讲,是分布式软件,主节点和从节点都会运行程序,主节点程序(以下称为server)负责收集从节点数据并分析展示,从节点程序(以下成为agent)负责采集本节点的状态信息。
- 如果节点不多,且都属于同一个地域,则一个server对应多个agent即可满足要求。
- 如果节点众多,监控地域不一,数据和网络开销较大,则server和agent之间,多加一个代理(proxy),代理替server进行所管理agent数据的收集,并向server汇报。
-
数据采集的工作模式一般分为:主动模式和被动模式 这是从agent的角度来看的,主动模式即agent主动上报数据,这样可以让server轻松一些。
- 采集节点数据有以下两种方式:
- 专用客户端采集,从节点运行专用程序获取本机状态数据
- 共用协议采集,即(server)利用SNMP或SSH等协议采集从节点数据
-
服务器端拿到采集的数据后,会以某种形式将数据存储起来(数据库或文本)。同时,这类软件还会准备web脚本或代码,我们可以将这些web脚本复制到http服务器的相关目录下。http服务器启动后,这些web脚本便会访问存储起来的数据,将结果以图形方式展现出来。以ganglia架构为例:
-
一般会带有报警功能,即如果某项指标大于设定的阈值,会触发邮件、短信和声音等动作。
-
一般可以自定义指标,只要符合接口规则,我们便可以采集我们想收集的个性化数据。
-
一般会为我们准备/etc/init.d下的启动脚本,我们只需将其复制到/etc/init.d下即可。
-
一般可以自定义视图的展示。
- server端本身也会安装agent程序,监控自己的运行情况。server程序本身不会收集指标数据,都是通过agent程序获取的。
我用过的一些监控软件
我目前主要用过ganglia和zabbix,总体来讲,安装过程都是:
-
配置防火墙,关闭selinux
-
server端
-
分别安装server端程序、httpd和数据库程序
源码安装,运行configure命令时,可以根据实际情况,通过参数添加一些特性。
- 拷贝web脚本到httpd服务器相关目录,并配置。
- server端脚本配置数据库程序路径,并对数据库做一定的初始化
-
对视图、指标等做个性化的修改
- agent端
- 安装agent程序
- 修改配置文件,指明server主机的ip
- 共有
- 配置日志文件的位置
ganglia
-
组成:gmetad gmond
-
拓扑模式:多播和单播
多播:也就是说集群内所有节点都收发指标数据,每个节点维护一个“内存数据库”。这样所有的节点都备份了其它节点的数据,gmetad节点不必轮询所有gmond节点。当主节点产生故障时,gmetad会迅速将主节点切换到另一节点,可避免单点故障。
-
采用rrdtool数据库存储监控数据,新的数据可以覆盖掉旧数据
zabbix
-
组成: zabbix-server,zabbix-agent,zabbix-proxy(可选)
-
zabbix-server
a central process of Zabbix software that performs monitoring, interacts with Zabbix proxies and agents, calculates triggers, sends notifications; a central repository of data
-
zabbix-agent
a process deployed on monitoring targets to actively monitor local resources and applications
-
zabbix-proxy
a process that may collect data on behalf of Zabbix server, taking some processing load off of the server
-
- 支持多种监控方式,除agent方式外,其他监控方式无需在被监控节点上安装额外的程序。
- 使用传统数据库存储监控数据,所以当数据量较大时,要有一定的性能优化措施
未完待续