前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Nagios监控你的Ubuntu服务器

使用Nagios监控你的Ubuntu服务器

原创
作者头像
灬半痴
发布2018-08-01 12:04:43
2.3K0
发布2018-08-01 12:04:43
举报

介绍

Nagios是一个流行的电脑系统和网络监控程序,它检测主机和服务,当异常发生和解除时能提醒用户。它是基于GPLv2开发的开源软件,可免费获得及使用。 使用Nagios这样的监控系统是生产环境的必备工具,通过监控系统运行时间,CPU使用率或磁盘空间,您可以在问题发生之前解决用户问题。

在本教程中,您将安装Nagios 4并对其进行配置,您可以通过Nagios的Web界面监控主机资源。您还将设置Nagios Remote Plugin Executor插件,它在远程主机上作为代理运行,您可以用他监视其他资源。

准备

要完成本教程,您需要以下内容:

  • 两个配置了有公网地址的Ubuntu 16.04服务器,使用sudo权限的非root用户和防火墙。您将使用第一台服务器运行Nagios,第二台服务器将配置为Nagios可以监控的远程主机。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后在购买服务器
  • 运行Nagios的服务器也需要安装Apache和PHP,没有安装的话,可以参考这个如何在Ubuntu 18.04上安装LAMP
  • 通常,Nagios在防火墙或V**后面运行。如果Nagios服务器暴露给公共Internet,则应使用SSL/TLS保护Nagios Web界面。为此,您应该执行以下操作:
