如何在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 rewritecgi 模块:

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 为关键事件设置通知。 例如,当您的磁盘利用率达到警告或严重阈值时,您可能会收到一封电子邮件,或者您的主网站关闭时会收到通知。 通过这种方式,您可以及时解决问题,甚至可以在问题发生之前解决。