使用 Zabbix 进行服务器监控
Zabbix (www.zabbix.com) 是一款开源的、商业支持的监控解决方案,支持 UNIX、Linux、BSD、Mac OS X 和 Windows 平台,并且构建用于支持大型安装。Zabbix 是 Alexei Vladishev 及其公司 Zabbix SIA 的作品。本文基于 Zabbix 的最新版本 1.8.1,该版本于 2010 年 1 月发布。在撰写本文时,大多数 Linux 发行版在其仓库中都包含之前的版本 (1.6)。与 1.8 相比,存在重大更改,但本文的大部分内容仍然适用。部分功能列表包括
分布式监控。
适用于 Linux、BSD、Windows、Mac OS X 和商业 UNIX 的客户端。
数据库后端(MySQL、Oracle、PostgreSQL 或 SQLite)。
自动发现模式。
基于 Web 的界面。
通过电子邮件、短信或 Jabber 发送通知。
支持轮询或捕获 Zabbix 客户端消息。
SNMP。
无代理监控(ping、端口检查等)。
图表。
虽然您可以从 Linux 发行版的仓库安装 Zabbix,但我将使用 Ubuntu 9.10 作为服务器平台和 MySQL 数据库后端,从源代码安装版本 1.8.1。我还将展示如何使用默认 Zabbix 安装附带的基本监控来配置 Linux 客户端。
在编译 Zabbix 源代码之前,我需要安装先决条件软件包
shell> sudo apt-get install mysql-server apache2 ↪libapache2-mod-php5 php5-mysql php5-gd ↪libmysqlclient15-dev libsnmp-dev libiksemel-dev ↪libcurl4-gnutls-dev
(在 Ubuntu 中,软件包名称为 mysql-server、apache2、libapache2-mod-php5、php5-mysql、php5-gd、libmysqlclient15-dev、libsnmp-dev、libiksemel-dev 和 libcurl4-gnutls-dev。)
Zabbix 服务器和客户端将以用户 zabbix 身份运行,因此您需要创建一个帐户
shell> sudo useradd -s /bin/true zabbix
接下来,创建 zabbix 数据库
shell> mysql -u<username> -p<password> mysql> create database zabbix; mysql> quit;
从 www.zabbix.com/download.php 下载源代码,解压缩存档,然后按照以下步骤设置数据库架构和默认配置。请注意,我正在使用 MySQL 架构文件来设置我的数据库;其他受支持的数据库有不同的架构文件
shell> sudo tar zxvf zabbix-1.8.1.tar.gz shell> cd zabbix-1.8.1/create/schema shell> cat mysql.sql | mysql -u<username> -p<password> zabbix shell> cd ../data shell> cat data.sql | mysql -u<username> -p<password> zabbix shell> cat images_mysql.sql | mysql -u<username> -p<password> zabbix
要编译服务器代码,cd返回到解压后的 zabbix-1.8 源代码目录的根目录,并运行以下命令来编译服务器二进制文件,使其支持 MySQL、SNMP 和 Jabber
shell> ./configure --enable-server --with-mysql --with-net-snmp ↪--with-jabber --with-lib-curl shell> sudo make install shell> ./configure --enable-agent --enable-static shell> sudo make install
我建议为客户端构建静态二进制文件。这有助于在不同的(Linux)版本中部署客户端。尽管make install命令构建并安装服务器二进制文件 zabbix_server,但它不构建客户端代理二进制文件。要编译客户端二进制文件,cd进入 zabbix-1.8.1/src/zabbix_agent,并运行另一个make install。然后,二进制文件将安装到 /usr/local/sbin——服务器二进制文件的相同位置
shell> ./configure --enable-agent --enable-static shell> cd src/zabbix_agent shell> sudo make install
编译了两个 zabbix 二进制文件:zabbix_agentd 和 zabbix_agent。后者用于从超级服务器(例如 inetd)运行客户端,前者作为守护程序运行。建议运行 zabbix_agentd。
Zabbix 为服务器使用一个配置文件,为客户端使用另一个配置文件。示例配置文件位于 zabbix-1.8.1/misc/conf 目录中。创建一个名为 /etc/zabbix 的目录,将该目录的所有权更改为用户 zabbix,并将 zabbix_server.conf 和 zabbix_agentd.conf 文件复制到此目录。
在任何一个配置文件中都没有太多需要更改的地方,但是这些文件本身都记录得很好。客户端 zabbix_agentd.conf 文件中应更改的两个配置参数是以下行Server=和Hostname=。第一个应指向您的 Zabbix 服务器,第二个应为客户端的主机名。
如果您运行的站点少于几台主机,则除了 zabbix_server.conf 文件中的 DBUser 和 DBPassword 参数之外,可能不需要更改任何其他内容。浏览这两个配置文件,并参考 Zabbix 文档,了解任何可能对您的站点有帮助的变量。
您可以在 zabbix-1.8.1/misc/init.d 目录中找到几个启动脚本示例。将适合您安装的脚本复制到 /etc/init.d,并进行任何必要的更改。对于 Ubuntu,我使用了 debian 目录中的脚本。在服务器和代理配置文件中,我都需要将二进制文件的位置从 /home/zabbix/bin 更改为 /usr/local/sbin。
zabbix-1.8.1/frontends/php 目录包含 Zabbix 的基于 Web 的前端。将此目录结构复制到 Apache 的 DocumentRoot 下的某个位置,并在您的 Web 浏览器中加载该 URL。您将看到 Zabbix 简介屏幕(图 1)。这个类似向导的页面将逐步引导您完成配置,并向您展示一份许可协议。下一个屏幕详细说明了在继续之前需要进行的任何配置更改,例如 PHP 内存和执行时间设置。
通过配置屏幕后,将加载主登录屏幕。默认帐户为 Admin,密码为 zabbix。当然,一旦您登录,请更改默认密码。前端布局由两行选项组成(图 2)。单击“管理”,然后单击“用户”。确保屏幕右侧的下拉菜单已选择“用户”而不是“用户组”。接下来,单击 admin 用户。将显示 Admin 用户的配置页面(图 3)。首先,更改密码。此外,添加一个电子邮件地址(单击“媒体”行旁边的“添加”),因为我们稍后将在本文中配置通过电子邮件发送警报。
需要将三个文件复制到新客户端:zabbix_agentd 客户端二进制文件到 /usr/sbin,zabbix_agentd.conf 配置文件到 /etc/zabbix 和一个 init 脚本。编辑 zabbix_agentd.conf 配置文件,并更改读取的行Server=等于 Zabbix 服务器名称,并更改Hostname=行等于客户端主机名。完成后,使用 init 脚本启动 zabbix 代理。
返回 Zabbix 服务器 Web 页面,在 Web 前端中单击“配置”→“主机”。确保屏幕右侧的下拉菜单中选择了“主机”,然后单击“创建主机”按钮。将出现“主机”配置屏幕(图 4)。您可以为您的主机指定任何您选择的名称,但我建议尽可能使用短主机名 (hostname -s) 而不是完全限定域名。将其添加到 Linux 服务器组中,并使用完全限定 DNS 名称填充 DNS 名称。我可以选择使用其 IP 地址监控此主机,但我相信 DNS 始终是最新的。此页面上唯一需要更改的其他内容是单击“链接模板”区域下的“添加”。单击 Template_Linux 旁边的单选按钮,然后在该弹出窗口底部选择“选择”。返回“主机”屏幕,单击“保存”。Template_Linux 中包含的所有监控项和触发器都将添加到客户端。
Zabbix 监控结构从“项”(检查或收集数据)开始,然后是“触发器”(监控“项”中的数据),最后是“动作”(电子邮件、短信或运行脚本)。
“项”可以被认为是“数据收集器”。一些项内置于代理二进制文件中,另一些将是自定义脚本。安装 Zabbix 后,您将拥有一系列模板,其中包含用于常见操作系统检查的这些项,例如 Linux、Solaris、MAC OS X 和 Windows 系统。
让我们看看我们在第一个客户端中使用的模板。使用右上角的全局搜索框,搜索“Template_Linux”。搜索结果应返回一个页面,其中包含指向此模板的“项”、“触发器”或“图表”的链接(图 5)。选择“项”链接。所有这些项都将在应用了 Template_Linux 模板的任何主机上进行监控,例如上面配置的第一个主机。
单击名为“/ 上的可用磁盘空间”的项。以下是此项的所有详细信息(图 6)。大多数字段都是不言自明的,但以下是一些重要的字段
描述:描述检查的自由格式字段。请注意,在可用磁盘空间检查中,有一个 $1。Zabbix 将此替换为键中的第一个字段(稍后解释)。
类型:Zabbix 代理类型是由客户端上运行的代理以定义的间隔执行的检查。Zabbix 代理检查在二进制文件中编译,例如检查可用磁盘空间、可用/已用 inode 数量或自定义编写的脚本。另一种类型是 Zabbix Trapper。Zabbix Trapper 的作用类似于 SNMP trap。仅当客户端通过运行二进制文件发送更新时,其值才会更新zabbix_sender。例如,假设您有一个 cron 作业需要 30 分钟才能完成。通常,Zabbix 服务器将超时等待运行此脚本的客户端的响应。更好的方法是在 cron 作业脚本中添加一行,以便在使用 zabbix_sender 程序完成时更新 Zabbix 服务器。另一种检查类型称为简单检查。这用于无代理客户端——例如,ping 主机或使用外部主机检查特定端口(电子邮件、SSH 等)。
键:此字段是 Zabbix 将检查的“表达式”。它可以是内置键,例如可用磁盘空间项 (vfs.fs.size[/,free]) 或您编写的自定义脚本。文档详细说明了可以使用的所有内置键和表达式。
您还可以告诉 Zabbix 将返回的数据类型:文本、字符或数字以及该值的乘数。此外,您可以指定您想要精细图表(历史记录)和趋势的时间长度。“应用程序”部分是您可以将相似的检查分组的地方。例如,如果您要添加另一个文件系统项,则应将其添加到“文件系统”应用程序。
从全局搜索结果中选择“触发器”链接(图 5)。Zabbix 中的触发器监控“项”收集的数据。如果数据超过配置的阈值,则将其分配给六个严重性级别之一。图 7 显示了 Template_Linux 附带的触发器。显示的是严重性级别、状态、描述和构成触发器的表达式。单击名为“Template_Linux 卷 / 上的可用磁盘空间低”的触发器,应显示触发器配置屏幕(图 8)。
第一个字段“名称”字段应描述问题。例如,“服务器 123 上的 IMAP 端口未响应”比“电子邮件宕机”更好。这很可能是您将在电子邮件、页面或 SMS 消息中收到的文本,因此清晰、描述性的名称在凌晨 2 点发生呼叫时将非常有用。
“表达式”字段是此触发器将监控的“项”及其阈值。我们对此触发器的表达式配置为{Template_Linux:vfs.fs.size[/,pfree].last(0)}<10",大致意思是“监控名为 Template_Linux 的主机及其键 vfs.fs.size[/,pfree]。如果它返回的最后一个值小于 10,则将其分配为“高”严重性级别。”单击“选择”。从这里,您可以更改表达式以触发一段时间内的平均值、绝对值或最大值。目前,我将触发器功能保持原样,除了我想更改触发的值。因此,关闭“条件”弹出窗口,并将表达式更改为 5%,方法是将行尾的值从 10 更改为 5。单击“保存”以进行更改。
当触发器被激活时,会发生“动作”。它们可以通过电子邮件、Jabber、SMS 消息或运行远程脚本来实现。让我们配置一个动作,如果任何严重级别为“灾难”的触发器已被激活,则通过电子邮件通知管理员。选择“配置”→“动作”,然后选择屏幕右侧的“创建动作”按钮。应显示“动作配置”屏幕(图 9)。为其命名一些有用的名称,然后单击“动作条件”下的“新建”按钮。从“新建条件”区域中选择“触发器严重性”,并将严重性级别从“信息”更改为“灾难”。完成后单击“添加”。接下来,选择“动作操作”区域中的“新建”按钮。将操作配置为向名为 admin 的单个用户发送消息(图 10)。完成后单击“添加”。最后,单击“保存”按钮。现在,任何您分配了“灾难”严重性级别的触发器都将导致向 Admin 用户发送电子邮件。如果需要,您可以从特定主机为单个触发器创建“动作”,但上面的动作可以被视为“站点范围”动作。
Paul Tader 是一名独立顾问,在芝加哥地区实施开源解决方案,自 20 世纪 90 年代中期以来,他一直在该地区运行各种 Linux 和 BSD 版本,并在当地一所大学讲授 Linux 认证课程。欢迎通过电子邮件 ptader@linuxscope.com 联系 Paul。