作为Write for DOnations计划的一部分,作者选择了开源计划来接受捐赠。
介绍
Nagios是一个流行的开源监控系统。它会保存您的服务器清单并对其进行监控,以便您了解关键服务是否已启动并正在运行。使用像 Nagios 这样的监控系统对于任何生产环境都是必不可少的工具,因为通过监控正常运行时间、CPU 使用率或磁盘空间,您可以在问题发生之前或在用户打电话给您之前将其阻止。
在本教程中,您将安装 Nagios 4 并对其进行配置,以便您可以通过 Nagios 的 Web 界面监控主机资源。您还将设置 Nagios Remote Plugin Executor (NRPE),它作为远程主机上的代理运行,以便您可以监控它们的资源。
先决条件
要学习本教程,您需要:
- 按照我们的 Ubuntu 18.04 初始服务器设置指南设置了两台 Ubuntu 18.04 服务器,包括具有 sudo 权限的非 root 用户和配置了
ufw
. 在一台服务器上,您将安装 Nagios;本教程将其称为Nagios 服务器。它将监控您的第二台服务器;这第二台服务器将被称为第二台 Ubuntu 服务器。 - 将运行 Nagios 服务器的服务器需要安装 Apache 和 PHP。按照本指南在您的一台服务器上配置这些。您可以跳过该教程中的 MySQL 步骤。
通常,Nagios 在硬件防火墙或 VPN 后面运行。如果您的 Nagios 服务器暴露在公共 Internet 上,您应该通过安装 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并通过添加--with-mail=/usr/sbin/sendmail
到configure
命令来配置 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
使用以下命令启用 Apacherewrite
和cgi
模块a2enmod
:
- 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 等。
让我们安装插件包。
您可以在官方网站上找到最新版本的 Nagios 插件。
使用以下命令将其下载到您的主目录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 监视远程主机。它由两部分组成:
check_nrpe
Nagios 服务器使用的插件。- NRPE 守护进程,它在远程主机上运行并将数据发送到 Nagios 服务器。
让我们check_nrpe
在 Nagios 服务器上安装插件。
在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
在文件中找到这一行:
...
#cfg_dir=/usr/local/nagios/etc/servers
...
通过删除该行#
前面的字符来取消注释该行:
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
指令并将其值替换为您自己的电子邮件地址:
...
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 配置添加一个新命令,让您可以check_nrpe
在 Nagios 服务定义中使用该命令。/usr/local/nagios/etc/objects/commands.cfg
在编辑器中打开文件:
- sudo nano /usr/local/nagios/etc/objects/commands.cfg
将以下内容添加到文件末尾以定义名为 的新命令check_nrpe
:
...
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
在出现的弹出窗口中输入 Web 界面的登录凭据。使用nagiosadmin作为用户名,以及您为该用户创建的密码。
验证后,您将看到默认的 Nagios 主页。单击左侧导航栏中的Hosts链接以查看 Nagios 正在监视哪些主机:
如您所见,Nagios 仅监控“localhost”或自身。
让我们用 Nagios 监控我们的另一台服务器,
步骤 6 — 在主机上安装 Nagios 插件和 NRPE 守护程序
让我们添加一个新主机,以便 Nagios 可以监控它。您将在远程主机上安装 Nagios Remote Plugin Executor (NRPE),安装一些插件,然后配置 Nagios 服务器以监控该主机。
登录到第二个服务器,我们将其称为第二个 Ubuntu 服务器:
- ssh sammy@your_monitored_server_ip
首先创建一个将运行 NRPE 代理的nagios用户:
- 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 插件。让我们从源代码安装这个包。
从下载页面找到最新版本的 Nagios 插件。
使用以下命令将 Nagios 插件下载到您的主目录curl
:
- 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 守护进程。就像您在第 3 步中所做的那样,在GitHub 页面上找到NRPE 最新稳定版本的下载 URL。使用以下命令将 NRPE的最新稳定版本下载到您监控的服务器的主目录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
配置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
为调用您的根文件系统的任何内容。
找到这些设置并适当更改它们:
...
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,请使用5666
以下命令将其配置为允许 TCP 连接到端口:
- 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 地址替换值:
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 只会告诉您主机是启动还是关闭。让我们添加一些服务来监控。
首先,添加此块以监视平均负载:
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 预定义。
接下来,添加此块以监视磁盘使用情况:
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 界面中看到它们。单击左侧导航栏中的“服务”链接以查看所有受监控的主机和服务。
结论
您已在服务器上安装 Nagios 并将其配置为监视至少一台远程机器的平均负载和磁盘使用情况。
现在您正在监控主机及其某些服务,您可以开始使用 Nagios 来监控您的关键任务服务。您可以使用 Nagios 为关键事件设置通知。例如,当您的磁盘利用率达到警告或严重阈值时,您会收到一封电子邮件,或者当您的主网站关闭时收到通知。这样您就可以迅速解决问题,甚至可以在问题发生之前解决。