介绍
在本教程中,我们将介绍在 Ubuntu 14.04 上安装开源监控系统 Icinga。 我们将介绍一些基本配置,因此您将能够通过 Web 界面监控网络服务和主机资源。 我们还将利用 Nagios 远程插件执行器 (NRPE),它将作为代理安装在远程系统上,以监控其本地资源(磁盘使用情况、登录用户数量等)。
Icinga 是一个流行的开源监控系统,它检查主机和服务,并通知您它们的状态。 Icinga 是 Nagios 的一个分支,因此它们兼容并具有许多相似之处,并且由于与 Nagios 相比更灵活的开发周期,它越来越受欢迎。
先决条件
要完成本教程,您将需要 Ubuntu 14.04 VPS 的 root 访问权限。 可以在此处找到设置说明(步骤 3 和 4): 使用 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 根用户密码
- PostFix 配置:选择“Internet 站点”
- PostFix 配置:输入您的完全限定域名(例如 example.com)
- 配置icinga-cgi:输入“icingaadmin”用户密码(登录访问Icinga)。
- 配置 icinga-common:输入“No”以启用外部命令
- 配置 icinga-idoutils:输入“是”以使用 dbconfig-common 为 icinga-idoutils 配置数据库
- 配置 icinga-idoutils:选择“mysql”作为数据库类型
- 配置 icinga-idoutils:输入 MySQL root 密码(您刚刚在上面分配的密码)
- 配置 icinga-idoutils:输入新的 icinga-idoutils 数据库用户密码
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 地址
- command[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
值替换为主机描述,以及address
值与远程主机的私有 IP 地址:
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 有很多功能,所以请随意浏览界面,看看您能发现哪些关于您的主机和服务的信息。
结论
既然您监控了您的主机和它们的一些服务,您可能需要花一些时间来确定哪些服务对您至关重要,因此您可以开始监控这些服务。 您可能还需要设置通知,例如,当您的磁盘利用率达到警告或严重阈值或您的主网站关闭时,您会收到一封电子邮件,这样您就可以及时解决问题,甚至在问题发生之前解决问题。
祝你好运!