本页目录

  • 准备工作
  • 第 1 步 - 配置防火墙
  • 第 2 步 - 安装 Apache 和 PHP
  • 第 3 步 - 安装 Nagios 安装依赖项 下载 Nagios 编译 Nagios 创建 Nagios 用户和组 安装 Nagios 二进制文件 创建外部命令目录 安装 Nagios 配置文件 安装 Apache 配置文件 创建 Systemd 服务文件 启用 HTTP 身份验证
  • 第 4 步 - 安装 Nagios 插件
  • 第 5 步 - 安装 check_nrpe 插件
  • 第 6 步 - 启动 Nagios Nagios Web 界面
  • 第 7 步 - 监控主机 安装 Nagios 插件 安装 NRPE 检查监控项
  • 第 8 步 - 安装 Nginx
  • 第 9 步 - 安装并配置 SSL
  • 第 10 步 - 配置 Nginx 配置 SELinux
  • 结语
  • 安装依赖项
  • 下载 Nagios
  • 编译 Nagios
  • 创建 Nagios 用户和组
  • 安装 Nagios 二进制文件
  • 创建外部命令目录
  • 安装 Nagios 配置文件
  • 安装 Apache 配置文件
  • 创建 Systemd 服务文件
  • 启用 HTTP 身份验证
  • Nagios Web 界面
  • 安装 Nagios 插件
  • 安装 NRPE
  • 检查监控项
  • 配置 SELinux

Nagios 是一款流行且最强大的开源监控系统之一。它监控您的 IT 基础设施,确保网络、服务器、应用程序和进程平稳运行。借助监控系统,您可以在问题发生前及时发现并快速修复,从而节省成本与停机时间。

本教程将教您如何在 Rocky Linux 9 服务器上安装并配置 Nagios。我们还会进行一些基础配置,并安装 Nagios Remote Plugin Executor(NPRE),以便监控远程主机。

准备工作

  • 一台运行 Rocky Linux 9 的服务器。
  • 一个拥有 root 权限的非 sudo 用户。
  • 已禁用 SELinux。在本教程中,即使您保持启用 SELinux,它也能正常工作而不会出现任何问题。但根据您所使用的 Nagios 监控项,您要么需要配置 SELinux,要么最好保持禁用状态。
  • 另一台您想要监控、运行 Rocky Linux 9 的服务器。
  • 确保所有内容均已更新。$ sudo dnf update

一台运行 Rocky Linux 9 的服务器。

一个拥有 root 权限的非 sudo 用户。

已禁用 SELinux。在本教程中,即使您保持启用 SELinux,它也能正常工作而不会出现任何问题。但根据您所使用的 Nagios 监控项,您要么需要配置 SELinux,要么最好保持禁用状态。

另一台您想要监控、运行 Rocky Linux 9 的服务器。

确保所有内容均已更新。

$ sudo dnf update

第 1 步 - 配置防火墙

第一步是配置防火墙。Rocky Linux 服务器自带 Firewalld 防火墙。

检查防火墙是否正在运行。

$ sudo firewall-cmd --state

您应该会得到如下输出。

running

检查当前允许的服务/端口。

$ sudo firewall-cmd --permanent --list-services

它应显示如下输出。

dhcpv6-client mdns ssh

允许 HTTP 和 HTTPS 端口。

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

重新检查防火墙状态。

$ sudo firewall-cmd --permanent --list-services

您应该会看到类似的输出。

dhcpv6-client http https mdns ssh

重新加载防火墙。

$ sudo firewall-cmd --reload

第 2 步 - 安装 Apache 和 PHP

要运行 Nagios,您需要安装 Apache 以及 PHP。

安装并启用 Apache 服务。

$ sudo dnf install httpd
$ sudo systemctl enable httpd

要安装 PHP,我们将使用 Remi 仓库。安装 Remi 仓库并启用 PHP 8.1。

$ sudo dnf install dnf-utils http://rpms.remirepo.net/enterprise/remi-release-9.rpm
$ sudo dnf module reset php -y
$ sudo dnf module enable php:remi-8.1 -y

安装 PHP 以及几个常用的 PHP 模块。

$ sudo dnf install -y php php-gd php-curl

验证 PHP 安装。

