如何使用 Icinga 在 Ubuntu 14.04 上监控您的服务器和服务
介绍
在本教程中,我们将介绍在 Ubuntu 14.04 上安装开源监控系统 Icinga。我们将介绍一些基本配置,以便您能够通过 Web 界面监控网络服务和主机资源。我们还将利用 Nagios 远程插件执行器 (NRPE),它将作为代理安装在远程系统上以监控其本地资源(磁盘使用情况、登录用户数量等)。
Icinga 是一种流行的开源监控系统,可以检查主机和服务,并通知您它们的状态。 Icinga 是 Nagios 的一个分支,因此它们兼容并有许多相似之处,并且由于与 Nagios 相比更敏捷的开发周期,它越来越受欢迎。
先决条件
要完成本教程,您需要 root 访问 Ubuntu 14.04 VPS。可以在此处找到设置说明(步骤 3 和 4):Initial Server Setup with Ubuntu 14.04。
此外,如果要设置邮件通知功能,则需要正确配置 Postfix。可以在此处找到相关说明:如何在 Ubuntu 14.04 上安装和设置 Postfix。 Postfix 与 Icinga 软件包一起安装,但可以在设置 Icinga 后对其进行配置。
安装 Icinga
我们将使用包安装 Icinga。此外,我们将使用 MySQL 作为我们的 DBMS——PostgreSQL、SQLite 和 Oracle 是其他受支持的选项。
运行以下命令将 Icinga PPA 添加到包管理器中:
sudo add-apt-repository ppa:formorer/icinga
然后更新你的 apt 包数据库:
sudo apt update
现在使用 apt 安装 Icinga 和 MySQL:
sudo apt install icinga icinga-doc icinga-idoutils mysql-server libdbd-mysql mysql-client
现在您将看到一系列关于 Icinga 安装的提示。以下是提示列表,以及您应该如何回答它们:
- MySQL 配置:输入新的 MySQL root 用户密码
- PostFix 配置:选择“Internet 站点”
- PostFix 配置:输入您的完全限定域名(例如 example.com)
- 配置icinga-cgi:输入“icingaadmin”用户密码(登录访问Icinga)。
- 配置 icinga-common:输入“否”以启用外部命令
- 配置 icinga-idutils:输入“是”以使用 dbconfig-common 为 icinga-idutils 配置数据库
- 配置icinga-idutils:选择“mysql”作为数据库类型
- 配置 icinga-idutils:输入 MySQL root 密码(您刚刚在上面分配的密码)
- 配置 icinga-idutils:输入新的 icinga-idutils 数据库用户密码
Icinga 现在已经安装好了,但是在我们启动它之前我们还需要配置一些东西。请注意,Apache HTTP 服务器和 Postfix 是作为该过程的一部分安装的。
将 Apache 用户 (www-data) 添加到 nagios 组:
sudo usermod -a -G nagios www-data
使 ido2db 守护进程在启动时启动,它将 Icinga 事件和配置存储在数据库中。编辑 Icinga 默认配置:
sudo vi /etc/default/icinga
将 IDO2DB
的值更改为 yes,因此它看起来如下所示:
IDO2DB=yes
保存并退出。现在启动 ido2db
服务:
sudo service ido2db start
通过将示例 idoutils.cfg 文件复制到 Icinga 的活动配置来启用 idomod 模块:
sudo cp /usr/share/doc/icinga-idoutils/examples/idoutils.cfg-sample /etc/icinga/modules/idoutils.cfg
现在 Icinga 已配置并准备启动:
sudo service icinga restart
让我们试试 Icinga 用户界面。
访问 Icinga 用户界面
转到 http://yourhost/icinga,并使用您在 Icinga 安装期间设置的 icingaadmin 登录名登录。
您应该看到 Icinga 正在监视一台主机 localhost(您的 Icinga 服务器)和七项服务,如下所示:

最上面一行显示单个被监控的主机是“Up”,最下面一行显示有七个“OK”的被监控服务。
如果 localhost 的状态为“Down”,您可能需要更改 ping 命令的权限。运行以下命令以允许 nagios 用户使用 ping命令:
sudo chmod u+s `which ping`
让我们添加更多要监控的主机和服务!
使用 Icinga 进行监控的方法
使用 Icinga 监控主机和服务有两种主要方式:
- 监控“公共服务”
- 通过安装在远程主机上的代理进行监控,以收集数据并将数据发送到 Icinga

