SODA瓶 之 Ganglia监控
在2015年上海开放数据应用(Shanghai Open Data Application, SODA)大赛过程中,OMNILab(Open Meta Nexus Innovation Lab)为进入复赛的参赛队伍免费提供了两个大数据平台的服务,包括 Spark 和 Vertica on OpenStack。Spark等服务采用Ganglia进行近实时监控,其简介、安装、配置等详见下文。
SODA瓶之 Vertica on OpenStack 请戳
Ganglia 简介
Ganglia 是一个由 UC Berkeley 发起的开源分布式监控系统,其具有低节点负载、高一致性、易可扩展性等特点,针对大规模设施,其能近实时地监控和收集大量系统指标数据。
Ganglia 主要由以下四个组件组成
- Gmond (Ganglia Monitoring Daemon): 安装于每台受监控的机器中,用于收集单节点信息。
- Gmetad (Ganglia Meta Daemon): 安装于监控主节点,用于收集所有来自 Gmond 和其他 Gmetad 的数据。
- RRD (Round Robin Database): 安装于监控主节点,用于存储数据,并能对数据按照时间序列进行可视化预处理。
- PHP Web Front-end: 安装于监控主节点,用于展现 RRD 数据库中的监控数据及其图形曲线。
Ganglia 的基础功能示意图如下所示。
每个受监控的主机通过 Gmond 进程收集各项系统性能指标(如 CPU、内存、硬盘、网络等等),然后将监控数据通过 UDP 包以单播或多播的形式发送给其他运行 Gmond 进程的主机。运行在主节点上的 Gmetad 进程通过 TCP 连接轮询数据源,收集来自各个受监控主机的监控数据,并将其存储到 RRD 数据库中。系统管理员就可以通过浏览器访问其网页前端 Gweb 来查看各项性能指标的图形曲线。
其网页前端展示监控数据的界面如下图所示。
Ganglia 示例安装和配置
本文以 Ubuntu 14.04 作为示例安装和配置的操作系统环境,Debian Linux 类似,RPM Linux 请参照详细安装说明。
安装前准备
所需的设备
- 一台主节点主机,用于安装 gmetad, gmond, gweb, rrd tool 等;
- 至少一台从节点主机,用于安装 gmond;
- 如果你想要真切体验一下网格模式,那么最好再有两台从节点主机。
在每台主机上创建一个具有 sudo 权限的用户 ganglia (推荐)。如果你不想创建一个具有 sudo 权限的用户 ganglia,可选择跳过创建用户,在配置文件中填 root (权限大,保证能顺利运行,但有潜在安全问题)或 nobody (权限小,不保证能顺利运行,安全系数高)。
首先利用 adduser
命令创建用户 ganglia
adduser ganglia
该命令将创建用户 ganglia 及其主目录和相应的组。接着,利用 visudo
命令赋予用户 sudo 权限
visudo
该命令将打开 /etc/sudoers
文件。在 User privilege specification
部分,为新创建的用户新加一行。
# User privilege specification
root ALL=(ALL:ALL) ALL
ganglia ALL=(ALL:ALL) ALL
保存文件并切换到新创建的用户
su ganglia
更新并升级系统安装包
sudo apt-get update && sudo apt-get -y upgrade
主节点安装
在主节点上,安装 Ganglia Monitor, RRDTool, Gmetad 和 Ganglia Web Front-end
sudo apt-get install -y ganglia-monitor rrdtool gmetad ganglia-webfrontend
在安装过程中,系统将询问是否重启 Apache,输入 yes.
将 Ganglia 网站前端的配置文件复制到 Apache site-enabled
目录中
sudo cp /etc/ganglia-webfrontend/apache.conf /etc/apache2/sites-enabled/ganglia.conf
你可以使用 Apache 的 .htaccess
文件设置网页的访问用户名和密码,如果不设置,那么网络上的所有人只要知道 URL 就可以访问 Ganglia 的网站,看到监控信息。
提示:本部分和从节点安装部分演示了名为 my_cluster 的单一集群简单配置。如果你想要设置网格和集群,你可以参考网格部分的配置。
通过编辑 Gmetad 配置文件来设置 Gmetad 进程收集数据的源地址和收集方式。
sudo vi /etc/ganglia/gmetad.conf
找到以 data_source
开头的行,如下所示
data_source "my cluster" localhost
编辑 data_source
所在行,设置集群名称、收集数据的频率(以秒为单位,不设置则默认每15秒轮询一次)、服务器的连接信息(IP 地址或者域名、端口)。如下示例中,数据源为 my_cluster
,从 localhost (即本机)每1分钟收集一次指标数据。你可以通过增加新的 data_source
行来创建任意多的集群。
data_source "my_cluster" 60 localhost
保存修改并退出。
接着,编辑 Gmond 配置文件。主节点也可以监控本身,即同时作为从节点。在 gmond.conf
文件中配置节点发送监控信息的目的地。
sudo vi /etc/ganglia/gmond.conf
在 cluster
部分,保证设置的名称同 gmetad.conf
中设置的集群名称相同,其他项的配置可填可不填,可以保持 unspecified
不变。
参数说明:owner
值指定了集群的管理员,便于联系。latlong
值为全球分布式集群设置经纬度坐标。url
值为一个链接,以提供关于集群的更多信息。
[...]
cluster {
name = "my_cluster" ## use the name from gmetad.conf
owner = "unspecified"
latlong = "unspecified"
url = "unspecified"
}
[...]
在 udp_send_channel
部分,插入一个新行 host = localhost
,表示信息将要发往的服务器。同时注释 mcast_join
行。
参数说明:mcast_join
值提供一个多播地址,但在本示例中,我们只需要将数据发往单一主机,所以这项配置不需要。如果你之后想要为该集群创建网格,那么需要配置该选项。
[...]
udp_send_channel {
#mcast_join = 239.2.11.71 ## comment out
host = localhost
port = 8649
ttl = 1
}
[...]
在 udp_recv_channel
部分,注释 mcast_join
和 bind
行。如果你之后想要将该集群加入到网格中,那么需要配置这些选项。
参数说明:bind
值提供一个本地地址绑定数据。但是由于该集群仅仅发送信息,所以不需要配置该选项。
[...]
udp_recv_channel {
#mcast_join = 239.2.11.71 ## comment out
port = 8649
#bind = 239.2.11.71 ## comment out
}
/* You can specify as many tcp_accept_channels as you like to share
an xml description of the state of the cluster */
tcp_accept_channel {
port = 8649
}
[...]
重启 Ganglia Monitor, Gmetad 和 Apache
sudo service ganglia-monitor restart && sudo service gmetad restart && sudo service apache2 restart
当第一次完成安装后,以后如果需要再次安装新的监控集群,可以考虑采用 Shell 脚本的形式,如下为安装主节点的 Shell 脚本样例。
# Install Ganglia Monitor, RRDtool, Gmetad and the Ganglia web front end
sudo apt-get install -y ganglia-monitor rrdtool gmetad ganglia-webfrontend
# Set up the online graphical dashboard by copying the Ganglia web front end
# configuration file to the Apache sites-enabled folder
sudo cp /etc/ganglia-webfrontend/apache.conf /etc/apache2/sites-enabled/ganglia.conf
# config gmetad and gmond
gmetad_conf=./gmetad.conf
gmond_conf=./gmond.conf
if [ -f "${gmetad_conf}" ]
then
sudo mv /etc/ganglia/gmetad.conf /etc/ganglia/gmetad.conf.bak
sudo cp ${gmetad_conf} /etc/ganglia/gmetad.conf
fi
if [ -f "${gmond_conf}" ]
then
sudo mv /etc/ganglia/gmond.conf /etc/ganglia/gmond.conf.bak
sudo cp ${gmond_conf} /etc/ganglia/gmond.conf
fi
# restart all the services related to ganglia
sudo service ganglia-monitor restart && sudo service gmetad restart && sudo service apache2 restart
Web 界面说明
如果你按照以上教程完成了主节点的安装和配置,那么现在已经可以通过 http://ip_address/ganglia
进行访问了,别忘了将 ip_address 替换为你集群主节点的 IP 地址。
Ganglia 网站首页展示了监控节点概览信息的网格视图,按照以上配置,现在应该只有一台主机 localhost
首页上的主标签可以查看指定时间段或自定义时间段的数据。还可以通过右上角的 Get Fresh Data 按钮手动刷新数据。
在时间范围选择标签下,有一个下拉菜单,用来选择节点,目前 localhost 是唯一可以选择的节点。
选择了 localhost 节点后,可以查看 localhost 节点各项监测指标数据。包括负载、内存、CPU、网络等。
点击右上角的 Node View 按钮可以查看节点的软硬件信息。
首页展示的是集群概览信息,当点击任意一个曲线图,可以看到该项指标数据按照时间递增,从一小时到一年的数据,通过点击曲线图上 CSV 或 JSON 的小按钮,可以导出相应格式的数据。
当集群的节点数不断增长,在首页找到相应节点会比较费时费力,这时可以通过搜索标签来寻找特定的主机或测量指标,搜索支持正则表达式。首页还可以进行主机间的比较,创建自定义聚合曲线等等。
从节点安装
在 my cluster
集群的从节点中,安装 Ganglia Monitor
sudo apt-get install -y ganglia-monitor
编辑 Gmond 配置文件,使其能够监控本节点。
sudo vi /etc/ganglia/gmond.conf
跟主节点类似,在 cluster
部分更新集群名称,使其和主节点配置的集群名称一致。
[...]
cluster {
name = "my cluster" ## Cluster name
owner = "unspecified"
latlong = "unspecified"
url = "unspecified"
[...]
在 udp_send_channel
部分新增一行 host,配置 Ganglia 主节点的 IP 地址 (如10.0.0.1)。注释 mcast_join
行。
[...]
udp_send_channel {
#mcast_join = 239.2.11.71 ## Comment
host = 10.0.0.1 ## IP address of master node
port = 8649
ttl = 1
}
[...]
用 /* ... */
的语法注释整个 udp_recv_channel
部分,使得该服务器不会接收任何信息。
[...]
/* You can specify as many udp_recv_channels as you like as well.
udp_recv_channel {
mcast_join = 239.2.11.71
port = 8649
bind = 239.2.11.71
}
*/
[...]
重启 Ganglia monitoring 服务
sudo service ganglia-monitor restart
等几分钟之后重新加载页面,新的节点将自动出现在集群中。
在其他想要监控的从节点中重复这些步骤即可。同样的,若再次安装从节点,可采用 Shell 脚本形式,相比于主节点,更为简洁。
# Install Ganglia Monitor
sudo apt-get install -y ganglia-monitor
# config gmond
gmond_conf=./gmond.conf
if [ -f "${gmond_conf}" ]
then
sudo mv /etc/ganglia/gmond.conf /etc/ganglia/gmond.conf.bak
sudo cp ${gmond_conf} /etc/ganglia/gmond.conf
fi
# restart gmond
sudo service ganglia-monitor restart
网格
网格可以将多台主机按照某种分类标准组织成多个集群。比如有多个集群中都有 MySQL 数据库作为不同应用的后台数据库,用网格就可以将这些运行数据库的服务器组织成一个集群来集中监控 MySQL 服务器,比较其性能等。又比如公司的服务器遍布多地,那么就可以按照地理位置将其分为几个集群。
创建网格,需要编辑 Ganglia 主节点上的 /etc/ganglia/gmetad.conf
配置文件。
注意 每一个 Gmetad 进程只能创建一个网格,如果你需要创建多个网格,需要在多台主机上安装 Gmetad。在本示例中,我们将网格名称设置为 OMNILab
sudo vi /etc/ganglia/gmetad.conf
找到配置文件中 gridname 那一行,默认情况下,它被注释掉了,删去其前面的注释井号,并将后面的 MyGrid
改为需要设置的网格名称。
# The name of this Grid. All the data sources above will be wrapped in a GRID
# tag with this name.
# default: unspecified
# gridname "MyGrid"
比如,我们将其设置为 OMNILab
gridname "OMNILab"
设置完网格名称之后,需要为网格中每一个集群设置一个 data_source
,填写集群名称、需轮询的相应主机和端口信息。因为集群是通过端口来区分的,所以每一行 data_source
或每一个集群 应该使用不同的端口号。
举例来说,以下在网格 OMNILab 中设置了两个集群,分别称为 Servers 和 Databases,集群 Servers 中的节点都使用端口8661,集群 Databases 中的节点都使用端口8662。
data_source "Servers" localhost:8661 10.0.0.1:8661
data_source "Databases" 10.0.1.1:8662 10.0.2.1:8662
然后在 Gmetad 配置文件中设置的每个节点编辑其 Gmond 配置文件
sudo vi /etc/ganglia/gmond.conf
更新 cluster 部分的 name
值,使其跟 Gmatad 配置文件中配置的相同。
/* If a cluster attribute is specified, then all gmond hosts are wrapped inside
* of a <CLUSTER> tag. If you do not specify a cluster tag, then all <HOSTS> will
* NOT be wrapped inside of a <CLUSTER> tag. */
cluster {
name = "Databases"
owner = "unspecified"
latlong = "unspecified"
url = "unspecified"
}
跟之前的不同是,不需要再注释 mcast_join
所在行。需要设置 mcast_join
多播地址,更改端口号,端口号跟 Gmetad 中设置的相同。
注意:如果一个内网集群中的主机不在同一个子网内,其路由应支持多播转发(尤其是二层进行了隔离),否则将无法互相收到多播信息。
udp_send_channel
部分设置如下,因为是 Databases 集群,所以端口号是8662
udp_send_channel {
mcast_join = 239.2.11.71
port = 8662
ttl = 1
}
udp_recv_channel
部分设置如下,同样设置其多播地址,更新其端口号。
udp_recv_channel {
mcast_join = 239.2.11.71
port = 8662
bind = 239.2.11.71
}
最后是 tcp_accept_channel
部分,设置相应的端口号。
tcp_accept_channel {
port = 8662
}
在每个节点上都重启 Ganglia Monitor 服务
sudo service ganglia-monitor restart
在主节点上重启 Ganglia Monitor, Gmetad 和 Apache 服务
sudo service ganglia-monitor restart && sudo service gmetad restart && sudo service apache2 restart
重启完成后,稍微等待几分钟,在网页界面上,你将看到你的网格名称,下拉菜单可选择查看哪个集群。
Ganglia 详细安装说明
gmond
gmond (Ganglia Monitoring Daemon) 是一种轻量级服务,安装在每台需要收集指标数据的节点主机上。gmond 在每台主机上完成实际意义上的指标数据收集工作,并通过侦听/通告协议和集群内其他节点共享数据。使用 gmond 可以很容易收集很多系统指标数据,如 CPU、内存、磁盘、网络和活跃进程等数据。
大多数现行Linux发行版都可以使用以二进制格式预包装的Ganglia组件。下面介绍两种最流行的Linux发行版:Debian Linux 和 RPM Linux
Debian Linux (如 Ubuntu)
在Debian Linux上安装gmond时请执行
user@host:$ sudo apt-get install ganglia-monitor
RPM Linux (如 CentOS)
在RPM Linux上则有所不同,有些发行版的Ganglia安装包位于其基础软件库中,而有些发行版需要通过专门软件包来获取Ganglia的安装包,如Red Hat和CentOS项目上的EPEL(Extra Packages for Enterprise Linux)。可以通过yum search命令搜索在本地软件库中是否有gmond安装包:
user@host:$ yum search ganglia-gmond
如果显示搜索失败,可能是当前PRM发行版中没有Ganglia安装包。Red Hat和CentOS用户可以从EPEL资源库中安装Ganglia。首先添加EPEL资源库,其版本可能会不断更新,请选择较新的版本,以下命令以CentOS 6当前最新EPEL资源库为例。
# install wget
sudo yum install wget
# rpm install EPEL
wget -O ./epel-release-6-8.noarch.rpm https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
sudo rpm -Uvh ./epel-release-6-8.noarch.rpm
然后安装gmond,输入命令:
sudo yum install -y ganglia-gmond
gmetad
gmetad (Gmetad Meta Daemon) 是一种从其他 gmetad 或 gmond 源收集指标数据,并将其以 RRD 格式存储到磁盘上的服务。gmetad 为从主机组收集的特定指标信息提供了简单的查询机制,并支持分级授权,使得创建联合监测域成为可能。
除了需要额外安装RRDTool外,在Linux上安装gmetad几乎和安装gmond相同。RRDTool用于存储和显示从其他gmetad或gmond源收集的时间序列数据。
与安装gmond一样,推荐采用Linux发行版软件库中预打包好的二进制包安装Ganglia组件。
Debian Linux
在Debian Linux上安装gmetad
user@host:$ sudo apt-get install gmetad
RPM Linux
如果本地软件库不提供gmetad,参考安装gmond部分安装EPEL后再安装gmetad
user@host:$ sudo yum install ganglia-gmetad
gweb
gweb (Ganglia Web) 是一种利用浏览器显示 gmetad 所存储数据的 PHP 前端。 用户在 Web 界面中可以看到以图表方式展现的各项指标数据。便于在收集多种不同指标数据后,评估集群的运行状态。
从Ganglia 3.4.0开始Web接口是一个独立的发布包,其源代码库也是独立的。gweb发行周期和版本号与gmond和gmetad守护进程的发行周期和版本号不再一致。
gweb 3.4.0支持gmond/gmetad 3.4.x及以上版本;gweb的未来版本可能需要与gmond/gmetad的未来版本相匹配,所以尽量安装最新稳定版。建议在安装或更新前查看安装文档,以获得更多确切信息。
大部分Linux发行版在安装gweb时会检查是否满足软件需求,并将不满足的先安装好,但也有可能出错。建议在进行gweb安装和配置前,先检查是否已经满足一下需求(当然也可以在安装完,若出现问题再纠正):
- Apache Web Server
- PHP 5.2及以上版本
- PHP JSON扩展的安装和启用
Debian Linux
在Debian Linux上安装gweb
user@host:$ sudo apt-get install ganglia-webfrontend
若安装完发现不能正常运行,或没有满足需求,则需要进行如下安装和配置(以下基于gweb 3.4.x及更新版本,并不适用于所有版本,请根据相应版本进行调整)
root@host:# apt-get install apache2 php5 php5-json
可能还需要启动PHP JSON模块,执行如下命令:
root@host:# grep ^extension=json.so /etc/php/conf.d/json.ini
如果该模块不能运行,请通过下列命令使其运行:
root@host:# echo 'extension=json.so' >> /etc/php5/conf.d/json.ini
当然也可以通过源码进行安装gweb,可以从官网下载最新版本的gweb (http://ganglia.info/?page_id=66),解压并编译Makefile来安装gweb。
root@host:# tar -xvzf ganglia-web-major.minor-release.tar.gz
root@host:# cd ganglia-web-major.minor.release
编译Makefile并设置DESTDIR和APACHE_USER。在Debian Linux上,默认设置为:
# Location where gweb should be installed to
DESTDIR = /var/www/html/ganglia
APACHE_USER = www-data
gweb就可以使用了 (http://ip_address/ganglia/),用户可以将其改为任意名字。最后,运行下列命令:
root@host:# make install
如果没有显示错误提示,那么说明gweb安装成功。
RPM Linux
在RPM Linux上安装gweb
user@host:$ sudo yum install ganglia-web
若安装后发现不能正常运行,或没有满足需求,则类似于Debian Linux发行版,安装Apache和PHP 5
root@host:# yum install httpd php
同样需要启用PHP的JSON扩展,JSON已经包含在PHP 5.2及以上版本中。通过检查/etc/php.d/json.ini文件来检查JSON扩展的状态,如果已经启用JSON扩展,在该文件中应该包含类似以下语句的内容:
extension=json.ini
下载最新版本的gweb (http://ganglia.info/?page_id=66),然后编译Makefile来安装gweb:
root@host:# tar -xvzf ganglia-web-major.minor-release.tar.gz
root@host:# cd ganglia-web-major.minor.release
编译Makefile并设置变量DESTDIR和APACHE_USER。在RPM Linux上,默认设置为:
# Location where gweb should be installed to
DESTDIR = /var/www/html/ganglia
APACHE_USER = apache
gweb就可以使用了(http://ip_address/ganglia/),用户可以将其改为任意其他名称。最后,运行下列命令:
root@host:# make install
如果没有显示错误提示,那么说明gweb安装成功。
Ganglia 详细配置说明
gmond
gmond安装在每台需要监测的主机上,通过与主机操作系统交互以获取指标数据,并与同一集群内的其他主机共享数据。集群内的每个gmond已知同一集群内其他主机所收集的数据,并默认向任意连接gmond端口的客户端提供整个集群状态的XML格式的dump文件。
gmond 拓扑
gmond的默认拓扑为多播模式,也就是说集群内所有节点都收发指标数据,每个节点维护一个内存数据库——以哈希表的形式存储集群内所有节点的指标数据。
gmond内部的发送和接收两部分互不相连,即gmond自身并不交互信息,而只是和网络进行交互。指标模块收集的本地数据通过发送部分直接传送到网络,而接收部分的内部数据库只存储从网络中收集的指标数据。
这种拓扑对大多数情况已经足够,但是在某些情形下需要指定一些特定接收者,而不允许所有节点都接收(这样会浪费CPU资源)所有其它节点的指标数据。
“单发”节点的使用可以消除大型集群的运行开销。单发和单收参数的出现使得一些gmond节点可以充当其它gmond节点的专用汇聚器和中继器。单收指的是那些不传递数据的节点,它甚至不收集本节点的指标数据,但是却汇聚集群内其他gmond的指标数据。单发指的是那些不接收任何网络中指标数据,也不侦听多播成员状态信息的节点,只要它不同时是单收节点,就可以继续为其他侦听节点发送指标数据。
多播并不是所有拓扑所必需的。在多播不适用的情况下,这种单发/单收拓扑可以使用UDP单播来实现。
更进一步,可以将单发/单收拓扑和默认拓扑混合,创建一种更适合特定情形的系统结构。所需拓扑要求是:
- 至少存在一个收集集群内所有节点指标数据的gmond;
- gmetad必须周期性轮询保存整个集群状态的gmond。
实际上,不配置任何多播连接的节点未必是单收节点,可以使用地址127.0.0.1配置这些节点向自身发送指标数据,从而在当地保存自身的指标数据。这样就可以在任意gmond节点,使用TCP探针得到一个存有自身代理状态的XML文件,便于定位故障。
gmond 配置文件
运行下列命令可以生成gmond默认配置文件:
user@host:$ gmond -t
配置文件由大括号括起来的几个section组成。这些section可以粗略划分为两个逻辑分类。第一类中的section处理主机和集群的配置;第二类中的section处理指标数据收集和调度的特定问题。所有section名和属性不区分大小写,例如下列属性是定价的:
name NAME Name
有些section是可选的,而有些则是必需的;有些section在配置文件中可能多次出现,而有些section可能只出现一次;有些section还可能包括subsection.
在需要大型复杂配置的情况下,include指令可以将gmond.conf文件划分为多个文件。include指令支持typeglob的使用。例如下列命令表示gmond可以加载/etc/ganglia/conf.d/中所有以 .conf 结尾的文件:
include('/etc/ganglia/conf.d/*.conf')
配置文件由第三方API——libconfuse进行语法分析。一般规则是用于libconfuse文件格式。尤其是,在表示布尔值时,可以使用yes、true和on表示正值,用no、false和off表示负值。布尔值不区分大小写。
gmetad
gmetad(Ganglia Meta Daemon)是一种安装在主机上用来收集和汇聚gmond所收集的指标数据的守护进程。gmetad默认使用RRD文件收集和汇聚指标数据,然而也可以通过配置gmetad将指标数据转送到诸如Graphite的外部系统。
gmetad通过TCP端口8051侦听进程gmetad连接,并且向授权主机提供XML格式的网格状态。gmetad也通过TCP端口8652对交互式请求作出应答。这种交互式功能不仅可以看到网格状态XML树的总体结构,也可以看到简单的局部内容。gweb使用这种交互式查询方式来表示那些不适合RRD文件(如OS版本)的信息。
gmetad 拓扑
最简单的gmetad拓扑结构为一个gmetad进程轮询一个或多个gmond。
冗余性或高可用性是系统的一项基本要求。可以通过多个gmetad轮询同一集群内的多个gmond。gmetad只有在不能成功轮询集群中某一节点时才会轮询另一节点,多个gmetad总是处在轮询状态(多活cluster方式)。
gmetad并不局限于轮询gmond,gmetad也可以通过轮询另外的gmetad来创建层次化的gmetad结构。
gmetad默认将指标数据直接写入文件系统上的RRD文件。在有I/O限制的大型系统中,rrdcached充当gmetad和RRD文件之间的缓存。
gmetad 配置文件
gmetad配置文件gmetad.conf由单行属性及相应值组成。属性名不区分大小写,但是值区分大小写。
除少量必需属性外,其他属性均为可选。有些属性可能会多次出现在配置文件中,有些只能出现一次。
gweb
在Ganglia的三种守护进程中,gweb是最容易配置的,也是需要配置最少就能工作的守护进程。实际上,无需改变gweb的任何默认配置,gweb就可以启动并运行功能齐全的Web客户端。
Apache 虚拟主机配置
请参照 http://httpd.apache.org/docs/ 中相应版本的配置。
gweb 配置文件
gweb是由conf.php文件进行配置的,其实该文件重写并扩展了conf_default.php中默认配置。conf.php位于Web根目录下。
安装配置完成后的工作
启动进程
各个组件进程的启动没有必然的先后顺序,但如果按照以下顺序启动,则元数据重传至UDP汇聚节点将不会出现等待时延,而且用户也不会在Web服务器上看到错误页面和不完整的数据。
- 如果使用UDP单播拓扑,首先启动UDP汇聚节点,以确保它在其他节点首次传输元数据时处于侦听状态;
- 启动所有其它gmond程序;
- 如果使用rrdcached,启动所有rrdcached程序;
- 启动层次化结构中最低级别的gmetad程序;
- 按照层次顺序启动其他所有的gmetad程序;
- 启动Apache网络服务器(Web服务器应在gmetad之后启动,否则PHP脚本连接不到gmetad,用户将会看到端口错误)。
验证安装
gmond和gmetad都通过TCP socket侦听入站连接。为了检查gmond是否在指定的主机上工作,telnet到gmond的TCP端口
user@host:$ telnet localhost 8649
或者可以使用netstat或tcpdump命令来查看连接状态和收发包情况,如
user@host:$ netstat -aln | grep tcp
user@host:$ netstat -aln | grep 8649
user@host:$ tcpdump -i eth0 | grep TCP
如果安装正确,telnet后gmond会输出XML格式的指标数据作为应答。如果gmond是单发或者单收节点,它会返回一个仅携带CLUSTER标识符的空XML文档。检查gmetad可以通过如下指令telnet:
user@host:$ telnet localhost 8651
正常情况下的gmetad会输出XML格式的指标数据。
防火墙
当Ganglia的安装跨越网络中多个子网时,防火墙问题就会变得非常普遍。以下是各个守护进程的防火墙需求,可以帮助用户避免守护进程间的互通问题。
- gmond默认使用多播,如果使用多播,必须在中间防火墙和路由器中开启IGMP协议;如果无法开启,则推荐使用单播。如果gmond主机和其他主机通信时必须穿过防火墙,那么通信双向都应该允许UDP 8649端口。
- 默认情况下gmond通过TCP 8649侦听gmetad连接。如果gmetad必须经过防火墙才能到达某些gmond节点,那么需要允许TCP 8649入站至每个集群的某些节点。
- 默认情况下gmetad通过TCP 8651和8652侦听连接。前者类似于gmond的8649端口,而后者是传送特定查询的“交互式查询”端口。这些端口都为gweb所用,而gweb通常与gmetad安装在同一台主机上。所以,除非使用某些高级集成特性(如与Nagios集成)或使用自定义脚本查询gmetad,gmetad都不需要配置防火墙ACL。
- gweb运行在Web服务器上,通常通过端口80和443(如果开启SSL)进行侦听。如果gweb服务器与终端用户被防火墙隔离,那么要允许TCP 80和443(如果开启SSL)与gweb服务器相连接。
- 如果Ganglia安装使用了sFlow聚合器,并且sFlow聚合器必须通过防火墙才能到达gmond侦听器,那么需要允许UDP 6343与gmond侦听器相连接。
关于Vertica的介绍、部署、测试及监控请参考SODA瓶 之 Vertica on OpenStack
参考资料
[1] Massie, Matt, et al. Monitoring with Ganglia. “ O’Reilly Media, Inc.”, 2012.