$ php --version
PHP 8.1.16 (cli) (built: Feb 14 2023 18:59:41) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.1.16, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.16, Copyright (c), by Zend Technologies

启用 PHP 并启动该服务。

$ sudo systemctl enable --now php-fpm

重启 Apache 服务以使更改生效。

$ sudo systemctl restart httpd

您可以通过在 Apache 安装程序创建的 /var/www/html 目录中创建一个 info.php 文件来检查 Apache 和 PHP 的安装情况。

$ sudo nano /var/www/html/info.php

在编辑器中粘贴以下代码。

<?php phpinfo();

按下 Ctrl + X 保存文件,并在提示时输入 Y。

在浏览器中打开 URL http:///info.php,您应该会看到如下页面。

在 Rocky Linux 9 上安装并配置 Nagios 监控系统

第 3 步 - 安装 Nagios

本教程的大部分步骤都需要您在您的主服务器上进行安装和操作。

安装依赖项

本教程需要基于源代码编译 Nagios 及其插件。因此,您首先需要安装一些开发库。我们还需要 EPEL 仓库,但它在上一步中已随 Remi 仓库自动安装,因此这里可以跳过。

$ sudo dnf install gcc glibc glibc-common gd gd-devel make net-snmp openssl-devel unzip wget gettext autoconf net-snmp-utils postfix automake perl-Net-SNMP

下载 Nagios

从 Nagios 的 GitHub 发布页面下载最新版本。在本教程撰写时,4.4.10 是最新可用版本。如果您想使用其他版本,请修改命令。

$ cd ~
$ sudo wget -O nagios.tar.gz https://github.com/NagiosEnterprises/nagioscore/releases/download/nagios-4.4.10/nagios-4.4.10.tar.gz

解压 tar 文件。

$ sudo tar zxf nagios.tar.gz

将解压后的目录移动到 /usr/src 目录。

sudo mv nagios-4.4.10 /usr/src/nagios

切换到 /usr/src/nagios 目录。

$ cd /usr/src/nagios

编译 Nagios

下一步是从源代码文件编译 Nagios。运行 configure 脚本进行检查,以确保所有依赖项都已就绪。

$ sudo ./configure

脚本成功完成后,您应该会看到类似的输出。

*** Configuration summary for nagios 4.4.10 2023-01-17 ***:

 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/httpd/conf.d
             Mail program:  /usr/sbin/sendmail
                  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.

开始编译。

$ sudo make all

创建 Nagios 用户和组

创建一个新用户和组,用于运行 Nagios 进程。

$ sudo make install-groups-users

您应该会看到如下输出。

groupadd -r nagios
useradd -g nagios nagios

将 apache 用户添加到 nagios 组。

$ sudo usermod -a -G nagios apache

安装 Nagios 二进制文件

运行以下命令以安装 Nagios 二进制文件、CGI 和 HTML 文件。

$ sudo make install

创建外部命令目录

Nagios 可以处理来自外部应用程序的命令,为此它需要设置一个目录。

$ sudo make install-commandmode
/bin/install -c -m 775 -o nagios -g nagios -d /usr/local/nagios/var/rw
chmod g+s /usr/local/nagios/var/rw

*** External command directory configured ***

安装 Nagios 配置文件

安装示例配置文件。

$ sudo make install-config

安装 Apache 配置文件

运行以下命令以安装 Apache 配置文件。

$ sudo make install-webconf

重启 Web 服务器以激活配置。

$ sudo systemctl restart httpd

创建 Systemd 服务文件

运行以下命令以安装 systemd unit 文件。

$ sudo make install-daemoninit

启用 HTTP 身份验证

您可以通过 HTTP 身份验证锁定 Nagios Web 界面。运行以下命令,使用 htpasswd 创建用户。系统会提示您输入密码。

$ sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
New password:
Re-type new password:
Adding password for user nagiosadmin

该用户的默认名称是 nagiosadmin。您可以使用其他用户名,方法是将 /usr/local/nagios/etc/cgi.cfg 文件中所有 nagiosadmin 的实例替换为首选用户名。或者,您可以使用逗号(如下所示)添加用户名。

authorized_for_system_information=nagiosadmin, username1
authorized_for_configuration_information=nagiosadmin, username1
authorized_for_system_commands=nagiosadmin, username1
authorized_for_all_services=nagiosadmin, username1
authorized_for_all_hosts=nagiosadmin, username1
authorized_for_all_service_commands=nagiosadmin, username1
authorized_for_all_host_commands=nagiosadmin, username1