对于第一种方法,公共可用服务是指可通过本地网络或 Internet 访问的服务。常见示例包括 HTTP、邮件、SSH 和 ICMP ping。此方法可用于监控您不能(或不想)安装代理的系统,也可用于监控面向用户的网络接口。
为了实现第二种方法,我们将在远程主机上安装 NRPE 作为代理来监视它们的本地资源。这将允许 Icinga 监控第一种方法无法实现的磁盘使用情况、正在运行的进程和其他系统统计信息。
方法 1:监控公开可用的服务
因为第一种方法只是监控监听服务,所以这种方法的配置全部在 Icinga 服务器上完成。使用此方法可以监控几件事,因此我们将演示如何监控 Web 服务器的公共接口。
使用此命令创建一个包含您的主机名的文件(将 yourhost
替换为您自己的主机名):
sudo vi /etc/icinga/objects/yourhost.cfg
现在添加以下内容,将 host_name
的值替换为您自己的主机名(在两个地方),将 alias
的值替换为主机的描述,将 address
> 使用主机的公共 IP 地址的值:
define host {
use generic-host
host_name web-1
alias A Web Server
address 107.170.xxx.xxx
}
define service {
use generic-service
host_name web-1
service_description HTTP
check_command check_http
}
现在保存并退出。重新加载您的 Icinga 配置以使任何更改生效:
sudo service icinga reload
方法 2:通过代理监控
如前所述,我们将使用 NRPE 作为我们的代理来为 Icinga 收集远程主机数据。这意味着 NRPE 必须安装在将使用此方法监视的所有主机上,并且 Icinga 服务器还需要配置为接收每个主机的数据。
让我们来看看安装 NRPE。
在远程主机上安装 NRPE
在您要监控的主机上,更新 apt:
sudo apt update
现在安装 NRPE 和 Nagios 插件:
sudo apt install nagios-plugins nagios-nrpe-server
查找根文件系统的名称(因为它是我们要监控的项目之一):
df -h /
我们将使用 NRPE 配置中的文件系统名称来监控您的磁盘使用情况(可能是 /dev/vda
)。现在打开 nrpe.cfg 进行编辑:
sudo vi /etc/nagios/nrpe.cfg
NRPE 配置文件很长而且注释很多。您需要查找和修改几行:
- server_address:设置为本主机的私有IP地址
- allowed_hosts:设置为您的 Icinga 服务器的私有 IP 地址
- 命令[check_hda1]:将
/dev/hda1
更改为您的根文件系统名称
上述三行应如下所示(替换适当的值):
server_address=client_private_IP
allowed_hosts=nagios_server_private_IP
command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/vda
请注意,如果 Icinga 服务器配置为使用它们,此文件中定义的其他几个“命令”将运行。另请注意,NRPE 将侦听端口 5666,因为设置了 server_port=5666
. 如果您有任何防火墙阻止该端口,请确保将其打开到您的 Icinga 服务器。
保存并退出。然后重启 NRPE 使更改生效:
sudo service nagios-nrpe-server restart
在要监控的主机上完成安装和配置 NRPE 后,您必须将这些主机添加到 Icinga 服务器配置中,然后它才会开始监控它们。
将远程主机添加到 Icinga 服务器配置
在您的 Icinga 服务器上,为您要在 /etc/icinga/objects
中监视的每个远程主机创建一个新的配置文件。将 yourhost 替换为您的主机名:
sudo vi /etc/icinga/objects/yourhost.cfg
添加以下主机定义,将 host_name
值替换为您的远程主机名(我在示例中使用了 \wordpress-1”),alias
值带有对主机,以及带有远程主机私有 IP 地址的 address
值:
define host {
use generic-host
host_name wordpress-1
alias My first wordpress server
address 10.128.xxx.xxx
}
然后为您要监视的服务添加任何这些服务块。请注意,check_command
的值决定了将要监视的内容,包括状态阈值。以下是您可以添加到主机配置文件中的一些示例:
平:
define service {
use generic-service
host_name wordpress-1
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}
SSH(notifications_enabled 设置为 0 禁用服务通知):
define service {
use generic-service
host_name wordpress-1
service_description SSH
check_command check_ssh
notifications_enabled 0
}
加载:
define service {
use generic-service
host_name wordpress-1
service_description Current Load
check_command check_load!5.0!4.0!3.0!10.0!6.0!4.0
}
当前用户:
define service {
use generic-service
host_name wordpress-1
service_description Current Users
check_command check_users!20!50
}
磁盘空间:
define service {
use generic-service
host_name wordpress-1
service_description Disk Space
check_command check_all_disks!20%!10%
}
如果您想知道 use generic-service
是什么意思,它只是继承默认定义的名为 \generic-service 的服务模板的值。
现在保存并退出。重新加载您的 Icinga 配置以使任何更改生效:
sudo service icinga reload
完成配置 Icinga 以监控所有远程主机后,让我们检查一下用户界面。
用户界面示例
在使用任一监控方法在几台主机上设置监控后,转到您的 Icinga 用户界面(http://youricingaserver.com/icinga,acingaadmin 登录),然后单击“服务详细信息”链接。您应该会看到您为其设置监控的所有服务的列表。
例如,这里有两台主机正在使用上述配置文件进行监控。 web-1 HTTP 服务正在通过其正常的 HTTP 端口进行监视,表明其 Web 服务器正在响应 OK 状态,并且 wordpress-1 显示其所有受监控的服务都OK。

Icinga 具有大量功能,因此请随意浏览界面以查看您可以发现有关您的主机和服务的内容。
结论
现在您已经监控了您的主机和它们的一些服务,您可能想花一些时间来弄清楚哪些服务对您至关重要,这样您就可以开始监控它们了。您可能还想设置通知,例如,当您的磁盘利用率达到警告或临界阈值或您的主要网站关闭时,您会收到一封电子邮件,这样您就可以及时或在问题发生之前解决问题。
祝你好运!