为生产而构建:网络应用 - 监控

简介

现在,我们已经完成了生产应用程序服务器的设置、恢复计划和备份,接下来让我们考虑添加监视功能,以提高我们对服务器和服务状态的认识。监控软件,如Nagios、Icinga和Zabbix,使您能够创建仪表板和警报,以显示您的应用程序设置的哪些组件需要关注。这样做的目的是帮助您检测设置中的问题,并在用户遇到问题之前开始修复它们。

监控diagram

在本教程中,我们将把Nagios4设置为监视软件,并在构成我们的应用程序的服务器上安装NRPE代理。

对于我们的设置中的每个服务器,我们将设置监视以检查服务器是否已启动,以及它的主进程(即,Apache、MySQL或haProxy)是否正在运行。虽然本监控指南并不全面--您可能希望设置其他检查,但我们不会在此介绍--但它是一个很好的起点。

前提条件

如果您想通过域名访问您的日志仪表板,请在您的域名下创建一条A记录 ,如monitor oring.example.com,指向您的** 监控** 服务器的公网IP地址。或者,您也可以通过公共IP地址访问监控仪表板。建议您将监控Web服务器设置为使用HTTPS,并通过将其放置在VPN后面来限制对其的访问。

在监控服务器上安装Nagios

按照以下教程在您的监控 服务器上设置Nagios:如何在Ubuntu 14.04.上安装Nagios4和监控您的服务器如果你愿意,你也可以使用Icinga,,它是Nagios的一个分支。

当您到达使用NRPE监控Ubuntu主机 部分时停止。

向Nagios添加服务器

在您的设置中的每台服务器(DB1、App1、App2和Lb1)上,阅读Nagios教程的使用NRPE监视Ubuntu主机]部分。

请务必将您的监控 服务器的私有主机名或IP地址添加到NRPE配置文件的Allowed_Hosts设置中。

添加完每台主机后,您应该为要监控的每台服务器准备一个单独的文件:db1.cfgapp1.cfgapp2.cfglb1.cfg。每个文件都应该包含引用相应主机名和地址(可以是服务器的主机名或IP地址)的主机定义。

设置主机和服务监控

让我们列出我们想要在每台服务器上监视的常见内容。让我们为每台服务器监控以下服务

  • 宋承宪
  • 当前负载
  • 当前用户
  • 磁盘利用率

现在让我们来设置一下。

定义公共服务

在Nagios设置教程中,我们将Nagios配置为在/usr/local/nagios/etc/servers中查找.cfg文件(或在Icinga中查找/etc/icinga/Objects/)。为了保持条理清晰,我们将为我们想要监视的常见服务创建一个新的Nagios配置文件,名为Common.cfg

首先,打开主机配置文件进行编辑

1sudo vi /usr/local/nagios/etc/servers/common.cfg

添加以下服务定义,并使用每个服务器的host_name(在前面的主机定义中定义):

 1[label Nagios Configuration  Common Services]
 2define service {
 3        use generic-service
 4        host_name db1,app1,app2,lb1
 5        service_description PING
 6        check_command check_ping!100.0,20%!500.0,60%
 7}
 8
 9define service {
10        use generic-service
11        host_name db1,app1,app2,lb1
12        service_description SSH
13        check_command check_ssh
14        notifications_enabled 0
15}
16
17define service {
18        use generic-service
19        host_name db1,app1,app2,lb1
20        service_description Current Load
21        check_command check_nrpe!check_load
22}
23
24define service {
25        use generic-service
26        host_name db1,app1,app2,lb1
27        service_description Current Users
28        check_command check_nrpe!check_users
29}
30
31define service{
32        use generic-service
33        host_name db1,app1,app2,lb1
34        service_description Disk Utilization
35        check_command check_nrpe!check_hda1
36}

保存并退出。

现在我们准备好定义特定于每台服务器的服务了。我们将从数据库服务器开始。

定义MySQL流程

创建NRPE命令(客户端)

在您的数据库服务器DB1 上,我们将配置一个新的NRPE命令。打开新的NRPE配置文件Commands.cfg

1sudo vi /etc/nagios/nrpe.d/commands.cfg

添加以下命令定义:

1[label NRPE configuration (commands.cfg) — check_mysqld]
2command[check_mysqld]=/usr/lib/nagios/plugins/check_procs -c 1: -C mysqld

保存并退出。这允许NRPE检查名为mysqld的进程,如果运行该名称的进程少于1个,则报告临界状态。

配置NRPE:

1sudo service nagios-nrpe-server reload

创建服务定义(在服务器上)

在您的Nagios服务器上,监控 ,我们需要定义一个使用NRPE来运行check_mysqld命令的新服务。

打开定义数据库主机的定义文件。在我们的示例中,它被称为db1.cfg

1sudo vi /usr/local/nagios/etc/servers/db1.cfg

在文件末尾添加此服务定义(确保host_name值与主机定义的名称匹配):

