Ubuntu14.04上的Ganglia简介
介绍
Ganglia 是一个可扩展的分布式监控系统。 它可以很好地扩展大量服务器,并且对于近乎实时地查看性能指标非常有用。
在后端,Ganglia 由以下组件组成:
- Gmond(Ganglia监控守护进程):一个收集节点信息的小服务。 它安装在您要监控的每台服务器上。
- Gmetad(Ganglia 元守护程序): 主节点 上的守护程序,它从所有 Gmond 守护程序(和其他 Gmetad 守护程序,如果适用)收集数据。
- RRD(Round Robin Database)工具:主节点上的一个工具,用于按时间序列存储Ganglia的数据和可视化。
- PHP Web 前端: 主节点 上的 Web 界面,显示来自 RRD 工具中数据的图表和指标。
基本上,您要监控的每个节点(服务器)都安装了 Gmond。 每个节点使用 Gmond 将数据发送到运行 Gmetad 的单个 主节点 ,该节点收集所有节点数据并将其发送到 RRD 工具进行存储。 然后,您可以借助 PHP 脚本和 Apache 在 Web 浏览器中查看数据。
这是一个运行中的 Ganglia 网格图,主节点显示为运行 Gmetad 守护程序的 Ganglia 服务器,其他节点显示为运行 Gmond 守护程序的连接服务器:
当您使用 Web 界面查看监控数据时,数据会按多个级别进行组织。 Ganglia 将 节点 组织成 集群 ,它们是一组相似的节点。 在更高的层次上,簇的集合也可以被组织成 grids。 当您登录 Web 界面时,您会看到该组织。
在本文中,我们将首先设置一个名为 my cluster 的集群,它有两个节点。 稍后,我们将建立一个名为 London 的单个网格,其中包含两个集群,Servers 和 Databases。 这些示例将显示每个集群中的两个节点。
先决条件
你会需要:
- 一个运行 Ubuntu 14.04 的主节点 Droplet。 这是您将用来查看所有监控数据的节点。
- 至少要监控一个额外的节点,运行 Ubuntu 14.04
- 如果您想完全匹配网格示例,您应该再有两个节点运行 Ubuntu 14.04。 但是,您可以在每个集群上仅使用一个节点轻松完成本教程。
在每个 Droplet 上创建一个 sudo 用户。 首先,使用 adduser
命令创建用户,将用户名替换为您要使用的名称。
adduser username
这将创建用户和适当的主目录和组。 系统将提示您为新用户设置密码并确认密码。 您还将被提示输入用户信息。 确认用户信息以创建用户。
接下来,使用 visudo
命令授予用户 sudo 权限。
visudo
这将打开 /etc/sudoers
文件。 在 User privilege specification
部分,为创建的用户添加另一行,使其看起来像这样(使用您选择的用户名而不是 username
):
# User privilege specification root ALL=(ALL:ALL) ALL username ALL=(ALL:ALL) ALL
保存文件并切换到新用户。
su - username
更新和升级系统包。
sudo apt-get update && sudo apt-get -y upgrade
安装
在主节点上,安装 Ganglia 监视器、RRDtool、Gmetad 和 Ganglia Web 前端。
sudo apt-get install -y ganglia-monitor rrdtool gmetad ganglia-webfrontend
在安装过程中,系统会要求您重新启动 Apache。 选择是。 根据您的系统,您可能会被询问两次。 再次选择是。
通过将 Ganglia Web 前端配置文件复制到 Apache sites-enabled
文件夹来设置在线图形仪表板。
sudo cp /etc/ganglia-webfrontend/apache.conf /etc/apache2/sites-enabled/ganglia.conf
可选:您可能希望 密码保护 此站点以提高安全性。 否则,它将对 Internet 开放,您可能不希望公开您的服务器配置和 IP 地址。
注意:本部分和 客户端安装 部分显示了一个更简单的设置,涉及一个名为 my cluster 的集群。 如果您想立即设置网格和两个集群,您可能还需要参考 Grids 部分中的设置。
编辑 Gmetad 配置文件以设置您的集群。 此文件配置 Getad 守护程序将在何处以及如何收集数据。
sudo vi /etc/ganglia/gmetad.conf
找到以data_source
开头的那一行,如下图:
data_source "my cluster" localhost
编辑 data_source
行以列出集群的名称、以秒为单位的数据收集频率以及服务器的连接信息。 在下面的示例中,数据源称为 my cluster
,它每分钟从 localhost(本身)收集一次指标。 您可以添加更多 data_source
行来创建任意数量的集群。
data_source "my cluster" 60 localhost
保存您的更改。
接下来,编辑 Gmond 配置文件。 即使这是主节点,我们也将其设置为“我的集群”集群中的第一个节点进行监控。 gmond.conf
文件配置节点发送其信息的位置。
sudo vi /etc/ganglia/gmond.conf
在 cluster
部分中,确保将名称设置为与 gmetad.conf
文件中设置的名称相同,在本示例中为 my cluster
。 其余字段是可选的,可以保留为 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
网页界面
现在应该在 http://ip-address/ganglia 上设置和访问 Ganglia。
主页显示网格视图,它是受监控节点的概览。 现在应该只有一个:localhost。
主选项卡允许您查看来自设置和自定义时间增量的数据。 您也可以通过点击右上角的Get Fresh Data按钮手动刷新数据。
在时间范围选择下方,您可以从标记为 的下拉菜单中选择特定节点–选择节点。 现在,localhost 应该是您看到的唯一节点。
从列表中选择 localhost 以查看特定于 localhost 节点的信息。 由于 localhost 是唯一被监控的节点,因此 localhost 节点页面和主选项卡上的信息将是相同的。
从这里,您还可以单击右上角的 Node View 按钮来查看有关节点的上下文信息。
主页的其余部分显示节点集群的摘要。 单击任何图表以查看从一小时到一年的各种时间增量的详细信息,以及以 CSV 或 JSON 格式导出图表数据。
随着您的节点增长并且在主页上查看它们变得困难,您可以使用搜索选项卡使用正则表达式查找特定的主机或指标。 您还可以比较主机、创建自定义聚合图等。
客户端安装
在 my cluster 集群中要监控的第二个节点上,安装 Ganglia 监控器。
sudo apt-get install -y ganglia-monitor
编辑用于监控节点的 Gmond 配置文件。
sudo vi /etc/ganglia/gmond.conf
就像我们在主节点上所做的那样,更新 cluster
部分中的集群名称(本例中为 my cluster
),使其与主节点上的名称匹配。
[...] cluster { name = "my cluster" ## Cluster name owner = "unspecified" latlong = "unspecified" url = "unspecified" [...]
在 host
的 udp_send_channel
块中添加一行,这应该是您的主 Ganglia 节点的 IP 地址(例如 1.1.1.1
)。 注释掉 mcast_join
行。
[...] udp_send_channel { #mcast_join = 239.2.11.71 ## Comment host = 1.1.1.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 } */ [...]
重启监控服务。
sudo service ganglia-monitor restart
等待几分钟,然后重新加载 Web 界面。 新节点应自动出现在集群中。
在此集群中要监控的任何其他节点上重复这些步骤。
你现在有一个集群! 您可以在 Web 界面上查看集群概览,并深入了解特定节点和特定指标。
网格
网格允许您将多个集群组织在一起。 例如,如果您有多个 MySQL 数据库集群服务于不同的应用程序,您可以将所有这些集群组织在同一个网格中,以查看所有 MySQL 服务器的性能。 或者,如果您在世界各地都有应用程序服务器,您可以按位置将它们放在一个网格中,例如伦敦。
要创建网格,请编辑 Ganglia 主节点 上的 /etc/ganglia/gmetad.conf
文件。
请注意,每个 Gmetad 只能创建一个网格。 如果要创建多个网格,则需要在另一台服务器上安装 Gmetad。 在这个例子中,我们将调用我们的网格 London。
sudo vi /etc/ganglia/gmetad.conf
通过取消注释 gridname
行并将 MyGrid
替换为您选择的网格名称,在网格部分命名您的网格。 在本例中,我们将网格命名为 London。
# The name of this Grid. All the data sources above will be wrapped in a GRID # tag with this name. # default: unspecified # gridname "MyGrid"
例如,如果您正在为所有伦敦服务器创建网格:
gridname "London"
为您想要在此网格中的每个集群添加或编辑新的 data_source
行。
更新集群的名称,然后为要添加到该集群的每台服务器添加主机和端口信息。 请注意,集群由端口号标识,因此每个新的 data_source
行或集群都应使用不同的端口号。
例如,在下面的示例中,我们向伦敦网格添加了两个集群,称为 Servers 和 Databases。 Servers中的所有节点都使用端口8556,Databases中的所有节点都使用端口8857。
data_source "Servers" localhost 1.1.1.2:8556 data_source "Databases" 1.2.1.1:8557 1.2.1.2:8557
在 Gmetad 配置文件中指定的每个服务器(或节点)上(在本例中为 localhost、1.1.1.2、1.2.1.1 和 1.2.1.2),编辑 Gmond 配置文件。
sudo vi /etc/ganglia/gmond.conf
更新集群部分中的 name
值以匹配集群名称。 在这里,我们将设置一个节点作为 Databases 集群的一部分。 (请注意,如果您使用之前的方法设置了两个节点,则必须返回并编辑每个节点上的 /etc/ganglia/gmond.conf
文件以匹配新设置。)
/* 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
行。
您的 udp_send_channel
块应如下所示。 请务必更新 port
编号! 在我们的示例中,由于这是 Databases 集群的一部分,因此端口应该是 8557。 其他行可以保持不变。
udp_send_channel { mcast_join = 239.2.11.71 port = 8557 ttl = 1 }
您的 udp_recv_channel
块应该如下所示,使用适当的端口号。 其他行可以保持不变。
udp_recv_channel { mcast_join = 239.2.11.71 port = 8557 bind = 239.2.11.71 }
最后,您的 tcp_accept_channel
块应该如下所示,使用适当的端口号。
tcp_accept_channel { port = 8557 }
重新启动每个节点上的监控服务。
sudo service ganglia-monitor restart
在 Ganglia 主机服务器或 主节点 上重新启动 Ganglia-monitor、Gmetad 和 Apache。
sudo service ganglia-monitor restart && sudo service gmetad restart && sudo service apache2 restart
在 Web 界面中,您现在应该会看到网格的名称,以及选择集群的选项。 从那里您可以选择并深入了解一个节点。
结论
Ganglia 很容易设置和从一个节点扩展到数百或数千个节点。 它具有高性能水平,可以帮助您监控所需数量的服务器。