作为 Write for DOnations 计划的一部分,作者选择了 开源计划 来接受捐赠。
介绍
Nagios 是一个流行的开源监控系统。 它保留您的服务器清单并监控它们,以便您知道您的关键服务已启动并正在运行。 使用像 Nagios 这样的监控系统对于任何生产环境来说都是必不可少的工具,因为通过监控正常运行时间、CPU 使用率或磁盘空间,您可以在问题发生之前或在用户打电话给您之前阻止问题。
在本教程中,您将安装 Nagios 4 并对其进行配置,以便您可以通过 Nagios 的 Web 界面监控主机资源。 您还将设置 Nagios 远程插件执行器 (NRPE),它作为代理在远程主机上运行,因此您可以监控它们的资源。
先决条件
要遵循本教程,您将需要:
- 按照我们的 Initial Server Setup Guide for Ubuntu 18.04 设置两台 Ubuntu 18.04 服务器,包括具有 sudo 权限的非 root 用户和配置了
ufw
的防火墙。 在一台服务器上,您将安装 Nagios; 本教程将把它称为 Nagios 服务器。 它将监控您的第二台服务器; 这第二台服务器将被称为 第二台 Ubuntu 服务器 。 - 运行 Nagios 服务器的服务器需要安装 Apache 和 PHP。 按照 本指南 在您的一台服务器上进行配置。 您可以跳过该教程中的 MySQL 步骤。
通常,Nagios 在硬件防火墙或 VPN 之后运行。 如果您的 Nagios 服务器暴露在公共互联网上,您应该通过安装 TLS/SSL 证书来保护 Nagios Web 界面。 这是可选的,但 强烈建议 。 您可以按照 Let's Encrypt on Ubuntu 18.04 指南获取免费的 TLS/SSL 证书。
本教程假设您的服务器启用了 私有网络 ,以便在私有网络而不是公共网络上进行监控。 如果您没有启用私有网络,您仍然可以按照本教程将所有对私有 IP 地址的引用替换为公共 IP 地址。
第 1 步 — 安装 Nagios 4
有多种安装 Nagios 的方法,但您将从源代码安装 Nagios 及其组件,以确保您获得最新的功能、安全更新和错误修复。
登录到运行 Apache 的服务器。 在本教程中,我们将其称为 Nagios 服务器:
ssh sammy@your_nagios_server_ip
因为您是从源代码构建 Nagios 及其组件,所以您必须安装一些开发库来完成构建,包括编译器、开发头文件和 OpenSSL。
更新您的软件包列表以确保您可以下载最新版本的先决条件:
sudo apt update
然后安装所需的包:
sudo apt install autoconf gcc make unzip libgd-dev libmcrypt-dev libssl-dev dc snmp libnet-snmp-perl gettext
安装了先决条件后,您可以安装 Nagios 本身。 下载最新稳定版 Nagios Core 的源代码。 进入Nagios下载页面,点击表格下方的跳过下载链接。 复制最新稳定版本的链接地址,以便将其下载到 Nagios 服务器。
使用 curl
命令将版本下载到您的主目录:
cd ~ curl -L -O https://github.com/NagiosEnterprises/nagioscore/archive/nagios-4.4.4.tar.gz
提取 Nagios 存档:
tar zxf nagios-4.4.4.tar.gz
然后切换到解压目录:
cd nagioscore-nagios-4.4.4
在构建 Nagios 之前,运行 configure
脚本并指定 Apache configs 目录:
./configure --with-httpd-conf=/etc/apache2/sites-enabled
注意: 如果你想让 Nagios 使用 Postfix 发送电子邮件,你必须 安装 Postfix 并通过在 configure
中添加 --with-mail=/usr/sbin/sendmail
来配置 Nagios 使用它命令。 我们不会在本教程中介绍 Postfix,但如果您稍后选择使用 Postfix 和 Nagios,则需要重新配置和重新安装 Nagios 才能使用 Postfix 支持。
您将看到 configure
命令的以下输出:
Output*** Configuration summary for nagios 4.4.4 2019-07-29 ***: General Options: ------------------------- Nagios executable: nagios Nagios user/group: nagios,nagios Command user/group: nagios,nagios Event Broker: yes Install ${prefix}: /usr/local/nagios Install ${includedir}: /usr/local/nagios/include/nagios Lock file: /run/nagios.lock Check result directory: /usr/local/nagios/var/spool/checkresults Init directory: /lib/systemd/system Apache conf.d directory: /etc/apache2/sites-enabled Mail program: /bin/mail Host OS: linux-gnu IOBroker Method: epoll Web Interface Options: ------------------------ HTML URL: http://localhost/nagios/ CGI URL: http://localhost/nagios/cgi-bin/ Traceroute (used by WAP): Review the options above for accuracy. If they look okay, type 'make all' to compile the main program and CGIs.
现在使用以下命令编译 Nagios:
make all
接下来创建一个 nagios 用户和 nagios 组。 它们将用于运行 Nagios 进程:
sudo make install-groups-users
现在运行这些 make
命令来安装 Nagios 二进制文件、服务文件及其示例配置文件:
sudo make install sudo make install-daemoninit sudo make install-commandmode sudo make install-config
您将使用 Apache 为 Nagios 的 Web 界面提供服务,因此运行以下命令来安装 Apache 配置文件并配置其设置:
sudo make install-webconf
使用 a2enmod
命令启用 Apache rewrite
和 cgi
模块:
sudo a2enmod rewrite sudo a2enmod cgi
为了通过 Web 界面向 Nagios 发出外部命令,请将 Web 服务器用户 www-data 添加到 nagios 组:
sudo usermod -a -G nagios www-data
使用 htpasswd
命令创建一个名为 nagiosadmin 的管理员用户,该用户可以访问 Nagios Web 界面:
sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
在提示符处输入密码。 记住此密码,因为您将需要它来访问 Nagios Web 界面。
警告: 如果您创建的用户名不是 nagiosadmin,则需要编辑 /usr/local/nagios/etc/cgi.cfg
并将所有 nagiosadmin 引用更改为您创建的用户。
重新启动 Apache 以加载新的 Apache 配置:
sudo systemctl restart apache2
您现在已经安装了 Nagios。 但要使其正常工作,必须安装 Nagios 插件,您将在下一步中介绍该插件。
第 2 步 — 安装 Nagios 插件
Nagios 需要插件才能正常运行。 官方 Nagios 插件包包含 50 多个插件,可让您监控基本服务,例如正常运行时间、磁盘使用情况、交换使用情况、NTP 等。
让我们安装插件包。
你可以在【X61X】官网【X78X】上找到最新版本的Nagios Plugins。
使用 curl
将其下载到您的主目录:
cd ~ curl -L -O https://nagios-plugins.org/download/nagios-plugins-2.2.1.tar.gz
提取 NRPE 存档并导航到提取的目录:
tar zxf nagios-plugins-2.2.1.tar.gz cd nagios-plugins-2.2.1
接下来配置他们的安装:
./configure
现在构建并安装插件:
make sudo make install
现在插件已安装,但您还需要一个插件来监控远程服务器。 让我们接下来安装它。
第 3 步 — 安装 check_nrpe 插件
Nagios 使用 Nagios Remote Plugin Executor 或 NRPE 监控远程主机。 它由两部分组成:
- Nagios 服务器使用的
check_nrpe
插件。 - NRPE 守护进程,它在远程主机上运行并将数据发送到 Nagios 服务器。
让我们在 Nagios 服务器上安装 check_nrpe
插件。
在 GitHub 页面 上找到 NRPE 最新稳定版本的下载 URL。
使用 curl
将其下载到您的主目录:
cd ~ curl -L -O https://github.com/NagiosEnterprises/nrpe/releases/download/nrpe-3.2.1/nrpe-3.2.1.tar.gz
提取 NRPE 存档:
tar zxf nrpe-3.2.1.tar.gz
然后切换到解压目录:
cd nrpe-3.2.1
配置check_nrpe
插件:
./configure
现在构建并安装 check_nrpe
插件:
make check_nrpe sudo make install-plugin
接下来让我们配置 Nagios 服务器。
第 4 步 — 配置 Nagios
现在让我们执行初始 Nagios 配置,其中涉及编辑一些配置文件。 您只需在 Nagios 服务器上执行此部分一次。
在您喜欢的文本编辑器中打开主要的 Nagios 配置文件。 在这里,您将使用 nano
:
sudo nano /usr/local/nagios/etc/nagios.cfg
在文件中找到这一行:
/usr/local/nagios/etc/nagios.cfg
... #cfg_dir=/usr/local/nagios/etc/servers ...
通过从行的前面删除 #
字符取消注释此行:
/usr/local/nagios/etc/nagios.cfg
cfg_dir=/usr/local/nagios/etc/servers
保存并关闭 nagios.cfg
,方法是按 CTRL+X
,然后按 Y
,然后按 ENTER
(如果您使用的是 nano
)。
现在创建一个目录来存储你要监控的每台服务器的配置文件:
sudo mkdir /usr/local/nagios/etc/servers
在文本编辑器中打开 Nagios 联系人配置:
sudo nano /usr/local/nagios/etc/objects/contacts.cfg
找到 email
指令并将其值替换为您自己的电子邮件地址:
/usr/local/nagios/etc/objects/contacts.cfg
... define contact{ contact_name nagiosadmin ; Short name of user use generic-contact ; Inherit default values from generic-contact template (defined above) alias Nagios Admin ; Full name of user email your_email@your_domain.com ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ****** ...
保存并退出编辑器。
接下来,向您的 Nagios 配置添加一个新命令,让您可以在 Nagios 服务定义中使用 check_nrpe
命令。 在编辑器中打开文件 /usr/local/nagios/etc/objects/commands.cfg
:
sudo nano /usr/local/nagios/etc/objects/commands.cfg
将以下内容添加到文件末尾以定义一个名为 check_nrpe
的新命令:
/usr/local/nagios/etc/objects/commands.cfg
... define command{ command_name check_nrpe command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ }
这定义了名称并指定了执行插件的命令行选项。
保存并退出编辑器。
然后启动 Nagios 并使其在服务器启动时启动:
sudo systemctl start nagios
Nagios 现在正在运行,让我们登录到它的 Web 界面。
第 5 步 — 访问 Nagios Web 界面
打开您喜欢的 Web 浏览器,然后通过访问 http://nagios_server_public_ip/nagios
转到您的 Nagios 服务器。
在出现的弹出窗口中输入 Web 界面的登录凭据。 使用 nagiosadmin 作为用户名,并使用您为该用户创建的密码。
验证后,您将看到默认的 Nagios 主页。 点击左侧导航栏中的 Hosts 链接,查看 Nagios 正在监控哪些主机:
如您所见,Nagios 仅监控“localhost”或它自己。
让我们用 Nagios 监控我们的另一台服务器,
第 6 步 — 在主机上安装 Nagios 插件和 NRPE 守护程序
让我们添加一个新主机,以便 Nagios 可以监控它。 您将在远程主机上安装 Nagios 远程插件执行器 (NRPE),安装一些插件,然后配置 Nagios 服务器以监控该主机。
登录到第二台服务器,我们称之为第二台Ubuntu服务器:
ssh sammy@your_monitored_server_ip
首先创建一个 nagios 用户,它将运行 NRPE 代理:
sudo useradd nagios
您将从源代码安装 NRPE,这意味着您需要在步骤 1 中安装在 Nagios 服务器上的相同开发库。 更新您的软件包源并安装 NRPE 先决条件:
sudo apt update sudo apt install autoconf gcc libmcrypt-dev make libssl-dev wget dc build-essential gettext
NRPE 要求在远程主机上安装 Nagios Plugins。 让我们从源代码安装这个包。
从 下载 页面查找最新版本的 Nagios 插件。
使用 curl
将 Nagios 插件下载到您的主目录:
cd ~ curl -L -O https://nagios-plugins.org/download/nagios-plugins-2.2.1.tar.gz
提取 Nagios Plugins 存档并切换到提取的目录:
tar zxf nagios-plugins-2.2.1.tar.gz cd nagios-plugins-2.2.1
在构建 Nagios 插件之前,使用以下命令配置它们:
./configure
现在编译插件:
make
然后通过运行安装它们:
sudo make install
接下来,安装 NRPE 守护程序。 在 GitHub 页面 上找到 NRPE 最新稳定版本的下载 URL,就像您在第 3 步中所做的那样。 使用 curl
将 NRPE 的最新稳定版本下载到受监控服务器的主目录:
cd ~ curl -L -O https://github.com/NagiosEnterprises/nrpe/releases/download/nrpe-3.2.1/nrpe-3.2.1.tar.gz
使用以下命令提取 NRPE 存档:
tar zxf nrpe-3.2.1.tar.gz
然后切换到解压目录:
cd nrpe-3.2.1
配置 NRPE:
./configure
现在使用以下命令构建和安装 NRPE 及其启动脚本:
make nrpe sudo make install-daemon sudo make install-config sudo make install-init
现在,让我们更新 NRPE 配置文件并添加一些 Nagios 可以监控的基本检查。
首先,让我们监控这台服务器的磁盘使用情况。 使用 df -h
命令查找根文件系统。 您将在 NRPE 配置中使用此文件系统名称:
df -h /
您将看到与此类似的输出:
OutputFilesystem Size Used Avail Use% Mounted on /dev/vda1 25G 1.4G 23G 6% /
现在在编辑器中打开 /usr/local/nagios/etc/nrpe.cfg
文件:
sudo nano /usr/local/nagios/etc/nrpe.cfg
NRPE 配置文件很长,注释很多。 您需要查找和修改几行:
- server_address:设置为被监控服务器的私有IP地址。
- allowed_hosts:将您的 Nagios 服务器的私有 IP 地址添加到逗号分隔的列表中。
- command[check_hda1]:将
/dev/hda1
更改为调用根文件系统的任何内容。
找到这些设置并适当地更改它们:
/usr/local/nagios/etc/nrpe.cfg
... server_address=second_ubuntu_server_private_ip ... allowed_hosts=127.0.0.1,::1,your_nagios_server_private_ip ... command[check_vda1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/vda1 ...
保存并退出编辑器。 现在您可以启动 NRPE:
sudo systemctl start nrpe.service
通过检查其状态确保服务正在运行:
sudo systemctl status nrpe.service
您将看到以下输出:
Output... Aug 01 06:28:31 client systemd[1]: Started Nagios Remote Plugin Executor. Aug 01 06:28:31 client nrpe[8021]: Starting up daemon Aug 01 06:28:31 client nrpe[8021]: Server listening on 0.0.0.0 port 5666. Aug 01 06:28:31 client nrpe[8021]: Server listening on :: port 5666. Aug 01 06:28:31 client nrpe[8021]: Listening for connections on port 5666 Aug 01 06:28:31 client nrpe[8021]: Allowing connections from: 127.0.0.1,::1,165.22.212.38
接下来,允许通过防火墙访问端口 5666
。 如果您使用的是 UFW,请使用以下命令将其配置为允许 TCP 连接到端口 5666
:
sudo ufw allow 5666/tcp
您可以在 如何在 Ubuntu 18.04 上使用 UFW 设置防火墙中了解有关 UFW 的更多信息。
现在您可以检查与远程 NRPE 服务器的通信。 在 Nagios 服务器上运行以下命令:
/usr/local/nagios/libexec/check_nrpe -H second_ubuntu_server_ip
您将看到以下输出:
OutputNRPE v3.2.1
对要监控的每个附加服务器重复本节中的步骤。
在您要监控的主机上完成安装和配置 NRPE 后,您必须将这些主机添加到您的 Nagios 服务器配置中,然后它才会开始监控它们。 接下来让我们这样做。
第 7 步 — 使用 Nagios 监控主机
要使用 Nagios 监视主机,您将为每个主机添加配置文件,指定要监视的内容。 然后,您可以在 Nagios Web 界面中查看这些主机。
在您的 Nagios 服务器上,为要在 /usr/local/nagios/etc/servers/
中监视的每个远程主机创建一个新的配置文件。 将突出显示的单词 monitored_server_host_name
替换为您的主机名:
sudo nano /usr/local/nagios/etc/servers/your_monitored_server_host_name.cfg
添加以下主机定义,将 host_name
值替换为远程主机名,将 alias
值替换为主机描述,将 address
值替换为私有 IP 地址远程主机:
/usr/local/nagios/etc/servers/your_monitored_server_host_name.cfg
define host { use linux-server host_name your_monitored_server_host_name alias My client server address your_monitored_server_private_ip max_check_attempts 5 check_period 24x7 notification_interval 30 notification_period 24x7 }
使用此配置,Nagios 只会告诉您主机是启动还是关闭。 让我们添加一些服务来监控。
首先,添加这个块来监控平均负载:
/usr/local/nagios/etc/servers/your_monitored_server_host_name.cfg
define service { use generic-service host_name your_monitored_server_host_name service_description Load average check_command check_nrpe!check_load }
use generic-service
指令告诉 Nagios 继承名为 generic-service 的服务模板的值,该模板由 Nagios 预定义。
接下来,添加此块以监控磁盘使用情况:
/usr/local/nagios/etc/servers/your_monitored_server_host_name.cfg
define service { use generic-service host_name your_monitored_server_host_name service_description /dev/vda1 free space check_command check_nrpe!check_vda1 }
现在保存并退出。 重新启动 Nagios 服务以使任何更改生效:
sudo systemctl restart nagios
几分钟后,Nagios 将检查新主机,您将在 Nagios Web 界面中看到它们。 单击左侧导航栏中的 Services 链接,可以查看所有受监控的主机和服务。
结论
您已经在服务器上安装了 Nagios,并将其配置为监控至少一台远程机器的平均负载和磁盘使用情况。
现在您正在监控主机及其一些服务,您可以开始使用 Nagios 来监控您的关键任务服务。 您可以使用 Nagios 为关键事件设置通知。 例如,当您的磁盘利用率达到警告或严重阈值时,您可能会收到一封电子邮件,或者您的主网站关闭时会收到通知。 通过这种方式,您可以及时解决问题,甚至可以在问题发生之前解决。