1[label db1.cfg — check_mysql]
2define service {
3        use generic-service
4        host_name db1
5        service_description Check MySQL Process
6        check_command check_nrpe!check_mysqld
7}

保存并退出。这会将Nagios配置为使用NRPE在数据库服务器上运行check_mySQLD命令。

为了使这一改变生效,我们必须重新加载Nagios。但是,我们将首先监视Apache进程。

定义APACHE进程

创建NRPE命令(客户端)

在您的应用服务器app1 和** app2** 上,我们将配置一个新的NRPE命令。打开新的NRPE配置文件Commands.cfg

1sudo vi /etc/nagios/nrpe.d/commands.cfg

添加以下命令定义:

1[label NRPE configuration (commands.cfg) — check_apache2]
2command[check_apache2]=/usr/lib/nagios/plugins/check_procs -c 1: -w 3: -C apache2

保存并退出。这允许NRPE检查名为apache2的进程,如果没有匹配的进程正在运行,则报告严重状态;如果匹配的进程少于三个,则报告警告状态。

重新加载NRPE配置:

1sudo service nagios-nrpe-server reload

请确保在任何其他应用程序服务器上重复此操作。

创建服务定义(在服务器上)

在您的Nagios服务器上,监控 ,我们需要定义一个使用NRPE来运行check_apache2命令的新服务。

打开定义应用程序主机的定义文件。在我们的示例中,它们分别称为app1.cfgapp2.cfg

1sudo vi /usr/local/nagios/etc/servers/app1.cfg

在文件末尾添加此服务定义(确保host_name值与主机定义的名称匹配):

1[label app1.cfg and app2.cfg — check_apache2]
2define service {
3        use generic-service
4        host_name app1
5        service_description Check Apache2 Process
6        check_command check_nrpe!check_apache2
7}

保存并退出。这将配置Nagios使用NRPE在应用程序服务器上运行check_apache2命令。请确保对您的每个应用程序服务器重复此操作。

要使此更改生效,我们必须重新加载Nagios。但是,我们将在此之前继续监控HAProxy进程。

定义HAProxy进程

创建NRPE命令(客户端)

在负载均衡服务器 lb1 上,我们将配置一个新的NRPE命令。打开一个新的NRPE配置文件commands.cfg

1sudo vi /etc/nagios/nrpe.d/commands.cfg

添加以下命令定义:

1[label NRPE configuration (commands.cfg) — check_haproxy]
2command[check_haproxy]=/usr/lib/nagios/plugins/check_procs -c 1: -C haproxy

保存并退出。这允许NRPE检查名为haproxy的进程,并在运行的进程少于1个的情况下报告严重状态。

重新加载NRPE配置:

1sudo service nagios-nrpe-server reload

请确保在任何其他应用程序服务器上重复此操作。

创建服务定义(在服务器上)

在您的Nagios服务器上,monitoring ,我们需要定义一个新的服务,使用NRPE来运行check_haproxy命令。

打开定义数据库主机的定义文件。在我们的示例中,它称为lb1.cfg

1sudo vi /usr/local/nagios/etc/servers/lb1.cfg

在文件末尾添加此服务定义(确保host_name值与主机定义的名称匹配):

1[label lb1.cfg — check_haproxy]
2define service {
3        use generic-service
4        host_name lb1
5        service_description Check HAProxy Process
6        check_command check_nrpe!check_haproxy
7}

这会将Nagios配置为使用NRPE在负载均衡器服务器上运行check_haproxy命令。

为了使这一改变生效,我们必须重新加载Nagios。

重新加载Nagios配置

要重新加载Nagios并使所有更改生效,请输入以下命令:

1sudo service nagios reload

如果配置中没有语法错误,则应进行设置。

Check Nagios服务

在继续之前,您需要验证Nagios是否在监视您定义的所有主机和服务。通过其公共主机名或IP地址访问您的Nagios服务器,例如http://monitoring.example.com/nagios/.输入您在安装Nagios服务器期间设置的登录名。

在侧菜单中,单击 服务 链接。你应该被带到一个看起来像这样的页面:

Nagios服务

理想情况下,您将看到每个主机和所有服务都处于正常状态。在截图中,我们可以看到app2 服务器出现了问题,因为它在最近的状态检查中关闭了电源。如果您的任何服务不正常,请修复它们,或者,如果服务正常,请检查您的Nagios配置是否有错误。

其他注意事项

您很可能希望为监控服务器创建恢复计划,并备份您的Nagios配置文件(/usr/local/nagios/etc)。设置备份后,您可能需要配置监视、其他服务和电子邮件通知。

总结

现在,只需扫一眼监控仪表板,您就应该能够看到服务器和服务的状态。如果发生停机,您的监控系统将帮助您确定哪些服务器(S)和服务(S)运行不正常,这应该有助于减少应用程序的停机时间。

继续学习下一教程,开始为您的生产服务器设置设置集中式日志记录:为生产构建:Web应用程序-集中式Logging.

Published At
Categories with 技术
Tagged with
comments powered by Disqus