我在安装的 Nagios Core 4 中自动发送邮件通知时遇到问题Ubuntu 12.04 LTS(精准穿山甲)服务器……
我尝试使用纳吉奥斯用户和根用户使用以下命令:
echo "test" | mail -s "test mail" [email protected]
我正确收到了邮件...但我没有收到任何自动邮件通知。我该如何解决这个问题?
这些是我的配置文件(commands.cfg
,,,):contacts.cfg
nagios.log
mail.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 的所有继承。
这也解决了我的问题。