提供:ZStack云计算
Tutorial Series
本教程为生产环境构建指南:Web应用系列六篇中的第五篇。
内容介绍
现在我们已经拥有了一套生产应用服务器设置、一项恢复规划以及备份,下面思考如何利用监控机制掌握服务器与服务的运行状态。通过对Nagios、Icinga等软件的监控,我们能够创建仪表板并在应用组件需要关注时及时得到警报。这种作法的目标在于了解设置问题,并在用户反映之前抢先修复。
在本教程中,我们将设置Nagios 4作为监控软件,同时在服务器上安装NRPE代理。
在设置中的每套服务器,我们可以监控服务器是否正常运行,其中的主要进程(例如apache、mysql或者haproxy)正在起效。尽管这篇监控教程并不全面,但大家仍然可以以此为基础进行了解。
先决条件
如果大家希望通过域名访问日志仪表板,则可以在域名下创建一条A记录,例如monitoring.example.com,其指向监控服务器的公共IP地址。另外,大家也可以通过公共IP地址访问监控仪表板。这里建议大家将监控Web服务器设置为使用HTTPS,同时将其置于VPN之后以限定访问活动。
在监控服务器上安装Nagios
大家可以参阅以下各教程在监控服务器上设置Nagios:如何在Ubuntu 14.04上安装Nagios 4以实现服务器监控。如果大家愿意尝试,也可以使用Icinga,其属于Nagios的fork。
参阅内容截止于NRPE章节处。
将服务器添加至Nagios
在设置中的每套服务器上(db1、app1、app2与lb1),具体请参阅利用NRPE对Ubuntu主机进行监控一文。
另外,确保在NRPE配置文件内将专有hostname或者监控服务器IP地址添加至allowed_hosts设置中。
完成了各主机的添加后,大家还需要为各待监控服务器设立不同的文件:
db1.cfg、app1.cfg、app2.cfg以及lb1.cfg。每个文件都应当包含主机定义,用于引用不同的主机名称与地址(可为服务器的主机名称或者IP地址)。
设置主机与服务监控
下面列出需要对服务器进行监控的项目。对于各服务器,我们需要监控以下服务:
- Ping
- SSH
- Current Load
- Current Users
- Disk Utilization
下面开始着手设置。
定义常规服务
在Nagios设置教程部分,我们已经在/usr/local/nagios/etc/servers(或者在使用Icinga时/etc/icinga/objects/)内通过.cfg文件完成了Nagios配置。为了保证一切组织得当,我们还需要创建一个新的Nagios配置文件,专门面向将要监控的常规服务,名为“common.cfg”。
首先打开该主机配置文件进行编辑:
- sudo vi /usr/local/nagios/etc/servers/common.cfg
添加以下服务定义,其中包含服务器的host_name(定义于此前完成的主机定义):
Nagios Configuration — Common Services
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 configuration (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服务器上进行监控,我们需要定义一项服务,利用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 configuration (commands.cfg) — check_apache2
command[check_apache2]=/usr/lib/nagios/plugins/check_procs -c 1: -w 3: -C apache2
保存并退出。NRPE能够检查名为apache2的进程,并在无匹配进程运行或者匹配进程数量少于3个时报告问题状态。
重载该NRPE配置:
- sudo service nagios-nrpe-server reload
重复以上流程以添加更多应用服务器。
创建服务定义(在服务器上)
在Nagios服务器上,定义一项新的服务,旨在利用NRPE运行check_apache2命令。
打开负责定义应用主机的文件。在本示例中,其名称分别为app1.cfg与app2.cfg:
- sudo vi /usr/local/nagios/etc/servers/app1.cfg
在文件末尾,添加此服务定义(确保host_name与主机定义名称相匹配):
app1.cfg and 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 configuration (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服务器上,我们需要定义新的服务以利用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服务器,在Nagios服务器安装过程中设置的登录信息。
在边栏菜单中,点击Services链接。大家应该看到以下页面:
在理想情况下,我们将看到全部主机与服务皆处于“OK”状态。在截屏中,我们可以看到app2服务器存在问题,其在最近的状态检查中处于关机状态。如果有服务处于非“OK”状态,则加以修复或者在确认该服务无误时,审查Nagios配置是否存在错误。
其它注意事项
大家可能希望为自己的监控服务器创建一套恢复规划,同时备份Nagios配置文件(/usr/local/nagios/etc)。在备份设置完成后,大家可能还希望为其它服务以及邮件通知添加监控机制。
总结
现在大家应该已经能够轻松通过监控仪表板查看服务器与服务的运行状态。当发生停机问题时,我们的监控系统能够及时通知未处于运行状态的服务器及服务。
在下一篇教程中,我们将进一步探讨如何在生产服务器设置上建立集中化日志记录机制,生产环境构建指南:Web应用——集中化日志记录。
本文来源自DigitalOcean Community。英文原文:Building for Production: Web Applications — Monitoring By Mitchell Anicas
翻译:diradw