使用Nagios监控你的Ubuntu服务器

介绍

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在防火墙或VPN后面运行。如果Nagios服务器暴露给公共Internet,则应使用SSL/TLS保护Nagios Web界面。为此,您应该执行以下操作:
- 配置域名以指向您的服务器。保护你网站的最简单方法是使用[腾讯云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服务器

ssh sammy@your_nagios_server_ip

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

sudo useradd nagios
sudo groupadd nagcmd

然后将用户添加到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并配置Nagios来使用它。我们不会在本教程中介绍Postfix,但如果您以后选择使用Postfix和Nagios,则需要重新配置并重新安装Nagios才能使用Postfix。

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

*** 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以及他的init脚本及其默认配置文件:

sudo make install
sudo make install-commandmode
sudo make install-init
sudo make install-config

您将使用Apache来安装Nagios的Web界面,因此将Nagios 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从各种主机收集数据。

第二步、安装check_nrpe插件

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

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

让我们在Nagios服务器上安装check_nrpe插件。在NagiosExchange站点上找到最新稳定版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服务器。

第三步、配置Nagios

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

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

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

在文件中找到这一行:

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

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

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命令行并将其值替换为您自己的电子邮件地址:

...
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$
}

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

保存并退出编辑器。

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

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.confsites-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页面,请找到此行的两个匹配项:

#  SSLRequireSSL

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

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

Order allow,deny
Allow from all

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

# Order allow,deny
# Allow from all

然后找到以下行:

#  Order deny,allow
#  Deny from all
#  Allow from 127.0.0.1

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

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应用程序。

[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界面。

第四步、访问Nagios Web界面

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

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

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

第六步、在主机上安装NPRE

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

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

ssh sammy@your_monitored_server_ip

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

sudo useradd nagios

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

sudo apt-get update
sudo apt-get install build-essential libgd2-xpm-dev openssl libssl-dev unzip

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中一样。在NagiosExchange站点上找到最新稳定版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-*

通过指定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地址添加到逗号分隔列表中:

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

您将看到以下输出:

...
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端口即可:

sudo ufw allow 5666/tcp

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

/usr/local/nagios/libexec/check_nrpe -H remote_host_ip

您将看到以下输出:

NRPE v3.2.1

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

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

df -h /

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

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文件:

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

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

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

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

...
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服务器配置中,然后才能开始监视它们。

第七步、使用Nagios监控主机

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

在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值,使用远程主机的IP地址替换address值:

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使用情况:

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服务模板的值。

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

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并将其配置为监视至少一台远程计算机的CPU和磁盘使用情况。

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


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

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏互扯程序

Linux常用Shell脚本,值得学习及收藏

在运维中,尤其是linux运维,都知道脚本的重要性,脚本会让我们的 运维事半功倍,所以学会写脚本是我们每个linux运维必须学会的一门功课,这里收藏linux运...

2111
来自专栏向治洪

android 接入Fabric Crashlytics信息系统

客户端在迭代过程中,免不了会发生很多的问题,而收集问题成了很重要的一步。现在市面上关于客户端Crash收集的系统也很多,比如友盟,TalkingData,Cra...

4717
来自专栏运维

Cacti插件安装之nagios

一,安装nagios useradd nagios必须的,要不make install时过不去 wget http://cdnetworks-kr-1.d...

1244
来自专栏腾讯Bugly的专栏

H5 缓存机制浅析 移动端 Web 加载性能优化

1 H5 缓存机制介绍 H5,即 HTML5,是新一代的 HTML 标准,加入很多新的特性。离线存储(也可称为缓存机制)是其中一个非常重要的特性。H5 引入的离...

3802
来自专栏逸鹏说道

福利:ASP.NET免费服务器~支持MVC和Net4.5

1.先注册一个号。地址:https://appharbor.com/ 2.看看有没有你需要的插件,基本上都是免费的 ? 3.本地创建git库 ? ? ? 4....

3986
来自专栏kevin-blog

linux给终端、git设置代理

因为我大中国的国情~(咳咳,你们懂得),很多时候给我们造成很多不便,一些软件的下载,需要挂代理才能完成,而在linux下,怎么给我们的终端设置代理呢?

5581
来自专栏Java学习网

Java通过Socket实现TCP编程,实现用户登录之服务器相应客户端,客户端和服务端之间的通信

9131
来自专栏电光石火

Eclipse安装SVN插件

SVN插件下载地址及更新地址,你根据需要选择你需要的版本。现在最新是1.8.x Links for 1.8.x Release: Eclipse u...

18010
来自专栏生信技能树

perl模块安装大全

今天又有小伙伴微信问我perl模块安装的问题,因为ENSEMBL发布的大多数数据库以及软件都是基于perl的,尤其是分量很重的VEP,所以即使你再如何如何的讨厌...

4977
来自专栏王磊的博客

PowerDesigner版本控制器设置权限

PowerDesigner版本控制权限之前一直在Groups里面设置,一直没有效果,原因终于找出来了,PowerDesigner是要对每个库单独赋权限的,步骤如...

37012

扫码关注云+社区

领取腾讯云代金券