如何在Ubuntu16.04上安装Nagios4并监控您的服务器
介绍
Nagios 是一个流行的开源监控系统。 它保留您的服务器清单并监控它们,以便您知道您的关键服务已启动并正在运行。 使用像 Nagios 这样的监控系统对于任何生产环境来说都是必不可少的工具,因为通过监控正常运行时间、CPU 使用率或磁盘空间,您可以在问题发生之前或在用户打电话给您之前阻止问题。
在本教程中,您将安装 Nagios 4 并对其进行配置,以便您可以通过 Nagios 的 Web 界面监控主机资源。 您还将设置 Nagios 远程插件执行器 (NRPE),它作为代理在远程主机上运行,因此您可以监控它们的资源。
先决条件
要完成本教程,您将需要以下内容:
- 两台 Ubuntu 16.04 服务器,配置了 私有网络 ,按照 Ubuntu 16.04 初始服务器设置指南 进行设置,包括一个 sudo 非 root 用户和一个防火墙。 您将使用第一台服务器运行 Nagios,第二台服务器将配置为 Nagios 可以监控的远程主机。 运行 Nagios 的服务器还需要安装 Apache 和 PHP,您可以按照如何在 Ubuntu 16.04 上安装 Linux、Apache、MySQL、PHP(LAMP 堆栈)来完成。 您可以跳过该教程中的 MySQL 步骤。
- 通常,Nagios 在硬件防火墙或 VPN 之后运行。 如果您的 Nagios 服务器暴露在公共 Internet 中,您应该使用 TLS 保护 Nagios Web 界面。 为此,您应该执行以下操作之一: 配置域名以指向您的服务器。 您可以按照如何使用 DigitalOcean 教程设置主机名来学习如何将域指向 DigitalOcean Droplets,然后按照如何在 Ubuntu 16.04 上使用 Let's Encrypt 来保护 Apache 以设置 HTTPS 支持 使用自签名证书保护 Apache按照如何在 Ubuntu 16.04 中为 Apache 创建自签名 SSL 证书
本教程假设您的服务器启用了 私有网络 ,以便在私有网络而不是公共网络上进行监控。 如果您没有启用私有网络,您仍然可以按照本教程将所有对私有 IP 地址的引用替换为公共 IP 地址。
第 1 步 — 安装 Nagios 4
有多种安装 Nagios 的方法,但我们将从源代码安装 Nagios 及其组件,以确保我们获得最新的功能、安全更新和错误修复。
登录到运行 Apache 的服务器。 我们将其称为 Nagios 服务器。
ssh sammy@your_nagios_server_ip
创建一个 nagios 用户和 nagcmd 组。 您将使用这些来运行 Nagios 进程。
sudo useradd nagios sudo groupadd nagcmd
然后将用户添加到组中:
sudo usermod -a -G nagcmd nagios
因为我们是从源代码构建 Nagios 及其组件,所以我们必须安装一些开发库来完成构建,包括编译器、开发头文件和 OpenSSL。
更新您的软件包列表以确保您可以下载最新版本的先决条件:
sudo apt-get update
然后安装所需的包:
sudo apt-get install build-essential libgd2-xpm-dev openssl libssl-dev unzip
安装了先决条件后,我们可以安装 Nagios 本身。 下载最新稳定版 Nagios Core 的源代码。 进入Nagios下载页面,点击表格下方的跳过下载链接。 复制最新稳定版本的链接地址,以便将其下载到 Nagios 服务器。
使用 curl
命令将版本下载到您的主目录:
cd ~ curl -L -O https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.3.4.tar.gz
提取 Nagios 存档:
tar zxf nagios-*.tar.gz
然后切换到解压目录:
cd nagios-*
在构建 Nagios 之前,运行 configure
脚本来指定您希望 Nagios 使用的用户和组。 使用您创建的 nagios 用户和 nagcmd 组:
./configure --with-nagios-group=nagios --with-command-group=nagcmd
如果您希望 Nagios 使用 Postfix 发送电子邮件,您必须 安装 Postfix 并通过在 configure
命令中添加 --with-mail=/usr/sbin/sendmail
来配置 Nagios 以使用它。 我们不会在本教程中介绍 Postfix,但如果您稍后选择使用 Postfix 和 Nagios,则需要重新配置和重新安装 Nagios 才能使用 Postfix 支持。
您将看到 configure
命令的以下输出:
Output*** Configuration summary for nagios 4.3.4 2017-08-24 ***: General Options: ------------------------- Nagios executable: nagios Nagios user/group: nagios,nagios Command user/group: nagios,nagcmd Event Broker: yes Install ${prefix}: /usr/local/nagios Install ${includedir}: /usr/local/nagios/include/nagios Lock file: /run/nagios.lock Check result directory: ${prefix}/var/spool/checkresults Init directory: /etc/init.d Apache conf.d directory: /etc/apache2/sites-available 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
现在运行这些 make
命令来安装 Nagios、它的初始化脚本和它的默认配置文件:
sudo make install sudo make install-commandmode sudo make install-init sudo make install-config
您将使用 Apache 为 Nagios 的 Web 界面提供服务,因此将示例 Apache 配置文件复制到 /etc/apache2/sites-available
文件夹:
sudo /usr/bin/install -c -m 644 sample-config/httpd.conf /etc/apache2/sites-available/nagios.conf
为了通过 Web 界面向 Nagios 发出外部命令,请将 Web 服务器用户 www-data 添加到 nagcmd 组:
sudo usermod -G nagcmd www-data
现在已安装 Nagios。 让我们安装一个插件,它允许 Nagios 从各种主机收集数据。
第 2 步 — 安装 check_nrpe 插件
Nagios 使用 Nagios Remote Plugin Executor 或 NRPE 监控远程主机。 它由两部分组成:
- Nagios 服务器使用的
check_nrpe
插件。 - NRPE 守护进程,它在远程主机上运行并将数据发送到 Nagios 服务器。
让我们在 Nagios 服务器上安装 check_nrpe
插件。
在 Nagios Exchange 站点 上找到 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-*.tar.gz
然后切换到解压目录:
cd nrpe-*
配置check_nrpe
插件:
./configure
现在构建并安装 check_nrpe
:
make check_nrpe sudo make install-plugin
接下来让我们配置 Nagios 服务器。
第 3 步 — 配置 Nagios
现在让我们执行初始 Nagios 配置,其中包括编辑一些配置文件和配置 Apache 以服务 Nagios Web 界面。 您只需在 Nagios 服务器上执行此部分一次。
在文本编辑器中打开主要的 Nagios 配置文件:
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
保存文件并退出编辑器。
现在创建一个目录来存储你要监控的每台服务器的配置文件:
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$ }
这定义了名称并指定了执行插件的命令行选项。 您将在第 5 步中使用此命令。
保存并退出编辑器。
现在配置 Apache 以服务于 Nagios 用户界面。 使用 a2enmod
命令启用 Apache rewrite
和 cgi
模块:
sudo a2enmod rewrite sudo a2enmod cgi
使用 htpasswd
命令创建一个名为 nagiosadmin 的管理员用户,该用户可以访问 Nagios Web 界面:
sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
在提示符处输入密码。 记住此密码,因为您将需要它来访问 Nagios Web 界面。
注意:如果你创建的用户名不是nagiosadmin,你需要编辑/usr/local/nagios/etc/cgi.cfg
并将所有nagiosadmin引用改为您创建的用户。
现在为 nagios.conf
创建一个到 sites-enabled
目录的符号链接。 这将启用 Nagios 虚拟主机。
sudo ln -s /etc/apache2/sites-available/nagios.conf /etc/apache2/sites-enabled/
接下来,打开 Nagios 的 Apache 配置文件。
sudo nano /etc/apache2/sites-available/nagios.conf
如果您已将 Apache 配置为通过 HTTPS 提供页面,请找到此行的两个匹配项:
/etc/apache2/sites-available/nagios.conf
# SSLRequireSSL
通过删除 #
符号取消注释这两个事件。
如果要限制可以访问 Nagios Web 界面的 IP 地址,以便只有某些 IP 地址可以访问该界面,请找到以下两行:
/etc/apache2/sites-available/nagios.conf
Order allow,deny Allow from all
通过在它们前面添加 #
符号将它们注释掉:
/etc/apache2/sites-available/nagios.conf
# Order allow,deny # Allow from all
然后找到以下几行:
/etc/apache2/sites-available/nagios.conf
# Order deny,allow # Deny from all # Allow from 127.0.0.1
通过删除 #
符号取消注释它们,并在 Allow from
行中添加您想要允许的 IP 地址或范围(空格分隔):
/etc/apache2/sites-available/nagios.conf
Order deny,allow Deny from all Allow from 127.0.0.1 your_ip_address
这些行在配置文件中出现两次,因此请确保更改两次。 然后保存并退出编辑器。
重新启动 Apache 以加载新的 Apache 配置:
sudo systemctl restart apache2
Apache 配置到位后,您可以为 Nagios 设置服务。 Nagios 没有提供 Systemd 单元文件来管理服务,所以让我们创建一个。 创建 nagios.service
文件并在编辑器中打开它:
sudo nano /etc/systemd/system/nagios.service
在文件中输入以下定义。 此定义指定 Nagios 应该何时启动以及 Systemd 可以在哪里找到 Nagios 应用程序。 在教程 了解 Systemd 单元和单元文件 中了解有关 Systemd 单元文件的更多信息
/etc/systemd/system/nagios.service
[Unit] Description=Nagios BindTo=network.target [Install] WantedBy=multi-user.target [Service] Type=simple User=nagios Group=nagios ExecStart=/usr/local/nagios/bin/nagios /usr/local/nagios/etc/nagios.cfg
保存文件并退出编辑器。
然后启动 Nagios 并使其在服务器启动时启动:
sudo systemctl enable /etc/systemd/system/nagios.service sudo systemctl start nagios
Nagios 现在正在运行,让我们登录到它的 Web 界面。
第 4 步 — 访问 Nagios Web 界面
打开您喜欢的 Web 浏览器,然后通过访问 http://nagios_server_public_ip/nagios
转到您的 Nagios 服务器。
在出现的弹出窗口中输入 Web 界面的登录凭据。 使用 nagiosadmin 作为用户名,并使用您为该用户创建的密码。
验证后,您将看到默认的 Nagios 主页。 点击左侧导航栏中的 Hosts 链接,查看 Nagios 正在监控哪些主机:
如您所见,Nagios 仅监控“localhost”或它自己。
让我们用 Nagios 监控我们的另一台服务器,
第 5 步 — 在主机上安装 NPRE
让我们添加一个新主机,以便 Nagios 可以监控它。 我们将在远程主机上安装 Nagios Remote Plugin Executor (NRPE),安装一些插件,然后配置 Nagios 服务器来监控该主机。
登录到第二台服务器,我们将其称为 监控服务器 。
ssh sammy@your_monitored_server_ip
首先创建一个“nagios”用户来运行 NRPE 代理。
sudo useradd nagios
我们将从源代码安装 NRPE,这意味着您需要在步骤 1 中安装在 Nagios 服务器上的相同开发库。 更新您的软件包源并安装 NRPE 先决条件:
sudo apt-get update sudo apt-get install build-essential libgd2-xpm-dev openssl libssl-dev unzip
NRPE 要求在远程主机上安装 Nagios 插件。 让我们从源代码安装这个包。
从 Nagios 插件下载 页面查找最新版本的 Nagios 插件。 复制最新版本的链接地址,并复制链接地址,以便您可以将其下载到您的 Nagios 服务器。
使用 curl
将 Nagios 插件下载到您的主目录:
cd ~ curl -L -O http://nagios-plugins.org/download/nagios-plugins-2.2.1.tar.gz
提取 Nagios 插件存档:
tar zxf nagios-plugins-*.tar.gz
切换到解压目录:
cd nagios-plugins-*
在构建 Nagios 插件之前,将其配置为使用 nagios 用户和组,并配置 OpenSSL 支持:
./configure --with-nagios-user=nagios --with-nagios-group=nagios --with-openssl
现在编译插件:
make
然后安装它们:
sudo make install
接下来,安装 NRPE。 在 Nagios Exchange 站点 上找到 NRPE 最新稳定版本的下载 URL,就像您在第 1 步中所做的那样。 使用 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-*.tar.gz
然后切换到解压目录:
cd nrpe-*
通过指定 Nagios 用户和组来配置 NRPE,并告诉它您需要 SSL 支持:
./configure --enable-command-args --with-nagios-user=nagios --with-nagios-group=nagios --with-ssl=/usr/bin/openssl --with-ssl-lib=/usr/lib/x86_64-linux-gnu
现在使用以下命令构建和安装 NRPE 及其启动脚本:
make all sudo make install sudo make install-config sudo make install-init
接下来,让我们更新 NRPE 配置文件:
sudo nano /usr/local/nagios/etc/nrpe.cfg
找到 allowed_hosts
指令,并将 Nagios 服务器的私有 IP 地址添加到逗号分隔的列表中:
/usr/local/nagios/etc/nrpe.cfg
allowed_hosts=127.0.0.1,::1,your_nagios_server_private_ip
这会将 NRPE 配置为通过其私有 IP 地址接受来自您的 Nagios 服务器的请求。
保存并退出您的编辑器。 现在您可以启动 NRPE:
sudo systemctl start nrpe.service
通过检查其状态确保服务正在运行:
sudo systemctl status nrpe.service
您将看到以下输出:
Output... Oct 16 07:10:00 nagios systemd[1]: Started Nagios Remote Plugin Executor. Oct 16 07:10:00 nagios nrpe[14653]: Starting up daemon Oct 16 07:10:00 nagios nrpe[14653]: Server listening on 0.0.0.0 port 5666. Oct 16 07:10:00 nagios nrpe[14653]: Server listening on :: port 5666. Oct 16 07:10:00 nagios nrpe[14653]: Listening for connections on port 5666 Oct 16 07:10:00 nagios nrpe[14653]: Allowing connections from: 127.0.0.1,::1,207.154.249.232
接下来,允许通过防火墙访问端口 5666
。 如果您使用的是 UFW,请将其配置为允许 TCP 连接到端口 5666
:
sudo ufw allow 5666/tcp
您可以在 如何在 Ubuntu 16.04 上使用 UFW 设置防火墙中了解有关 UFW 的更多信息。
现在您可以检查与远程 NRPE 服务器的通信。 在 Nagios 服务器上运行以下命令:
/usr/local/nagios/libexec/check_nrpe -H remote_host_ip
您将看到以下输出:
OutputNRPE v3.2.1
现在让我们配置一些 Nagios 可以监控的基本检查。
首先,让我们监控这台服务器的磁盘使用情况。 使用 df -h
命令查找根文件系统。 您将在 NRPE 配置中使用此文件系统名称:
df -h /
您将看到与此类似的输出:
OutputFilesystem Size Used Avail Use% Mounted on udev 490M 0 490M 0% /dev tmpfs 100M 3.1M 97M 4% /run /dev/vda1 29G 1.4G 28G 5% / tmpfs 497M 0 497M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 497M 0 497M 0% /sys/fs/cgroup /dev/vda15 105M 3.4M 102M 4% /boot/efi tmpfs 100M 0 100M 0% /run/user/0
找到与 /
关联的文件系统。 在 Droplet 上,您想要的文件系统可能是 /dev/vda1
。
现在在编辑器中打开 /usr/local/nagios/etc/nrpe.cfg
文件:
sudo nano /usr/local/nagios/etc/nrpe.cfg
NRPE 配置文件很长,注释很多。 您需要查找和修改几行:
- server_address:设置为被监控服务器的私网IP地址
- command[check_hda1]:将
/dev/hda1
更改为您的根文件系统被调用的任何内容
找到这些设置并适当地更改它们:
/usr/local/nagios/etc/nrpe.cfg
... server_address=monitored_server_private_ip ... command[check_vda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/vda1 ...
保存并退出编辑器。
重新启动 NRPE 服务以使更改生效:
sudo systemctl restart nrpe.service
对要监控的每个附加服务器重复本节中的步骤。
在您要监控的主机上完成安装和配置 NRPE 后,您必须将这些主机添加到您的 Nagios 服务器配置中,然后它才会开始监控它们。 接下来让我们这样做。
第 6 步 – 使用 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 只会告诉您主机是启动还是关闭。 让我们添加一些服务来监控。
首先,添加这个块来监控 CPU 使用率:
/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 CPU load 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 并将其配置为监控至少一台远程计算机的 CPU 和磁盘使用情况。
现在您正在监控主机及其一些服务,您可以开始使用 Nagios 来监控您的关键任务服务。 您可以使用 Nagios 为关键事件设置通知。 例如,当您的磁盘利用率达到警告或严重阈值时,您可能会收到一封电子邮件,或者您的主网站关闭时会收到通知。 通过这种方式,您可以及时解决问题,甚至可以在问题发生之前解决。