介绍
现在我们已经完成了生产应用程序服务器设置、恢复计划和备份,让我们考虑添加监控以提高我们对服务器和服务状态的认识。 监控软件(例如 Nagios、Icinga 和 Zabbix)使您能够创建仪表板和警报,向您显示应用程序设置的哪些组件需要注意。 这样做的目的是帮助您检测设置问题,并在用户遇到问题之前开始修复它们。
在本教程中,我们将 Nagios 4 设置为监控软件,并在构成我们应用程序的服务器上安装 NRPE 代理。
对于我们设置中的每台服务器,我们将设置监控以检查服务器是否启动以及它的主进程(即 apache、mysql 或 haproxy)正在运行。 虽然本监控指南并不全面(您可能需要设置我们不会在此处介绍的其他检查),但它是一个很好的起点。
先决条件
如果您想通过域名访问日志仪表板,请在您的域下创建一个 A 记录,例如“monitoring.example.com”,它指向您的 monitoring 服务器的公网 IP 地址。 或者,您可以通过公共 IP 地址访问监控仪表板。 建议您将监控 Web 服务器设置为使用 HTTPS,并通过将其置于 VPN 后面来限制对其的访问。
在监控服务器上安装 Nagios
按照以下教程在 监控 服务器上设置 Nagios:如何在 Ubuntu 14.04 上安装 Nagios 4 并监控您的服务器。 如果您愿意,也可以使用 Icinga,它是 Nagios 的一个分支。
当您到达 Monitor an Ubuntu Host with NRPE 部分时停止。
将服务器添加到 Nagios
在您设置中的每台服务器(db1、app1、app2 和 lb1)上,通过 Nagios 教程的 Monitor an Ubuntu Host with NRPE 部分。
请务必将 监控 服务器的私有主机名或 IP 地址添加到 NRPE 配置文件中的 allowed_hosts
设置中。
添加完每个主机后,您应该为要监控的每个服务器创建一个单独的文件:db1.cfg
、app1.cfg
、app2.cfg
和 [X151X ]。 每个文件都应包含引用相应主机名和地址(可以是服务器的主机名或 IP 地址)的主机定义。
设置主机和服务监控
让我们列出我们想要在每台服务器上监控的常见事物。 对于每台服务器,让我们监控以下 服务:
- 平
- SSH
- 当前负载
- 当前用户
- 磁盘利用率
让我们现在进行设置。
定义公共服务
在 Nagios 设置教程中,我们将 Nagios 配置为在 /usr/local/nagios/etc/servers
(或 Icinga 的 /etc/icinga/objects/
)中查找 .cfg
文件。 为了使事情井井有条,我们将为我们要监控的公共服务创建一个新的 Nagios 配置文件,名为“common.cfg”。
一、打开主机配置文件进行编辑
sudo vi /usr/local/nagios/etc/servers/common.cfg
添加以下服务定义,以及每个服务器的 host_name(在前面的主机定义中定义):
Nagios 配置——公共服务
define service { use generic-service host_name db1,app1,app2,lb1 service_description PING check_command check_ping!100.0,20%!500.0,60% } define service { use generic-service host_name db1,app1,app2,lb1 service_description SSH check_command check_ssh notifications_enabled 0 } define service { use generic-service host_name db1,app1,app2,lb1 service_description Current Load check_command check_nrpe!check_load } define service { use generic-service host_name db1,app1,app2,lb1 service_description Current Users check_command check_nrpe!check_users } define service{ use generic-service host_name db1,app1,app2,lb1 service_description Disk Utilization check_command check_nrpe!check_hda1 }
保存并退出。
现在我们已准备好定义特定于每个服务器的服务。 我们将从我们的数据库服务器开始。
定义 MySQL 进程
创建 NRPE 命令(在客户端)
在您的数据库服务器 db1 上,我们将配置一个新的 NRPE 命令。 打开一个新的 NRPE 配置文件,“commands.cfg”:
sudo vi /etc/nagios/nrpe.d/commands.cfg
添加以下命令定义:
NRPE 配置 (commands.cfg) — check_mysqld
command[check_mysqld]=/usr/lib/nagios/plugins/check_procs -c 1: -C mysqld
保存并退出。 这允许 NRPE 检查名为“mysqld”的进程,并在运行该名称的进程少于 1 个时报告关键状态。
重新加载 NRPE 配置:
sudo service nagios-nrpe-server reload
创建服务定义(在服务器上)
在您的 Nagios 服务器 monitoring 上,我们需要定义一个使用 NRPE 运行 check_mysqld
命令的新服务。
打开定义数据库主机的文件。 在我们的示例中,它被称为“db1.cfg”:
sudo vi /usr/local/nagios/etc/servers/db1.cfg
在文件末尾,添加此服务定义(确保 host_name
值与主机定义的名称匹配):
db1.cfg — check_mysql
define service { use generic-service host_name db1 service_description Check MySQL Process check_command check_nrpe!check_mysqld }
保存并退出。 这将 Nagios 配置为使用 NRPE 在数据库服务器上运行 check_mysqld 命令。
要使此更改生效,我们必须重新加载 Nagios。 但是,我们将首先监控 Apache 进程。
定义 Apache 进程
创建 NRPE 命令(在客户端)
在您的应用服务器 app1 和 app2 上,我们将配置一个新的 NRPE 命令。 打开一个新的 NRPE 配置文件,“commands.cfg”:
sudo vi /etc/nagios/nrpe.d/commands.cfg
添加以下命令定义:
NRPE 配置 (commands.cfg) — check_apache2
command[check_apache2]=/usr/lib/nagios/plugins/check_procs -c 1: -w 3: -C apache2
保存并退出。 这允许 NRPE 检查名为“apache2”的进程,如果没有匹配的进程正在运行,则报告严重状态,如果匹配的进程少于三个,则报告警告状态。
重新加载 NRPE 配置:
sudo service nagios-nrpe-server reload
请务必在任何其他应用程序服务器上重复此操作。
创建服务定义(在服务器上)
在您的 Nagios 服务器 monitoring 上,我们需要定义一个使用 NRPE 运行 check_apache2
命令的新服务。
打开定义应用程序主机的文件。 在我们的示例中,它们被称为“app1.cfg”和“app2.cfg”:
sudo vi /usr/local/nagios/etc/servers/app1.cfg
在文件末尾,添加此服务定义(确保 host_name
值与主机定义的名称匹配):
app1.cfg 和 app2.cfg — check_apache2
define service { use generic-service host_name app1 service_description Check Apache2 Process check_command check_nrpe!check_apache2 }
保存并退出。 这会将 Nagios 配置为使用 NRPE 在应用程序服务器上运行 check_apache2 命令。 请务必为您的每个应用程序服务器重复此操作。
要使此更改生效,我们必须重新加载 Nagios。 但是,在此之前,我们将继续监控 HAProxy 进程。
定义 HAProxy 进程
创建 NRPE 命令(在客户端)
在您的负载平衡器服务器 lb1 上,我们将配置一个新的 NRPE 命令。 打开一个新的 NRPE 配置文件,“commands.cfg”:
sudo vi /etc/nagios/nrpe.d/commands.cfg
添加以下命令定义:
NRPE 配置 (commands.cfg) — check_haproxy
command[check_haproxy]=/usr/lib/nagios/plugins/check_procs -c 1: -C haproxy
保存并退出。 这允许 NRPE 检查名为“haproxy”的进程,并在运行该名称的进程少于 1 个时报告临界状态。
重新加载 NRPE 配置:
sudo service nagios-nrpe-server reload
请务必在任何其他应用程序服务器上重复此操作。
创建服务定义(在服务器上)
在您的 Nagios 服务器 monitoring 上,我们需要定义一个使用 NRPE 运行 check_haproxy
命令的新服务。
打开定义数据库主机的文件。 在我们的示例中,它被称为“lb1.cfg”:
sudo vi /usr/local/nagios/etc/servers/lb1.cfg
在文件末尾,添加此服务定义(确保 host_name
值与主机定义的名称匹配):
lb1.cfg — check_haproxy
define service { use generic-service host_name lb1 service_description Check HAProxy Process check_command check_nrpe!check_haproxy }
这会将 Nagios 配置为使用 NRPE 在负载均衡器服务器上运行 check_haproxy 命令。
要使此更改生效,我们必须重新加载 Nagios。
重新加载 Nagios 配置
要重新加载 Nagios,并使我们的所有更改生效,请输入以下命令:
sudo service nagios reload
如果配置中没有语法错误,则应该设置。
检查 Nagios 服务
在继续之前,您需要验证 Nagios 是否正在监控您定义的所有主机和服务。 通过其公共主机名或 IP 地址访问您的 Nagios 服务器,例如 http://monitoring.example.com/nagios/
。 输入您在安装 Nagios 服务器期间设置的登录名。
在侧面菜单中,单击 Services 链接。 您应该被带到如下所示的页面:
理想情况下,您会看到每个主机和所有服务都处于“正常”状态。 在屏幕截图中,我们可以看到 app2 服务器存在问题,因为它在最近的状态检查期间已关闭。 如果您的任何服务不“正常”,请修复它们,或者,如果服务正常,请检查您的 Nagios 配置是否有错误。
其他注意事项
您很可能希望为您的监控服务器创建一个恢复计划,并备份您的 Nagios 配置文件 (/usr/local/nagios/etc
)。 设置备份后,您可能需要配置监控、附加服务和电子邮件通知。
结论
现在,您应该能够通过简单地查看监控仪表板来查看服务器和服务的状态。 如果发生中断,您的监控系统将帮助您确定哪些服务器和服务未正常运行,这将有助于减少应用程序的停机时间。
继续下一个教程,开始为您的生产服务器设置设置集中式日志记录:为生产而构建:Web 应用程序 - 集中式日志记录 。