代码语言:javascript
复制
- 配置域名以指向您的服务器。保护你网站的最简单方法是使用[腾讯云SSL证书服务](https://cloud.tencent.com/product/ssl),它提供免费的可信证书。[腾讯云SSL证书安装操作指南](https://cloud.tencent.com/document/product/400/6814)进行设置。
- **如果你没有域名**,如果你只是使用此配置进行测试或个人使用,则可以使用自签名证书。自签名证书提供了相同类型的加密,但没有域名验证公告。关于自签名证书,你可以参考为[Apache创建自签名SSL证书](https://cloud.tencent.com/developer/article/1165840)这篇文章。

第一步、安装Nagios 4

有多种方法可以安装Nagios,我们将从源代码安装Nagios及其组件,以确保我们获得最新的功能及安全更新和BUG修复。

登录到运行Apache的服务器。我们称之为Nagios服务器

代码语言:javascript
复制
ssh sammy@your_nagios_server_ip

创建一个nagios用户和nagcmd组。您将使用它们来运行Nagios。

代码语言:javascript
复制
sudo useradd nagios
sudo groupadd nagcmd

然后将用户添加到nagcmd组:

代码语言:javascript
复制
sudo usermod -a -G nagcmd nagios

因为我们需要从源代码构建了Nagios及其组件,所以我们必须安装一些开发库来完成构建,包括编译器,开发软件包及OpenSSL。

更新软件包列表以确保您可以下载最新版本:

代码语言:javascript
复制
sudo apt-get update

然后安装所需的包:

代码语言:javascript
复制
sudo apt-get install build-essential libgd2-xpm-dev openssl libssl-dev unzip

接下来,我们可以自行安装Nagios。下载Nagios Core最新稳定版的源代码。转到Nagios下载页面,然后单击表单下方的“跳过下载”链接。复制稳定版本的链接地址,以便将其下载到Nagios服务器。

使用curl命令将其下载到您的主目录:

代码语言:javascript
复制
cd ~
curl -L -O https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.3.4.tar.gz

提取Nagios存档:

代码语言:javascript
复制
tar zxf nagios-*.tar.gz

然后切换到解压缩的目录:

代码语言:javascript
复制
cd nagios-*

在构建Nagios之前,请运行configure脚本以指定您希望Nagios使用的用户和组。使用您创建的nagios用户和nagcmd组:

代码语言:javascript
复制
./configure --with-nagios-group=nagios --with-command-group=nagcmd

如果您希望Nagios使用Postfix发送电子邮件,您必须安装Postfix并配置Nagios来使用它。我们不会在本教程中介绍Postfix,但如果您以后选择使用Postfix和Nagios,则需要重新配置并重新安装Nagios才能使用Postfix。

您将看到configure命令输出以下内容:

代码语言:javascript
复制
*** 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:

代码语言:javascript
复制
make all

现在运行make命令来安装Nagios以及他的init脚本及其默认配置文件:

代码语言:javascript
复制
sudo make install
sudo make install-commandmode
sudo make install-init
sudo make install-config

您将使用Apache来安装Nagios的Web界面,因此将Nagios Apache示例配置文件复制到/etc/apache2/sites-available文件夹:

代码语言:javascript
复制
sudo /usr/bin/install -c -m 644 sample-config/httpd.conf /etc/apache2/sites-available/nagios.conf

要通过Web界面向Nagios发出命令,请将Web服务器用户www-data添加到nagcmd组:

代码语言:javascript
复制
sudo usermod -G nagcmd www-data

Nagios现已安装。让我们来安装一个插件,允许Nagios从各种主机收集数据。

第二步、安装check_nrpe插件

Nagios使用Nagios Remote Plugin Executor来监视远程主机。它由两部分组成:

  • check_nrpeNagios服务器的插件。
  • NRPE程序,它在远程主机上运行并将数据发送到Nagios服务器。

让我们在Nagios服务器上安装check_nrpe插件。在NagiosExchange站点上找到最新稳定版NRPE的URL,使用curl将其下载到您的主目录:

代码语言:javascript
复制
cd ~
curl -L -O https://github.com/NagiosEnterprises/nrpe/releases/download/nrpe-3.2.1/nrpe-3.2.1.tar.gz

提取NRPE档案:

代码语言:javascript
复制
tar zxf nrpe-*.tar.gz

然后切换到解压缩的目录:

代码语言:javascript
复制
cd nrpe-*

配置check_nrpe插件:

代码语言:javascript
复制
./configure

构建并安装check_nrpe

代码语言:javascript
复制
make check_nrpe
sudo make install-plugin

接下来配置Nagios服务器。

第三步、配置Nagios

现在让我们执行初始的Nagios配置,编辑一些配置文件。您只需在Nagios服务器上执行一次该操作。

在文本编辑器中打开主Nagios配置文件:

代码语言:javascript
复制
sudo nano /usr/local/nagios/etc/nagios.cfg

在文件中找到这一行:

代码语言:javascript
复制
...
#cfg_dir=/usr/local/nagios/etc/servers
...

通过删除行前面的#字符取消注释此行:

代码语言:javascript
复制
cfg_dir=/usr/local/nagios/etc/servers

保存并退出编辑器。现在创建将存储监视每个服务器配置文件的目录:

代码语言:javascript
复制
sudo mkdir /usr/local/nagios/etc/servers

在文本编辑器中打开Nagios联系人配置:

代码语言:javascript
复制
sudo nano /usr/local/nagios/etc/objects/contacts.cfg

找到该email命令行并将其值替换为您自己的电子邮件地址:

代码语言:javascript
复制
...
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文件:

代码语言:javascript
复制
sudo nano /usr/local/nagios/etc/objects/commands.cfg

将以下内容添加到文件末尾以定义名为check_nrpe的新命令:

代码语言:javascript
复制
...
define command{
        command_name check_nrpe
        command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

这定义了执行插件的命令行选项。您将在步骤5中使用此命令。

保存并退出编辑器。

现在配置服Nagios WEB界面的Apache配置,使用以下命令启用Apache rewritecgi模块a2enmod

代码语言:javascript
复制
sudo a2enmod rewrite
sudo a2enmod cgi

使用htpasswd命令创建一个名为nagiosadmin的管理员用户,该用户可以访问Nagios Web界面:

代码语言:javascript
复制
sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

在提示符下输入密码。记住此密码,因为您需要它来访问Nagios Web界面。

注意:如果创建名称不是nagiosadmin的用户,则需要编辑/usr/local/nagios/etc/cgi.cfg并更改对您创建的用户nagiosadmin的所有引用。

现在您可以链接nagios.confsites-enabled目录。这将启用Nagios虚拟主机。

代码语言:javascript
复制
sudo ln -s /etc/apache2/sites-available/nagios.conf /etc/apache2/sites-enabled/

接下来,打开Nagios的Apache配置文件。

代码语言:javascript
复制
sudo nano /etc/apache2/sites-available/nagios.conf

如果您想为Apache配置HTTPS页面,请找到此行的两个匹配项:

代码语言:javascript
复制
#  SSLRequireSSL

通过删除#符号取消注释。

如果要限制可以访问Nagios Web界面的IP地址,请找到以下两行:

代码语言:javascript
复制
Order allow,deny
Allow from all

通过在它们前面添加#符号来注释它们:

代码语言:javascript
复制
# Order allow,deny
# Allow from all

然后找到以下行:

代码语言:javascript
复制
#  Order deny,allow
#  Deny from all
#  Allow from 127.0.0.1

通过删除#符号取消注释,并在Allow from行中添加要允许的IP地址或范围(空格分隔):

代码语言:javascript
复制
Order deny,allow
Deny from all
Allow from 127.0.0.1 your_ip_address

这些行在配置文件中出现了两次,因此请确保更改两次。然后保存并退出编辑器。

重新启动Apache以加载新的Apache配置:

代码语言:javascript
复制
sudo systemctl restart apache2

通过Apache配置,您可以为Nagios设置服务。Nagios没有提供Systemd单元文件来管理服务,所以让我们创建一个。创建nagios.service文件并在编辑器中打开它:

代码语言:javascript
复制
sudo nano /etc/systemd/system/nagios.service

在文件中输入以下定义。此定义指定Nagios何时应该启动以及Systemd可以在何处找到Nagios应用程序。

代码语言:javascript
复制
[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:

代码语言:javascript
复制
sudo systemctl enable /etc/systemd/system/nagios.service
sudo systemctl start nagios

Nagios现在正在运行,所以让我们登录其Web界面。

第四步、访问Nagios Web界面

访问http://nagios_server_public_ip/nagios,在显示的弹出窗口中输入Web界面的登录凭据。我们这里使用nagiosadmin作为用户名,以及为该用户创建的密码。

身份验证后,您将看到默认的Nagios主页。单击左侧导航栏中的Hosts链接,查看Nagios正在监控的主机:

如您所见,Nagios仅监视“localhost”或其本身。让我们设置使用Nagios监控我们的其他服务器。

第六步、在主机上安装NPRE

让我们添加一个新的主机,以便Nagios可以监控它。我们将在远程主机上安装Nagios Remote Plugin Executor(NRPE),然后配置Nagios服务器以监控该主机。

登录到第二台服务器,我们称之为受监控服务器

代码语言:javascript
复制
ssh sammy@your_monitored_server_ip

首先创建一个“nagios”用户,它将运行NRPE代理。

代码语言:javascript
复制
sudo useradd nagios

我们将从源代码安装NRPE,这意味着您需要在Nagios服务器上安装相同的开发库。更新软件包源并安装NRPE的准备项:

代码语言:javascript
复制
sudo apt-get update
sudo apt-get install build-essential libgd2-xpm-dev openssl libssl-dev unzip

Nagios插件下载页面找到最新版本的Nagios插件。复制最新版本的链接地址,以便将其下载到Nagios服务器。

使用curl命令将Nagios插件下载到您的主目录:

代码语言:javascript
复制
cd ~
curl -L -O http://nagios-plugins.org/download/nagios-plugins-2.2.1.tar.gz

解压缩Nagios插件:

代码语言:javascript
复制
tar zxf nagios-plugins-*.tar.gz

切换到解压缩的目录:

代码语言:javascript
复制
cd nagios-plugins-*

在构建Nagios插件之前,将其配置为使用nagios用户和组,并配置OpenSSL支持:

代码语言:javascript
复制
./configure --with-nagios-user=nagios --with-nagios-group=nagios --with-openssl

现在编译插件:

代码语言:javascript
复制
make

然后安装它们:

代码语言:javascript
复制
sudo make install

接下来,安装NRPE。在Nagios Exchange站点上查找NRPE最新稳定版本的下载URL,就像在步骤1中一样。在NagiosExchange站点上找到最新稳定版NRPE的URL,使用curl将其下载到您的主目录:

代码语言:javascript
复制
cd ~
curl -L -O https://github.com/NagiosEnterprises/nrpe/releases/download/nrpe-3.2.1/nrpe-3.2.1.tar.gz

使用以下命令提取NRPE存档:

代码语言:javascript
复制
tar zxf nrpe-*.tar.gz

然后切换到解压缩的目录:

代码语言:javascript
复制
cd nrpe-*

通过指定Nagios用户和组来配置NRPE,并告诉它您需要SSL支持:

代码语言:javascript
复制
./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及其启动脚本:

代码语言:javascript
复制
make all
sudo make install
sudo make install-config
sudo make install-init

接下来,让我们更新NRPE配置文件:

代码语言:javascript
复制
sudo nano /usr/local/nagios/etc/nrpe.cfg

找到该allowed_hosts指令,并将Nagios服务器的私有IP地址添加到逗号分隔列表中:

代码语言:javascript
复制
allowed_hosts=127.0.0.1,::1,your_nagios_server_private_ip

这会将NRPE配置为通过其专用IP地址接受来自Nagios服务器的请求。

保存并退出编辑器。现在你可以开始使用NRPE了:

代码语言:javascript
复制
sudo systemctl start nrpe.service

通过检查其状态来确保服务正在运行:

代码语言:javascript
复制
sudo systemctl status nrpe.service

您将看到以下输出:

代码语言:javascript
复制
...
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端口,如果您使用的是腾讯云的服务器,则只需要在安全组页面放通5666端口即可:

代码语言:javascript
复制
sudo ufw allow 5666/tcp

现在您可以检查与远程NRPE服务器的通信。在Nagios服务器上运行以下命令:

代码语言:javascript
复制
/usr/local/nagios/libexec/check_nrpe -H remote_host_ip

您将看到以下输出:

代码语言:javascript
复制
NRPE v3.2.1

现在让我们配置一些Nagios可以监控的基本信息。

首先,让我们监控该服务器的磁盘使用情况。使用该df -h命令查找根文件系统。您将在NRPE配置中使用此文件系统:

代码语言:javascript
复制
df -h /

您将看到类似于此的输出:

代码语言:javascript
复制
Filesystem      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

现在在编辑器中打开/usr/local/nagios/etc/nrpe.cfg文件:

代码语言:javascript
复制
sudo nano /usr/local/nagios/etc/nrpe.cfg

NRPE的配置文件非常长。您需要查找和修改以下几行:

  • server_address:设置为受监控服务器的IP地址
  • command check_hda1:更改/dev/hda1为你服务器根文件系统的目录

找到这些设置并更改它们:

代码语言:javascript
复制
...
server_address=monitored_server_private_ip
...
command[check_vda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/vda1
...

保存并退出编辑器。

重新启动NRPE服务以使更改生效:

代码语言:javascript
复制
sudo systemctl restart nrpe.service

对于要监视其他服务器,请重复本节中的步骤。在要监视的主机上完成NRPE的安装和配置后,必须先将这些主机添加到Nagios服务器配置中,然后才能开始监视它们。

第七步、使用Nagios监控主机

要使用Nagios监视主机,您将为每个主机添加配置文件,指定要监视的内容。然后,您可以在NagiosWeb界面中查看这些主机。

在Nagios服务器上,为/usr/local/nagios/etc/servers/要监视的每个远程主机创建新的配置文件。将monitored_server_host_name替换为你的主机名称:

代码语言:javascript
复制
sudo nano /usr/local/nagios/etc/servers/your_monitored_server_host_name.cfg

添加以下主机定义,将host_name替换为远程主机名,使用主机描述替换alias值,使用远程主机的IP地址替换address值:

代码语言:javascript
复制
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使用情况:

代码语言:javascript
复制
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服务模板的值。

接下来,添加此块以监视磁盘使用情况:

代码语言:javascript
复制
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服务使更改生效:

代码语言:javascript
复制
sudo systemctl restart nagios

几分钟后,Nagios将检查新主机,您将在Nagios Web界面中看到它们。单击左侧导航栏中的服务链接以查看所有受监控的主机和服务。

结论

您已在服务器上安装Nagios并将其配置为监视至少一台远程计算机的CPU和磁盘使用情况。

您可以开始使用Nagios来监控您的关键任务,您可以使用Nagios为关键事件设置通知。例如,您可以在磁盘利用率达到警告或阈值时收到电子邮件,或在主网站关闭时收到通知。通过这种方式,您可以及时解决问题,避免主机宕机的风险。如果您使用的是腾讯云的服务器,您可以直接使用腾讯云基础监控BCM服务您可以在这里看到最全、最详细的监控数据。基础监控实时监控云服务器、云数据库、CDN等云产品,提取云产品关键指标,以监控图标形式展示,且支持设置自定义告警阈值,为您提供立体化云产品数据监控、智能化数据分析、实时化故障告警和个性化数据报表配置,让您实时、精准掌控业务和各个云产品健康状况。


参考文献:《How To Install Nagios 4 and Monitor Your Servers on Ubuntu 16.04》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 准备
  • 第一步、安装Nagios 4
  • 第二步、安装check_nrpe插件
  • 第三步、配置Nagios
  • 第四步、访问Nagios Web界面
  • 第六步、在主机上安装NPRE
  • 第七步、使用Nagios监控主机
  • 结论
相关产品与服务
SSL 证书
腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档