您可以通过在文件中移除该行前面的井号(#)来启用以下配置,从而添加具有只读访问权限的用户。然后,使用用户名运行 htpasswd。

authorized_for_read_only=username2

重启服务器以使配置生效。

$ sudo systemctl restart httpd

第 4 步 - 安装 Nagios 插件

安装 Nagios 插件所需的先决条件。

$ sudo dnf install epel-release
$ sudo dnf install -y gcc glibc glibc-common make gettext automake autoconf wget openssl-devel net-snmp net-snmp-utils postgresql-devel openldap-devel bind-utils samba-client fping openssh-clients lm_sensors perl-Net-SNMP

从 Nagios 插件的 GitHub 页面下载最新版本。在本教程撰写时,2.4.3 是最新可用版本。如果您想使用其他版本,请修改命令。

$ cd ~
$ sudo wget -O nagios-plugins.tar.gz https://github.com/nagios-plugins/nagios-plugins/releases/download/release-2.4.3/nagios-plugins-2.4.3.tar.gz

解压 tar 文件。

$ sudo tar zxf nagios-plugins.tar.gz

将解压后的目录移动到 /usr/src 目录。

$ sudo mv nagios-plugins-2.4.3 /usr/src/nagios-plugins

切换回 /usr/src/nagios-plugins 目录。

$ cd /usr/src/nagios-plugins

运行以下命令以编译并安装插件。

$ sudo ./configure
$ sudo make
$ sudo make install

第 5 步 - 安装 check_nrpe 插件

从 NRPE 的 GitHub 发布页面下载最新版本。在撰写本教程时,最新可用版本是 4.1.0。如果您想使用其他版本,请修改以下命令。

$ cd ~
$ wget https://github.com/NagiosEnterprises/nrpe/releases/download/nrpe-4.1.0/nrpe-4.1.0.tar.gz

解压归档文件。

$ tar zxf nrpe-*.tar.gz

将解压后的目录移动到 /usr/src 目录。

$ sudo mv nrpe-4.1.0 /usr/src/nrpe

切换到 /usr/src/nrpe 目录。

$ cd /usr/src/nrpe

配置并安装该插件。

$ sudo ./configure
$ sudo make check_nrpe
$ sudo make install-plugin

这会将 check_nrpe 插件放置到 /usr/local/nagios/libexec/ 目录中。

第 6 步 - 启动 Nagios

安装好 Nagios 和插件后,现在可以启动 Nagios 服务了。

$ sudo systemctl start nagios

检查服务状态,确认其是否正常运行。

$ sudo systemctl status nagios

Nagios Web 界面

在浏览器中打开 URL http:///nagios。您应该会看到登录提示。

输入您在 HTTP 身份验证过程中创建的凭据,您应该会看到如下屏幕。

在 Rocky Linux 9 上安装并配置 Nagios 监控系统

第 7 步 - 监控主机

要监控某台主机,您需要在该主机上安装 NRPE 守护进程和 Nagios 插件。我们将从 Nagios 服务器监控一台 Rocky Linux 9 服务器。

登录到您的主机。

$ ssh user@monitored_server_ip

安装 Nagios 插件

通过重复之前的第 4 步来安装 Nagios 插件。

安装 NRPE

安装 NRPE 守护进程所需的先决条件。

$ sudo dnf install -y gcc glibc glibc-common openssl openssl-devel perl wget

下载 NRPE。

$ cd ~
$ wget https://github.com/NagiosEnterprises/nrpe/releases/download/nrpe-4.1.0/nrpe-4.1.0.tar.gz

解压归档文件。

$ tar zxf nrpe-*.tar.gz

将解压后的目录移动到 /usr/src 目录。

$ sudo mv nrpe-4.1.0 /usr/src/nrpe

切换到 NRPE 目录。

$ cd /usr/src/nrpe

配置并安装 NRPE。

$ sudo ./configure --enable-command-args
$ sudo make all

创建用户和组。

$ sudo make install-groups-users

安装 NRPE 二进制文件、NRPE 守护进程以及 check_npre 插件。

$ sudo make install

安装配置文件。

$ sudo make install-config

更新 services 文件。/etc/services 文件用于将服务名称映射到端口号。

$ sudo sh -c "echo >> /etc/services"
$ sudo sh -c "sudo echo '# Nagios services' >> /etc/services"
$ sudo sh -c "sudo echo 'nrpe    5666/tcp' >> /etc/services"

安装 NPRE 服务守护进程。

$ sudo make install-init
$ sudo systemctl enable nrpe

您需要更新位于 /usr/local/nagios/etc/nrpe.cfg 的 NPRE 配置文件。

打开该文件进行编辑。

$ sudo nano /usr/local/nagios/etc/nrpe.cfg

默认情况下,NPRE 仅监听来自本地主机(127.0.0.1)的请求。您需要将 Nagios 服务器的 IP 地址添加到该文件中。

allowed_hosts=127.0.0.1,10.25.5.2

以下选项决定是否允许 NPRE 守护进程让客户端指定命令参数。将该值设为 1 以启用此选项,这可启用高级 NPRE 配置。

dont_blame_nrpe=1

接下来,向下滚动时您会看到一组带有定义的 NRPE 命令列表。它们全部被注释掉了。您需要取消注释,以便 Nagios 可以使用它们。

每个命令都可以传入参数。其中一些命令在前面硬编码了参数,而另一些可以接受来自用户的参数。每个命令都可以具有以下通知选项。

  • W 代表 Warning(警告)服务状态
  • C 代表 Critical(严重)服务状态
  • R 代表在服务恢复时通知(OK 状态)

因此,您可以指定命令能够在何种级别发送何种类型的通知。由于超出了本教程的范围,我们不会深入探讨每个命令的详细说明和功能。

# The following examples use hardcoded command arguments...
# This is by far the most secure method of using NRPE

command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10
command[check_load]=/usr/local/nagios/libexec/check_load -r -w .15,.10,.05 -c .30,.25,.20
command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/hda1
command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200

# The following examples allow user-supplied arguments and can
# only be used if the NRPE daemon was compiled with support for
# command arguments *AND* the dont_blame_nrpe directive in this
# config file is set to '1'.  This poses a potential security risk, so
# make sure you read the SECURITY file before doing this.

### MISC SYSTEM METRICS ###
command[check_users]=/usr/local/nagios/libexec/check_users $ARG1$
command[check_load]=/usr/local/nagios/libexec/check_load $ARG1$
command[check_disk]=/usr/local/nagios/libexec/check_disk $ARG1$
command[check_swap]=/usr/local/nagios/libexec/check_swap $ARG1$
command[check_cpu_stats]=/usr/local/nagios/libexec/check_cpu_stats.sh $ARG1$
command[check_mem]=/usr/local/nagios/libexec/custom_check_mem -n $ARG1$

### GENERIC SERVICES ###
command[check_init_service]=sudo /usr/local/nagios/libexec/check_init_service $ARG1$
command[check_services]=/usr/local/nagios/libexec/check_services -p $ARG1$

### SYSTEM UPDATES ###
command[check_yum]=/usr/local/nagios/libexec/check_yum
#command[check_apt]=/usr/local/nagios/libexec/check_apt

### PROCESSES ###
command[check_all_procs]=/usr/local/nagios/libexec/custom_check_procs
command[check_procs]=/usr/local/nagios/libexec/check_procs $ARG1$

### OPEN FILES ###
command[check_open_files]=/usr/local/nagios/libexec/check_open_files.pl $ARG1$

### NETWORK CONNECTIONS ###
command[check_netstat]=/usr/local/nagios/libexec/check_netstat.pl -p $ARG1$ $ARG2$

通过移除这些命令前面的 # 符号来取消注释。您可以根据需要取消注释任意数量的命令。

添加以下命令以检查根分区磁盘空间。

command[check_root]=/usr/lib64/nagios/plugins/check_disk -w 20% -c 10% -p /

完成后,按下 Ctrl + X 保存文件,并在提示时输入 Y。

允许 NPRE 插件使用的端口 5666。

$ sudo firewall-cmd --permanent --add-port=5666/tcp

重新加载防火墙。

$ sudo firewall-cmd --reload

启动 NPRE。

$ sudo systemctl start nrpe

除非另有说明,从此处开始的所有命令都将在主 Nagios 服务器上运行。

通过在主 Nagios 服务器上运行以下命令来检查 NRPE 是否正常工作。

$ /usr/local/nagios/libexec/check_nrpe -H monitored_server_ip

您应该会看到如下输出。

NRPE v4.1.0

要监控这些主机,您需要为每台想要监控的主机创建配置文件。随后,这些主机就可以在 Nagios Web 界面中访问了。

创建用于存储配置文件的目录,并赋予适当的权限。

$ sudo mkdir /usr/local/nagios/etc/servers
$ sudo chown -R nagios:nagios /usr/local/nagios/etc/servers
$ sudo chmod g+w /usr/local/nagios/etc/servers

打开 Nagios 配置文件 /usr/local/nagios/etc/nagios.cfg 进行编辑。

$ sudo nano /usr/local/nagios/etc/nagios.cfg

找到下面的内容,并去掉前面的 # 号取消注释。

cfg_dir=/usr/local/nagios/etc/servers

按下 Ctrl + X 保存文件,并在提示时输入 Y。

下一步是将 check_nrpe 命令添加到 /usr/local/nagios/etc/objects/commands.cfg 文件中,以便用它来监控主机。

打开文件 /usr/local/nagios/etc/objects/commands.cfg 进行编辑。

$ sudo nano /usr/local/nagios/etc/objects/commands.cfg

在文件末尾粘贴以下代码。

define command {
    command_name   check_nrpe
    command_line   $USER1$/check_nrpe -H $HOSTADDRESS$ -t 30 -c $ARG1$ $ARG2$
}

按下 Ctrl + X 保存文件,并在提示时输入 Y。

在 /usr/local/nagios/etc/servers/ 目录中为远程主机创建一个新的配置文件。

$ sudo nano /usr/local/nagios/etc/servers/yourhost.cfg

添加以下代码,将 host_name 的值替换为您的远程主机名,将 alias 的值替换为您的 host 描述,将 address 的值替换为您的远程主机 IP 地址。

define host {
        use                             linux-server
        host_name                       monitored_server_host_name
        alias                           My client server
        address                         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                       monitored_server_host_name
      service_description             PING
      check_command                   check_ping!200.0,20%!400.0,90%
}

添加以下代码块以监控服务器的平均负载。

define service {
        use                             generic-service
        host_name                       monitored_server_host_name
        service_description             Load average
        check_command                   check_nrpe!check_load!-a '-w 0.7,0.6,0.5 -c 0.9,0.8,0.7'
}

use generic-service 指令告诉 Nagios 从 Nagios 预定义的名为 generic-service 的模板继承。

接下来,添加一个代码块以监控磁盘使用情况。请根据相应的磁盘标签修改命令。

define service {
        use                             generic-service
        host_name                       monitored_server_host_name
        service_description             /dev/vda1 free space
        check_command                   check_nrpe!check_disk!-a '-w 20% -c 10% -p /dev/vda1'
}

使用以下代码块监控 SSH。以下代码块会检查 SSH 服务器,如果服务器在 5 秒内未响应则发出告警。

define service {
    use                                 generic-service
    host_name                           monitored_server_host_name
    service_description                 SSH Version Check
    check_command                       check_ssh!-t 5
}

让我们检查正在运行的总进程数。

define service{                     
    use                     			generic-service            
    host_name               			monitored_server_host_name            
    service_description     			Total Processes            
    check_command           			check_nrpe!check_total_procs
}

检查当前登录的用户。

define service{                     
    use                     			generic-service            
    host_name               			monitored_server_host_name            
    service_description     			Current Users            
    check_command           			check_nrpe!check_users!-a '-w 5 -c 10'
}

检查 SWAP 磁盘使用情况。

define service{                     
    use                     			generic-service            
    host_name               			monitored_server_host_name            
    service_description     			SWAP Usage            
    check_command           			check_nrpe!check_swap!-a '-w 40% -c 20%'
}

检查根分区及其磁盘使用情况。

define service{
    use                                  generic-service
    host_name                            nagiosclient
    service_description                  Root / Partition
    check_command                        check_nrpe!check_disk!-a '-w 20% -c 10% -p /'
}

检查是否已安装 HTTP 服务器。

define service {
    use                                  generic-service
    host_name                            nagiosclient
    service_description                  HTTP
    check_command                        check_http
}

按下 Ctrl + X 保存文件,并在提示时输入 Y。

重启 Nagios。

$ sudo systemctl restart nagios

检查监控项

打开您的 Nagios 仪表板,并从左侧边栏点击 Hosts 选项。您应该会在页面上看到新配置的主机以及 localhost。

在 Rocky Linux 9 上安装并配置 Nagios 监控系统

点击新配置的主机(nagiosclient),如果一切配置正确,您应该会看到它的状态。状态出现可能需要一分钟左右的时间。

在 Rocky Linux 9 上安装并配置 Nagios 监控系统

要查看我们配置的服务或监控项,请点击 View Status Detail For This Host 选项,您应该会看到如下页面。

在 Rocky Linux 9 上安装并配置 Nagios 监控系统

这能让您清楚地了解主机的工作状态。

第 8 步 - 安装 Nginx

您可以直接通过服务器 IP 运行 Nagios,也可以将其托管在您的域名上。Nagios 已附带 Apache 配置文件,但我们将使用 Nginx 来运行它。我们将使用 Nginx 作为 Apache Web 服务器前端的反向代理。

Apache 已经在端口 80 上运行它。因此,我们需要先更改这一点。然后,我们就可以将 Nginx 作为代理运行。

打开文件 /etc/httpd/conf/httpd.conf 进行编辑。

$ sudo nano /etc/httpd/conf/httpd.conf

将 Listen 80 这一行改为 Listen 8080。按下 Ctrl + X 保存文件,并在提示时输入 Y。由于我们将使用域名访问 Nagios,因此无需为公开访问开放端口 8080。

重启 Apache 服务器。

$ sudo systemctl restart httpd

接下来,安装 Nginx。

Rocky Linux 9 自带较旧版本的 Nginx。您需要下载官方 Nginx 仓库以安装最新版本。

创建并打开 /etc/yum.repos.d/nginx.repo 文件,以创建官方 Nginx 仓库。

$ sudo nano /etc/yum.repos.d/nginx.repo

在其中粘贴以下代码。

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

按下 Ctrl + X 保存文件,并在提示时输入 Y。

安装 Nginx 服务器。

$ sudo dnf install nginx

验证安装。

$ nginx -v
nginx version: nginx/1.22.1

启用并启动 Nginx 服务器。

$ sudo systemctl enable nginx --now

第 9 步 - 安装并配置 SSL

在配置 Nginx 之前,我们将为打算与 Nagios 一起使用的域名设置并配置 SSL 证书。在本例中,我们将使用 http://nagios.example.com。

为此我们将使用 Snapd 软件包安装器。由于 Rocky Linux 不自带它,请安装 Snapd 安装器。它需要 EPEL 仓库才能工作,而我们已经在前面安装过了,因此可以跳过。

安装 Snapd。

$ sudo dnf install -y snapd

启用并启动 Snap 服务。

$ sudo systemctl enable snapd --now

安装 Snap core 软件包,并确保您的 Snapd 版本是最新的。

$ sudo snap install core && sudo snap refresh core

创建 Snapd 工作所需的链接。

$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh

执行以下命令以安装 Certbot。

$ sudo snap install --classic certbot

使用以下命令创建指向 /usr/bin 目录的符号链接,以确保可以运行 Certbot 命令。

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

验证安装。

$ certbot --version
certbot 2.3.0

运行以下命令以生成 SSL 证书。

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m 
[email protected]
 -d nagios.example.com

上述命令会将证书下载到您服务器上的 /etc/letsencrypt/live/nagios.example.com 目录。

生成 Diffie-Hellman 组证书。

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

对该过程进行一次试运行,以检查 SSL 续期是否正常工作。

$ sudo certbot renew --dry-run

如果您没有看到错误,说明一切就绪。您的证书将自动续期。

第 10 步 - 配置 Nginx

在配置 Nginx 之前,我们还需要做另一处修改。默认情况下,Apache 通过 http://:8080/nagios 提供 Nagios 服务。现在,我们可以直接通过 Nagios 设置代理,但它将通过 https://nagios.example.com/nagios 提供服务。我们可以在 Nginx 处将其重定向到根 URL,但这会使事情复杂化。因此,我们将直接在 Apache 和 Nagios 上进行修改。

首先,打开 /usr/local/nagios/etc/cgi.cfg 文件进行编辑。

$ sudo nano /usr/local/nagios/etc/cgi.cfg

将 url_html_path=/nagios 改为 url_html_path=/ 。

按下 Ctrl + X 保存文件,并在提示时输入 Y。

接下来,打开 /etc/httpd/conf.d/nagios.conf 进行编辑。

$ sudo nano /etc/httpd/conf.d/nagios.conf

将 ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin" 改为 ScriptAlias /cgi-bin "/usr/local/nagios/sbin" 。

通过将 Alias /nagios "/usr/local/nagios/share" 这一行注释掉,将其改为如下形式。

#Alias /nagios "/usr/local/nagios/share" 

在其下方添加以下行。

DocumentRoot /usr/local/nagios/share

在文件顶部添加以下行。

<VirtualHost *:8080>

在文件底部添加以下行。

</VirtualHost>

完成后,按下 Ctrl + X 保存文件,并在提示时输入 Y。

最后,打开文件 /usr/local/nagios/share/config.inc.php 进行编辑。

$ sudo nano /usr/local/nagios/share/config.inc.php

将 $cfg['cgi_base_url']='/nagios/cgi-bin'; 改为 $cfg['cgi_base_url']='/cgi-bin'; 。

按下 Ctrl + X 保存文件,并在提示时输入 Y。

重启 Apache 和 Nagios。

$ sudo systemctl restart httpd
$ sudo systemctl restart nagios

要确认一切正常工作,请在浏览器中打开 URL http://:1080,您应该会看到 Nagios 正常运行。同时,请确保正在接收主机数据。

一旦一切正常,我们就可以继续为 Nginx 创建配置文件。

在 /etc/nginx/conf.d 目录中为 Nagios 创建一个配置文件。

$ sudo nano /etc/nginx/conf.d/nagios.conf

在其中粘贴以下代码。

server {
    	listen 80; listen [::]:80;
	    server_name nagios.example.com;
    	return 301 https://$host$request_uri;
}

server {
        server_name nagios.example.com;

        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        access_log /var/log/nginx/nagios.access.log;
        error_log /var/log/nginx/nagios.error.log;

        ssl_certificate /etc/letsencrypt/live/nagios.example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/nagios.example.com/privkey.pem;
        ssl_trusted_certificate /etc/letsencrypt/live/nagios.example.com/chain.pem;
        ssl_session_timeout 1d;
        ssl_session_cache shared:MozSSL:10m;
        ssl_session_tickets off;

        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_dhparam /etc/ssl/certs/dhparam.pem;
 
	   location / {
	       proxy_pass http://127.0.0.1:8080;
	       proxy_set_header Host $host;
	       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	       proxy_set_header X-Real-IP $remote_addr;
	       proxy_set_header X-Forwarded-Proto $scheme;
	   }
}

完成后,按下 Ctrl + X 保存文件,并在提示时输入 Y。

验证配置文件。

$ sudo nginx -t

如果您遇到以下错误,您需要编辑 /etc/nginx/nginx.conf 文件,以添加/调整变量 server_names_hash_bucket_size 的大小。

nginx: [emerg] could not build the server_names_hash, you should increase server_names_hash_bucket_size

打开文件 /etc/nginx/nginx.conf 进行编辑。

$ sudo nano /etc/nginx/nginx.conf

在前面添加以下行

server_names_hash_bucket_size  64;

完成后,按下 Ctrl + X 保存文件,并在提示时输入 Y。再次验证 Nginx。

如果没有问题,则重启 Nginx 服务器。

$ sudo systemctl restart nginx

配置 SELinux

如果您保持启用了 SELinux,请运行以下命令以允许 Nginx 连接网络。

$ sudo setsebool -P httpd_can_network_connect on

在浏览器中打开域名 https://nagios.example.com,您应该会看到 Nagios 主页。

结语

您已在 Rocky Linux 9 服务器上安装并配置了 Nagios,以监控负载、磁盘/SWAP 使用情况、用户、总进程数、HTTP 和 SSH 等多项服务。本教程到此结束。要了解更多信息,您应查阅官方 Nagios 文档,其中详细介绍了监控和各种命令。如果您有任何疑问,请在下方评论区留言。