我没有使用 Nagios Core 4 收到邮件通知

我没有使用 Nagios Core 4 收到邮件通知

我在安装的 Nagios Core 4 中自动发送邮件通知时遇到问题Ubuntu 12.04 LTS(精准穿山甲)服务器……

我尝试使用纳吉奥斯用户和用户使用以下命令:

echo "test" | mail -s "test mail" [email protected]

我正确收到了邮件...但我没有收到任何自动邮件通知。我该如何解决这个问题?

这些是我的配置文件(commands.cfg,,,):contacts.cfgnagios.logmail.log

命令配置文件

(路径/usr/bin/mail是正确的路径)

# 'notify-host-by-email' command definition
define command{
        command_name    notify-host-by-email
        command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
        }

# 'notify-service-by-email' command definition
define command{
        command_name    notify-service-by-email
        command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
        }
# 'process-host-perfdata' command definition
define command{
        command_name    process-host-perfdata
        command_line    /usr/bin/printf "%b" "$LASTHOSTCHECK$\t$HOSTNAME$\t$HOSTSTATE$\t$HOSTATTEMPT$\t$HOSTSTATETYPE$\t$HOSTEXECUTIONTIME$\t$HOSTOUTPUT$\t$HOSTPERFDATA$\n" >> /usr/local/nagios/var/host-perfdata.out
        }
# 'process-service-perfdata' command definition
define command{
        command_name    process-service-perfdata
        command_line    /usr/bin/printf "%b" "$LASTSERVICECHECK$\t$HOSTNAME$\t$SERVICEDESC$\t$SERVICESTATE$\t$SERVICEATTEMPT$\t$SERVICESTATETYPE$\t$SERVICEEXECUTIONTIME$\t$SERVICELATENCY$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$\n" >> /usr/local/nagios/var/service-perfdata.out
        }

联系人.cfg:

define contact{
        contact_name                    supporto
        alias                           Supporto Clienti DEA
        service_notification_period     24x7
        host_notification_period        24x7
        service_notification_options    w,u,c,r
        host_notification_options       d,r
        service_notification_commands   notify-service-by-email
        host_notification_commands      notify-host-by-email
        email                           [email protected]
        }

define contactgroup{
        contactgroup_name       admins
        alias                   Nagios Administrators
        members                 supporto
        }

nagios.log:

[1401871412] SERVICE ALERT: fileserver;Current Users;OK;SOFT;2;USERS OK - 1 users currently logged in
[1401871953] SERVICE ALERT: backups;Nagios Status;WARNING;SOFT;1;NAGIOS WARNING: 36 processes, status log updated 541 seconds ago
[1401872133] SERVICE ALERT: backups;Nagios Status;OK;SOFT;2;NAGIOS OK: 36 processes, status log updated 180 seconds ago
[1401872321] SERVICE ALERT: posta;Swap Usage;CRITICAL;SOFT;1;CRITICAL - Plugin timed out after 10 seconds
[1401872322] SERVICE ALERT: fileserver;Current Users;CRITICAL;SOFT;1;CRITICAL - Plugin timed out after 10 seconds
[1401872420] SERVICE ALERT: archivio;Disk Space;CRITICAL;SOFT;1;CRITICAL - Plugin timed out after 10 seconds
[1401872492] SERVICE ALERT: fileserver;Current Users;OK;SOFT;2;USERS OK - 1 users currently logged in
[1401872492] SERVICE ALERT: posta;Swap Usage;OK;SOFT;2;SWAP OK: 100% free (1984 MB out of 1984 MB)
[1401872590] SERVICE ALERT: archivio;Disk Space;OK;SOFT;2;DISK OK
[1401872931] Auto-save of retention data completed successfully.
[1401873333] SERVICE ALERT: backups;Nagios Status;WARNING;SOFT;1;NAGIOS WARNING: 36 processes, status log updated 402 seconds ago
[1401873513] SERVICE ALERT: backups;Nagios Status;OK;SOFT;2;NAGIOS OK: 36 processes, status log updated 180 seconds ago

邮件日志

(我认为问题就在这里,但我不知道如何解决它。)

Jun  4 10:00:01 backups sm-msp-queue[6109]: My unqualified host name (backups) unknown; sleeping for retry
Jun  4 10:01:01 backups sm-msp-queue[6109]: unable to qualify my own domain name (backups) -- using short name
Jun  4 10:20:01 backups sm-msp-queue[7247]: My unqualified host name (backups) unknown; sleeping for retry
Jun  4 10:21:01 backups sm-msp-queue[7247]: unable to qualify my own domain name (backups) -- using short name
Jun  4 10:40:01 backups sm-msp-queue[8327]: My unqualified host name (backups) unknown; sleeping for retry
Jun  4 10:41:01 backups sm-msp-queue[8327]: unable to qualify my own domain name (backups) -- using short name
Jun  4 11:00:01 backups sm-msp-queue[9549]: My unqualified host name (backups) unknown; sleeping for retry
Jun  4 11:01:01 backups sm-msp-queue[9549]: unable to qualify my own domain name (backups) -- using short name
Jun  4 11:20:01 backups sm-msp-queue[10678]: My unqualified host name (backups) unknown; sleeping for retry
Jun  4 11:21:01 backups sm-msp-queue[10678]: unable to qualify my own domain name (backups) -- using short name

我已经到了最后一步,我想完成这个 Nagios Core!:)

