[FrontPage] [TitleIndex] [WordIndex

This is a read-only archived version of wiki.centos.org

在 CentOS 4.x/5.x 上安装 Nagios

<!> 2010 年 7 月 28 日新增的备注:这篇文章似乎已被遗弃、不被维护、并且只提及某个通用的 nagios 版本。2012 年 10 月 11 日附加:此篇文章应以对话方式来重写

<<TableOfContents: execution failed [Argument "maxdepth" must be an integer value, not "[2]"] (see also the log)>>

这篇文档会快速地安装及设置 Nagios 开始运作时所需的一切。它不会深入研究 Nagios 所采用的设置指令。这方面的文档已收录在 Nagios 的网站,又或者在安装 Nagios 后收藏在本机里。我将会解释如何通过 RPM 及 yum 从 Dag 的软件库(RPMforge)进行安装,但假若你宁可创建自己的版本,源代码亦垂手可得。同样地,这方面的文档亦随处可寻。如果你不懂得如何启用软件库,请参考 CentOS wiki 里的 Repositories 页内的「第三方软件库」部份。这里亦假设你已经在你的网络上有一个运作中的电邮服务器。它是发放通报的途径,并且超越了这里的范畴。

1. 系统:

2. 参考:

3. 组件:

其它:

4. 一般升级

有关升级的一个便条。一般来说,升级时只需输入 yum update <组件名称>。 但为安全起见,请在升级前把你在 /etc 的配置文件备份。第二,务请阅读发行注记来确定配置文件及指令没有改变。

4.1. 升级自 2.4

有关升级的一个便条。假若你升级自 2.4(或之前的 2.x 版本),而你是按照这份引南来安装的,那么简单地执行 yum upgrade 便可以了。一如既往,请将你的设置备份才进行升级,以避有问题发生。另外,由 2.4 升级至 2.5 发行版,Dag 只把 nagios 及 nagios-devel 组件重建。

[me@mymachine ~] yum update nagios nagios-plugins nagios-devel nagios-plugins-nrpe

4.2. 升级自 2.5

如果你是由 2.5 版升级至 2.6,Dag 的 RPM 有些奇怪。请确保你已经将 /etc/nagios 备份,然后才继续。

[me@mymachine ~] service nagios stop
[me@mymachine ~] cp -ar /etc/nagios /wherever/nagios_2.5_backup
[me@mymachine ~] yum update nagios nagios-plugins nagios-devel nagios-plugins-nrpe

假若 cgi.cfg、misccommands.cfg 或 checkcommands.cfg 并不存在或里存储为 .rpmsave 或 .rpmnew,请从你刚创建的备份里复制它们回来。要不然,请忽视上述所提及的错误,因为这些 RPM 已经被修复了。多谢 Dag!此外,在贡献的插件里, check_linux_raid.pl 这个脚本有一个错误。修正这个问题很简单。同样,假若你执行这个插个时没有问题,它已经被修正了。我是从 Nagios 的邮件列表得悉这个问题的。有一位用户发现它并汇报了给包制者,因此现在它应该已经被解决。无论如何,要修正 check_linux_raid.pl:

[me@mymachine ~] vim /usr/lib/nagios/plugins/contrib/check_linux_raid.pl
将第 26 行注译掉:
use strict;
#use lib utils.pm
use utils qw(%ERRORS);

[me@mymachine ~] nagios -v /etc/nagios/nagios.cfg
[me@mymachine ~] service nagios start

5. 设置 Apache

请确定你已经安装了 Apache,然后你需要快捷地设置它。你很大机会已经在你的机器上运行着某些网页服务,要不然,你可以这样进行快速设置。

[me@mymachine ~] yum install httpd
[me@mymachine ~] vim /etc/httpd/conf/httpd.conf

最低限度请在 /etc/httpd/conf/httpd.conf 内把服务器的名称改为你的 IP 位置。然后请引导 Apache,并确定它被设置为启用的。

[me@mymachine ~] chkconfig httpd on
[me@mymachine ~] service httpd start

现在请打开浏览器并看看你的网页服务器是否在运作中:http://localhost(或你的 IP 地址)。你应该会看见 Apache 2 的测试页。若然如此,请继续。

如果你在设置 Apache 上需要更多协助,尤其是你需要一台安全的服务器,请遵照 http://www.apache.org 内的文档。我只想警告你,以上做法可以快捷地令你的网页服务器运作,但未有提供任何安全性。假若你将会完全在内部运作,这并不是什么大问题。如了,当它可运作时,让我们安装 Nagios 并开始设置它。你将要安装的 RPM 缺省会创建一个 nagios.conf 供 Apache 用。这个文件是 /etc/httpd/config.d/nagios.conf。

6. 安装/设置

安装需要安装数个不同的组件,好让它能在自己的专长上胜任。它的核心是 Nagios 这个组件本身。然而没有插件,Nagios 便无没在你的系统上进行任何检查。开发用的组件当然包括了开发 Nagios 用的一切库、标头档、及文档。其它选择性的组件包括 NRPE、与及我没有采用的 NSCA(Nagios 服务检查接纳器)。你或许会用得着它,所以详情请参阅它的主网站。还有,Nagios 必须以 nagios 这个用户及群组下执行。RPM 安装时会为你处理这个问题,因此你不必创建这个用户或群组。

[me@mymachine ~] yum install nagios nagios-plugins nagios-plugins-nrpe nagios-devel

这样亦会回应互赖性下载其它组件。这样便安装好了。让我们再次返回 Apache 那边。

6.1. 设置 Nagios 的 Apache 文件

除非你想加入其它选项如设置 SSL 或只允许某些主机访问 CGI,要不然缺省的 nagios.conf 已经能够满足你的需要。以下是它的内容:

ScriptAlias /nagios/cgi-bin "/usr/lib/nagios/cgi"
<Directory "/usr/lib/nagios/cgi">
#       SSLRequireSSL
        Options ExecCGI
        AllowOverride None
        Order allow,deny
        Allow from all
#       Order deny,allow
#       Deny from all
#       Allow from 127.0.0.1
        AuthName "Nagios Access"
        AuthType Basic
        AuthUserFile /etc/nagios/htpasswd.users
        Require valid-user
Alias /nagios "/usr/share/nagios"
<Directory "/usr/share/nagios">
#       SSLRequireSSL
        Options None
        AllowOverride None
        Order allow,deny
        Allow from all
#       Order deny,allow
#       Deny from all
#       Allow from 127.0.0.1
        AuthName "Nagios Access"
        AuthType Basic
        AuthUserFile /etc/nagios/htpasswd.users
        Require valid-user
</Directory>

除非你想设置其它选项,要不然便完成了。现在让我们设置身份验证。

6.2. 设置密码档

假若你不想使用 nagiosadmin 这个名称,请以作为名字取代。请紧记稍后你在某些 CGI 的设置里必需采用同一个名称。

[me@mymachine ~] htpasswd -c /etc/nagios/htpasswd.users nagiosadmin
New password: 输入你的密码
Re-type new password: 重输你的密码
Adding password for user nagiosadmin

至于是否创建一个 guest 帐户亦是你的决定。这个 guest 帐户可以允许用户查看所在 Nagios 内指定的某些东西,但不会将整个 CGI 界面的访问权赋予他们。举个例说,用户可以看见主机的状态,但不能为主机排期停机……如此类推。假如你想有一个 guest 帐户,请创建它。

[me@mymachine ~] htpasswd /etc/nagios/htpasswd.users guest
New password: 输入你的密码
Re-type new password: 重输你的密码
Adding password for user guest

注:请留意我取掉 -c 这个选项。这是「创建」的选项。因为你已经创建了该文件,请确保你新增其它帐户时都不采用「创建」这个选项。要不然你便会清除这个文件的内容。

6.3. 设置 CGI 文件

下一步是在主要的 CGI 配置文件内设置你刚创建的用户。我将会假设你没有采用 guest 帐户,并且单单创建一个 nagiosadmin 的管理员帐户。另外,请确保你已设置采用身份验证。1 代表启用,0 代表停用。

[me@mymachine ~] cd /etc/nagios
[me@mymachine nagios] vim cgi.cfg

# AUTHENTICATION USAGE
use_authentication=1

# SYSTEM/PROCESS INFORMATION ACCESS
authorized_for_system_information=nagiosadmin

# CONFIGURATION INFORMATION ACCESS
authorized_for_configuration_information=nagiosadmin

# SYSTEM/PROCESS COMMAND ACCESS
authorized_for_system_commands=nagiosadmin

# GLOBAL HOST/SERVICE VIEW ACCESS
authorized_for_all_services=nagiosadmin
authorized_for_all_hosts=nagiosadmin

# GLOBAL HOST/SERVICE COMMAND ACCESS
authorized_for_all_service_commands=nagiosadmin
authorized_for_all_host_commands=nagiosadmin

当你完成编辑后,请存储这个文件。它还有很多选择性的参数可供改变或试用,因此请享受把网页界面自定至你喜欢的式样。让我们试试你现时已经成就的一切。请重新引导 Apache 并浏览至 http://localhost/nagios/。当你输入了刚创建的凭证后,便应该看见一个漂亮的 Nagios 网页界面。你可以浏览位于左边的连结,但它们大部份都未能被应用,因为现时仍未进行任何设置。

6.4. 设置 nagios.cfg

只要检查 /etc/nagios,便会发现有数个配置文件可供参阅。其中一个是 localhost.cfg。这个文件以一个全包的方式来设置之后的对象档。我觉得这样很混乱,尤其是当你最终要监视大型的网络。取而代之,你要将设置分割至不同文件,这样能排除你日后的烦恼。现在请迁移这个文件。以往,样例文件名叫 bigger.cfg 及 minimal.cfg,但由 Nagios 2.9 起就只有单一个文件。

[me@mymachine ~] cd /etc/nagios
[me@mymachine nagios] mv localhost.cfg localhost.cfg_org

现在我们将会打开 Nagios 的主配置文件。内置的注释基本上令这个文件不言自明。假若你想的话,Nagios 允许你在单一个文件 localhost.cfg 内指定所有设置。当你只须监视数个主机及服务,这是一个合理的主意,但当你需要监视大量事项,这便是个坏主意。单单适应如何设置 Nagios 便要花费你好一段时间,因此请帮自己一个忙,并按照以下提及的类型把文件分类。意思即是:主机及主机群组放在一个文件,服务及服务群组放在另一个文件,而任何其它设置再放在另一个文件。日后你会感激我。让我们从基础开始。我启用了外部指令这个选项,好让指令可以通过 CGI 网页界面来执行。

[me@mymachine nagios] vim nagios.cfg

# 对象配置文件
cfg_file=/etc/nagios/contactgroups.cfg
cfg_file=/etc/nagios/contacts.cfg
cfg_file=/etc/nagios/hostgroups.cfg
cfg_file=/etc/nagios/hosts.cfg
cfg_file=/etc/nagios/services.cfg
cfg_file=/etc/nagios/timeperiods.cfg

# 外部指令选项
check_external_commands=1

# 外部指令检查间隔
command_check_interval=1

请存储这个文件。现在,你需要创建上述所指定的每个文件,因为它们并不存在于 /etc/nagios 内。

[me@mymachine nagios] touch contactgroups.cfg contacts.cfg hostgroups.cfg hosts.cfg services.cfg timeperiods.cfg
[me@mymachine nagios] chown nagios.nagios contactgroups.cfg contacts.cfg hostgroups.cfg hosts.cfg services.cfg timeperiods.cfg

这部份还有一件事要注意。如果你计划在 CGI 界面上执行外部指令(check_external_commands),你可能会碰到不少权限上的问题。假若你在网页界面执行某个指令时遇到任何错误,请查阅 Nagios 的常见问题集。该常见问题集收录在这里:http://nagios.sourceforge.net/docs/2_0/commandfile.html

7. 对象配置文件

先前提及,当配置文件被分开时,Nagios 会阅读这些文件内的数据来处理整个网络的主机及服务。我事先一提,关于以范本为基础的对象,它们所有选项的详细文档都已放置在网站里。不过下面可助你起步,因此让我们由 timeperiods 文件做起。当然,你可以按所需将不同数值代入选项。

7.1. Timeperiods

[me@mymachine nagios] vim timeperiods.cfg

# '24x7' 时段的定义
define timeperiod{
        timeperiod_name 24x7
        alias           24 Hours A Day, 7 Days A Week
        sunday          00:00-24:00
        monday          00:00-24:00
        tuesday         00:00-24:00
        wednesday       00:00-24:00
        thursday        00:00-24:00
        friday          00:00-24:00
        saturday        00:00-24:00
        }

# 'workhours' 时段的定义
define timeperiod{
        timeperiod_name workhours
        alias           "Normal" Working Hours
        monday          08:00-17:00
        tuesday         08:00-17:00
        wednesday       08:00-17:00
        thursday        08:00-17:00
        friday          08:00-17:00
        }

# 'nonworkhours' 时段的定义
define timeperiod{
        timeperiod_name nonworkhours
        alias           Non-Work Hours
        sunday          00:00-24:00
        monday          00:00-09:00,17:00-24:00
        tuesday         00:00-09:00,17:00-24:00
        wednesday       00:00-09:00,17:00-24:00
        thursday        00:00-09:00,17:00-24:00
        friday          00:00-09:00,17:00-24:00
        saturday        00:00-24:00
        }

# 'none' 时段的定义
define timeperiod{
        timeperiod_name none
        alias           No Time Is A Good Time
        }

你可以随喜设置不同数量的定义。譬如说你需要单单在周末才联络一些人。你可以创建一个 weekends 的范本,并按需要单单在 Friday、Saturday 及 Sunday 指定适当的时间。

7.2. 联络/联络群组

联络数据将会被分拆到两个文件。一个放置实际的联络选项,而另一个存放群组及当中的联络人。之后你会通过群组指定 Nagios 要联络谁。

[me@mymachine nagios] vim contacts.cfg

# service_notification_options are w,u,c,r,f,n
# w=warning u=unknown c=critical r=recovery f=flapping n=none
# host_notification_options d,u,r,f,n
# d=down u=unreachable r=recovery f=flapping n=none

define contact{
        contact_name                    me
        alias                           me
        service_notification_period     24x7
        host_notification_period        24x7
        service_notification_options    c,r
        host_notification_options       d,r
        service_notification_commands   notify-by-email
        host_notification_commands      host-notify-by-email
        email                           me@myemailaddress.whatever
        }

define contact{
        contact_name                    you
        alias                           you
        service_notification_period     workhours
        host_notification_period        workhours
        service_notification_options    c,r
        host_notification_options       d,r
        service_notification_commands   notify-by-email
        host_notification_commands      host-notify-by-email
        email                           you@youremailaddress.whatever
        }

你可按自己的首选来选择,但于我而言,我只会为关键性及恢复的警报设立要通知联络人。我委实没兴趣收到那些受监视的东西因为临时故障或警告状态而发出的警报,尤其是在零晨四时。我没有兴趣是因为(一)我在日间经常检查 Nagios 的 CGI 界面,而且(二)我的一切警报都会被转送到传票系统。话虽说此,我也不希望每次某个插件不能执行时都产生一张不必要的传票。要是我真的有意兴,我大可以设立一个独立的联络单位及群组,单单接收警告及未知的警报,然后将它们导向另一别电邮地址。再一次,它们都可按你的需要而改变。还有,我只应用电邮。我的电邮系统可以代办分发警报到目的地。不过,你可以设置 nagios 将消息直接导向传呼器。同样的,请在文档里查阅 timeperiods.cfg 内的对象设置选项。假若你查看用来通传警报的指令,请查阅 /etc/nagios/misccommands.cfg。让我继续看联络群组。

[me@mymachine nagios] vim contactgroups.cfg

# einsteins 联络群组的定义
define contactgroup{
        contactgroup_name       einsteins
        alias                   einsteins
        members                 me,you
        }

这是联络人及联络群组的一个简单样例。你可以按首选设置多重巢套。你也可按需要不断创建联络人。做法是很简单。

7.3. 主机及主机群组

主机及主机群组的信息分别被存储在 hosts.cfg 及 hostgroups.cfg 这两个文件内。正如你可以在各个联络群组内配搭不同的联络人,你对主机及主机群组亦可以做同样的事情。我较喜欢在配置文件内置立一个范本设置,其后从它取得设置值。长远来说,这样做可以为你节省大量打字的时间。

[me@mymachine nagios] vim hosts.cfg

# 通用主机的定义
define host{
        name                            generic-host    ; 通用范本的名称
        notifications_enabled           1               ; 启用主机通报
        event_handler_enabled           1               ; 启用主机事件处理器
        flap_detection_enabled          1               ; 启用摆动检测
        process_perf_data               1               ; 处理性能数据
        retain_status_information       1               ; 程序重新起动时保留状态信息
        retain_nonstatus_information    1               ; 程序重新起动时保留非状态信息
        register                        0               ; 不注册这个定义 —— 它不是真实的主机,只是个范本!
        }

# 这里会创建一个可供其它主机应用的通用范本
# 永不通报、检查 15 次后才在 CGI 界面上显示严重警报

define host{
        name                    basic-host
        use                     generic-host
        check_command           check-host-alive
        max_check_attempts      15
        notification_interval   0
        notification_period     none
        notification_options    n
        register                0
        }

# 这里会创建一个可供你的路由器应用的通用范本
# 24x7 监视主机、停机或恢复时发出通报、检查 15 次后进入严重状态、
# 每隔 30 分钟通知 contact_group

define host{
        name                    your-routers-host
        use                     generic-host
        check_command           check-host-alive
        max_check_attempts      15
        notification_interval   30
        notification_period     24x7
        notification_options    d,r
        register                0
        }

define host{
        use                     basic-host
        host_name               mymachine1
        alias                   mymachine1
        address                 192.168.100.101
        contact_groups          einsteins
#       notification_options    d,r  #overrides the basic-host option
        }

define host{
        use                     your-routers-host
        host_name               router1
        alias                   router1
        address                 192.168.100.100
        contact_groups          einsteins
        }

你可看见缺省的范本长远来说如何能助你节省时间。我现时在监视大约 100 台主机及超过 200 个服务,因此应用范本的方法的确能把效率提升。这样做或许会出现混乱,但你照着文档做但很快学晓。当你需要找出每个文件所支持的一切范本对象,请查阅这里 http://localhost(or your IP)/nagios/docs/configobject.html 。它能大大帮助你,因为 Nagios 提供太多选项给你选择。我分开用不同范本,因为我想 your-routers-host 发出通报,但不想要 basic-host 容器的通告。假若你想交换区 basic-host 容器的通报设置,你只须在主机的定义中指定便成了。你开始明白为何要采用范本吧?

有些人认为我在这里的逻辑很乱,但它可以省掉你打字的功夫。如果你只需监视数台主机,这样可能是多此一举。好了,现在让我们看主机群组。

[me@mymachine nagios] vim hostgroups.cfg

define hostgroup{
        hostgroup_name  basic-clients
        alias           basic clients
        members         mymachine1
        }

define hostgroup{
        hostgroup_name  your-routers
        alias           routers
        members         router1
        }

事情没可能更简单的了。你只须把来自 hosts.cfg 的客户端组成主机群组放进在这个文件内。你可以将它们分开成为多个群组。譬如说,我可选择把 mymachine1 同时放在 basic-clients 及 your-routers 群组内。简单得很……

7.4. 服务

开始时,你需要最少一个服务来监视。它也许是简单的 check-host-alive、或 ping。同样地,你可如上述所示范般把设置配置到范本来简化日后的工作。

[me@mymachine nagios] vim services.cfg

# 通用服务定义的范本
define service{
        name                            generic-service ; 通用服务名称
        active_checks_enabled           1               ; 启用主动式服务检查
        passive_checks_enabled          1               ; 启用/接纳被动式服务检查
        parallelize_check               1               ; 同步执行主动式服务检查(切勿停用)
        obsess_over_service             1               ; 追捕这个服务(有需要时)
        check_freshness                 0               ; 缺省不要检查服务的「新鲜度」
        notifications_enabled           1               ; 启用服务通报
        event_handler_enabled           1               ; 启用服务事情处理器
        flap_detection_enabled          1               ; 启用摆动检测
        process_perf_data               1               ; 处理性能数据
        retain_status_information       1               ; 程序重新起动时保留状态信息
        retain_nonstatus_information    1               ; 程序重新起动时保留非状态信息
        register                        0               ; 不注册这个定义 —— 它不是真实的服务,只是个范本!
        }

# 通用于有服务的
define service{
        use                             generic-service
        name                            basic-service
        is_volatile                     0
        check_period                    24x7
        max_check_attempts              15
        normal_check_interval           10
        retry_check_interval            2
        notification_interval           0
        notification_period             none
        register                        0
        }

define service{
        use                             basic-service
        name                            ping-service
        notification_options            n
        check_command                   check_ping!1000.0,20%!2000.0,60%
        register                        0
        }

define service{
        use                             ping-service
        service_description             PING
        contact_groups                  einsteins
        hostgroup_name                  basic-clients,your-routers
#       host_name                       one_client
        }

这是创建巢套范本的例子。你可以独立采用 hostgroup_name 或 host_name。我定义了一个名叫 basic-service 的通用范本,它从上面定义的 generic-service 定义取得设置值。然后 ping-service 就进一步为它加入设置值。看作出如此分割是由于你也许会想创建另一个名叫 your-switches 的主机群组,但你想把这个服务的通报发放给另一个联络群组。那么你只需定义另一个服务,然后把这个主机群组加进该定义,并应用另一个联络群组。总而言之,最后一个定义取代对上所有容器的相同设置值。Nagios 会以最后看见的选项设置值为准。举个例说,ping-service 保持不变,但我想它通报另一个联络群组。逻辑与 hosts.cfg 及 hostgroups.cfg 文件内所描述的相同。

define service{
        use                             ping-service
        service_description             PING
        contact_groups                  group2
        hostgroup_name                  your-switches
#       host_name                       one_client
        }

由于你可以设置各种检验,services.cfg 这个文件可能会变得很累赘。譬如说,你可以通过 check_smtp 插件检查 smtp 服务,check_http 插件检查 http 服务,SNMP 插件检查 dhcp、dns、等各样事情。让我在这里给你一个检查 smtp 服务的样例。

# SMTP —— 确保 SMTP 服务是可用的。
define service{
        use                             basic-service
        name                            smtp-service
        service_description             SMTP
        notification_interval           15
        contact_groups                  einsteins
        notification_options            c,r
        notification_period             24x7
        check_command                   check_smtp
        register                        0
        }

define service{
        use                             smtp-service
        hostgroup_name                  smtp-servers
#       host_name                       one_client
        }

很明显的,这里再次应用了上述的范本,然后定义实际的主机群组作检查。smtp-servers 这个主机群组必须存在于 hostgroups.cfg 内,而主机必须被定义在 hosts.cfg 内。

在我继续之先,让我对实际发生在这些文件上的事情稍作解释。Nagios 从所有文本案阅读设置选项。当它要处理你所定义的 smtp-service 时,便会检查它应该执行的 check_command 是什么。在这里是:

# check_smtp 指令的定义
define command{
        command_name    check_smtp
        command_line    $USER1$/check_smtp -H $HOSTADDRESS$
        }

它会说:「太好了,我找到了!」现在 Ngios 会进到 /usr/lib/nagios/plugins/(RPM 安装的缺省路径)并执行它在里面所找到的 check_plugin 插件。它会以主机群组内的主机替换 $HOSTADDRESS$,然后检查服务器上的 SMTP 是否在运行中。收到「是」或「否」的答复后,Nagios 会按照你在配置文件内指定的选项来处理这笔数据,然后在 CGI 界面显示信息。

这便是着手设置 Nagios 的精髓。我简化了不少,但你现在至少应该理解在哪里开始设置主机和服务。请查看 /usr/lib/nagios/plugins 来看看一切随机可用的东西。这里藏有大量不同性质的东西。此外,请浏览 http://www.monitoringexchange.org 来查看由很多社内的成员所编写的各种第三方插件。我通过 SNMP 进行很多检查,因此请查阅它。另外,你可以简单地编写插件供自己应用。你还可以利用 Nagios 做很多额外的事情,例如定义警戒升级及扩展服务/主机信息。当你引导 Nagios 后,我会解释它们是什么。

8. 引导 Nagios

此刻,你应该已经有一、两个主机设置可供监视之用。由于我们仍未进行以下步骤,让我们引导 Nagios 守护程序,设置它在开机时引导,并检查配置文件是否有错。

[me@mymachine nagios] chkconfig nagios on
[me@mymachine nagios] nagios -v nagios.cfg

Nagios 2.4
Copyright (c) 1999-2006 Ethan Galstad (http://www.nagios.org)
Last Modified: 05-31-2006
License: GPL

Reading configuration data...

Running pre-flight check on configuration data...

Total Warnings: 85
Total Errors:   0

Things look okay - No serious problems were detected during the pre-flight check

[me@mymachine nagios] service nagios start

Starting network monitor: nagios

你或许留意到我的实例显示有 85 个警告。这是由于我有 85 个被检查的服务是没有相关的联络群组的。警告一般都可以被略过。只要检查(nagios -v)的结果说 Things look okey,你便多数没有问题。要避免有警告,你只须依照警告的内容把问题修正。

9. 警戒升级

警戒升级是一个很酷的方法让你可以指定第二、三、四个等警报应该送往哪里。举个例说,你已设置每 30 分钟检查 SMTP 服务并不断通知一个联络群组直至问题被解决。利用警戒升级,你可指定第二、三、四个警报被发送到某个电邮地址或传呼机,而后第五、六、七个警报被发送到另一个电邮地址或传呼机,如此类推。我广泛地采用这个功能因为我将首个警报送往传票系统,然后设置额外的警报被送往一个传呼机。我不希望同一个事故产生多张传票,但我想 Nagios 不厌其烦地传呼我直至我对事件作出反应。让我们看一看。这里假设你已经在 nagios.cfg 内加入这个文件,并且在 /etc/nagios 内置立了它。

[me@mymachine nagios] vim escalations.cfg
define serviceescalation{
        host_name               mymachine1
        service_description     SMTP
        first_notification      1
        last_notification       0
        notification_interval   30
        contact_groups          mypager
        }

我在同一个文件内一并定义主机警戒升级及服务警戒升级。正如其它事情,你可以把它们一分为二。你只需在 nagios.cfg 档内把文件的位置告诉程序。我没有分拆它们,因为我需要升级的警戒并不多。你的处境也许会有所不同。

10. 扩展信息

扩展信息是一个赠送的功能,主要是用来美化网页界面。它可以分为主机的扩展信息及服务的扩展信息。通过它,你可以把漂亮的小图示放在主机名称旁边、指向 Nagios 以外的连结、及「美化」地图系统内的对象。我利用服务的扩展信息来指向 nagios 外寄存的 MRTG 图表连结。我会示范如何达至这个目的。请记得在 nagios.cfg 内指定这个文件存在,并创建它。

[me@mymachine nagios] vim serviceextinfo.cfg
# yum 的定义
define serviceextinfo{
        host_name               yum
        service_description     PING
        notes_url               http://mynagiosbox/mrtg/myfile.html
        icon_image              graph.gif
        icon_image_alt          View graphs
        }

这样会在网页界面里把一个可爱的小图示放在 PING 服务旁边。当你点击这个图示时,它会直接进入我在同一台机器上运行的 MRTG 图表。在我的例子中,我接有一台内部的 yum 服务器每晚通过 rsync 与镜像同步。所有的以太网流量都通过 MRTG 绘图,然后 Nagios 指向它的一个连结来方便浏览。这个做法证实可以创建一个不错的带宽使用记录,及其它东西。运用一点想像力,你可以做记录、缯图、及连结至差不都任何东西。例如,系统内的进程及已登录的用户。

11. 依赖性

我采用的另一个文件就是主机与及服务依赖性的选项。它所做的事情就是创建一系列的检查然后才发出警报。举个例说,我检查一台非 Linux 服务器的登录服务。在这台机器上我亦会检查另外 15 个服务,但它们都靠赖成功地登录这台机器后才能进行这些检查。当登录失败时,我不希望 15 个服务同时出现故障并传呼给我,因此我便创建一颗依赖性的树。当登录失败,唯有登录服务会发出警报……我只会收到一个警报,而不是数兆个其它检查的警报。你也可以套用这个功能到主机上。同样地,请在 nagios.cfg 档内指定该文件,并创建它。

define servicedependency{
        host_name                       your_host
        service_description             LOGIN
        dependent_host_name             your_host
        dependent_service_description   another_service
        execution_failure_criteria      w,u,c
        notification_failure_criteria   w,u,c
        }

execution_failure_criteria 告诉 Nagios 它在 LOGIN 服务失效时应该做什么。意思就是当 login 处于警告、不明、或严重状态时,another_service 甚至可以连服务都不必检查。notification_failure_criteria 断定向时不需发出警报。假若 login 检查处于警告、不明、或严重状态时,another_service 便不会发出任何警报。

当你加增、编辑、或创建了新的文件后,请确保你执行 nagios -v nagios.cfg 这个选项。它会处理你的配置文件并在实际刷新服务前把它们检查一遍。

12. SELinux

关于 SELinux 的小数据。我没有采用它,因为在 4.x 下,它会打乱某些东西,而我仍未花时间来学晓它。我知道在 5 下,它应该已更成熟,所以请把它一试。当我测试这些指令在 CentOS 5 下是否可行时,我停用了 SELinux,因此假若你遇上任何奇怪的问题,请记得可能是 SELinux。CentOS 5.2 的 SELinux 中一个安全性功能阻止了 apache httpd 服务器访问所需的 /var/nagios 文件。在 CentOS 5.2 下的权宜之计是执行这个指令:

chcon -R httpd_sys_content_t /var/nagios

注:有用户汇报在 CentOS 6 这个较新版的 CentOS,以下指令格式: {{{chcon -R --type=httpd_sys_content_t /var/nagios }}} 同样可行。

13. 各位,大功告成了!

基本上,这里总结了 Nagios 的应用。我差不多将一切都简化了。盼望我已经用一个显浅的方法来解释事物。这个工具的文档非常好,但它的数量导致很难知道从何着手。如果你需要管理一个网络,我主张你运行 Nagios 来监视你的主机及服务(除非你喜欢其它工具)。它已不止一次挽回我的信息科技部门。正如我先前所说,你要花费一段长时间才能熟练它,而且在开始时要摸透它实不容易,不过一旦你掌握了 Nagios,你会诧异自己如何渡过没有它的日子。我的检查由利用 ping 来测试主机是否在线,到磁盘使用状况、记忆状况、DHCP、DNS、HTTP、仪器室的温度、yum 更新、处理器负荷、主机的 SNMP 信息、以及任何你可以想像的事情。我省略了很多事情,但你明白我的意思。事实上任何你想监视的东西都可以通过 Nagios 来达成。你可以编写自己的插件,或浏览我先前所提及的 Monitoring Exchange 网站来找寻大致上任何东西。

还有一件事我想顺带一提,就是你可以完全通过网页来设置及维护 Nagios。Nagios 并不包含一个预装的插件作此用途,但你可以在这里找到三款不同的组件:http://www.nagios.org/faqs/viewfaq.php?faq_id=183。我本人并未用过任何一款,但我相信对那些觉得命令行太困难的人,它们会有用武之地。

如果你想加添什么,或者发现有错处,请告诉我,好让我能作出修正。原稿是在 HTML 写成的,因此我须要改写格式来迁就这个 wiki,所以错字也许难免。请享用。


由于 MaxHetrick 似乎已离开了 CentOS Wiki,因此现时任何有编辑权的人都平等地拥有本页。曾经有人推荐这一页作为份更「清晰」的教学文档。

Translation of revision 30


2023-09-11 07:23