主机定义(该主机的磁盘几乎已满,并且处于硬状态但无通知):

define host{
        use                     generic-host            ; Name of host template to use
        host_name               posta
        alias                   Server Posta ESA
        address                 10.10.2.102
        parents                 xen1, xen2
        icon_image              redhat.png
        statusmap_image         redhat.gd2
        }

服务定义:

define service{
        use                             generic-service
        host_name                       xen1, maestro, xen2, posta, nas002, serv2, esasrvmi02, esaubuntumi
        service_description             Disk Space
        check_command                   ssh_all_disks!10%!5%
        }

您给出的联系人定义允许通知,但是服务级别是否也允许通知?

抱歉,但我不明白这个东西!:(

答案1

从您的信息中nagios.log,我仅看到 SOFT 状态错误。Nagios 不会针对 SOFT 状态发送任何通知,只有在 HARD 状态时才会发送通知。来自 Nagios 文档:

软状态

在下列情况下,服务和主机会出现软状态……

1) 当服务或主机检查结果为非正常状态,并且尚未按照服务或主机定义中的选项指定的次数进行(重新)检查时。我们称之为软错误状态...

2) 当服务或主机从软错误状态恢复时。这被视为软恢复。

软状态事件

当服务或主机处于软错误状态或经历软恢复时会发生什么?

1) 如果您在主配置文件中启用了 log_service_retries 或 log_host_retries 选项,则会记录软错误或恢复。

2) 执行事件处理程序(如果您定义了任何事件处理程序)来处理服务或主机的软错误或恢复。(在执行任何事件处理程序之前,$STATETYPE$ 宏设置为“SOFT”)。Nagios 不会向任何联系人发送通知,因为服务或主机没有(或曾经没有)“真正”的问题。

可以看出,在软状态期间真正发生的唯一重要的事情是事件处理程序的执行。如果您想在问题转变为硬状态之前尝试主动修复问题,使用事件处理程序会特别有用。

艰难状态

主机和服务在下列情况下会出现硬状态:

1) 当主机或服务检查结果为非 UP 或非 OK 状态,并且已(重新)检查主机或服务定义中的 max_check_attempts 选项指定的次数。这是一种硬错误状态。

2)当主机或服务从一种硬错误状态转变为另一种错误状态时(例如从 WARNING 转变为 CRITICAL)。

3)当服务检查结果为非OK状态,且其对应主机处于DOWN或UNREACHABLE状态。

4) 当主机或服务从硬错误状态恢复时。这被视为硬恢复。

5) 当收到被动主机检查时。除非启用了passive_host_checks_are_soft选项,否则被动主机检查将被视为HARD。

当主机或服务经历 HARD 状态变化时,会发生以下情况:

1) 记录 HARD 状态。2) 执行事件处理程序来处理 HARD 状态。3) 通知联系人主机或服务问题或恢复情况。

因此,从您在示例中提供的日志中看到的情况来看,Nagios 无需发送邮件。您应该在其中一个受监控的服务上创建一个错误条件,让此条件存在一段时间,然后查看当 nagios.log 中的状态更改为 HARD 时您是否真的收到了邮件。

我注意到的最后一件事是,在您的命令行测试中,您发送邮件到[email protected]contacts.cfg 中定义的邮件地址[email protected](也许您在邮件服务器上定义了别名,也可能没有)。

在问题中添加日志后添加 在你展示的中nagios.log,没有服务通知行,因此即使错误处于 HARD 状态,Nagios 也不会尝试发出通知。要使通知在 Nagios 中正常工作,仅定义好联系人、联系人组和通知命令是不够的。如果您想在发生错误时发送通知,您必须配置每个服务和主机,当然还要配置向哪些联系人和/或联系人组发送此通知。例如,这是一个已配置并正常工作的通知服务定义:

define service {
    name                                  generic-service
    first_notification_delay              0
    notification_interval                 0
    notification_options                  w,u,c,r
    notifications_enabled                 1
    check_period                          24x7
    notification_period                   24x7
    contact_groups                        admins
}

在上述定义中,notification_enabled设置为 1(真),并指定要向其发送通知的联系人组。此外,我们定义了要发送哪种通知 - w(警告)、u(未知)、c(严重)和 r(恢复)。

上述定义被我的所有服务用作模板:

use generic-service

存在于我的所有服务定义中。这样,如果我需要更改通知选项,我只需更改定义generic-service。就您而言,您的配置显示您的服务正在使用名为的模板generic-service。我建议检查其定义,以查看通知是否像我上面给出的示例一样配置。其定义可以位于名为的文件中,services-templates.cfg但这可能会有所不同。

答案2

感谢 Benoit 的回答。经过一段时间的思考,我想补充几点:

如果您查看缓存文件(这是所有配置的计算结果),则很容易知道您对所有这些模板和覆盖的立场:/usr/local/nagios/var/objects.cache

去过那里之后,我突然意识到……我的服务设置为仅在工作时间发送通知,但结果有点不对劲,因为我与服务器处于不同的时区。将其更改为 24x7 后,一切就变得顺畅了。

我希望这会对某些人有所帮助。花了几个小时才弄清楚这一切。

干杯!

答案3

最有用的信息是交叉检查内容以/usr/local/nagios/var/objects.cache验证所有.cfg 的所有继承。

这也解决了我的问题。

相关内容