Chinaunix首页 | 论坛 | 博客
  • 博客访问: 140471
  • 博文数量: 68
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 720
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-28 20:01
文章分类

全部博文(68)

文章存档

2015年(68)

我的朋友

分类: 系统运维

2015-08-31 19:34:55

最近在nagios上新添加了一台主机的资源、服务监控,重启后过了段时间发现新增的服务监控不能更新状态,


如上图,新增的为mus01-1.9,可以看到最后的检测时间的日期都是昨天添加监控的日期,之后的状态就一直没变过。

查nagios日志,发现有这样的一条:

Aug 20 15:54:55 imusic-mon nagios: Warning: Check result queue contained results for service 'SYS_Disk /' on host 'sh-bill-mus01-1.9', 

but the service could not be found!  Perhaps you forgot to define the service in your config files?

字面上的意思大概是对1.9的服务(磁盘)检测结果有在检测结果队列里,但是找不到服务名,可能是此服务名没有在配置文件里定义。

接着检查配置文件,服务名“SYS_Disk /”是存在的,这是什么情况呢?折腾了一段时间,突然想起以前碰到过在naigos的webUI上执行命令无效的问题,那次是因为nagios有多个进程引起,这次会不会也是这个引起的呢?ps 一下,果然发现有三个nagios进程,全部kill掉再重启,过一段时间后再检测,发现服务监控的状态信息已经更新,问题解决。

原因分析:

    (1)先来分析nagios为什么会有多个进程

我看下了naigos的启动脚本/etc/init.d/nagios,觉得这个应该是重启时旧的naigos没有正常关闭造成。重启所用的命令是/etc/init.d/nagios restart,从脚本来看,restart是先stop然后再start的:

-------

$0 stop

$0 start

-------

主要看看stop:

-----------------------

stop)

                echo -n "Stopping nagios: "

                pid_nagios

                killproc_nagios nagios

                # now we have to wait for nagios to exit and remove its

                # own NagiosRunFile, otherwise a following "start" could

                # happen, and then the exiting nagios will remove the

                # new NagiosRunFile, allowing multiple nagios daemons

                # to (sooner or later) run - John Sellens

                #echo -n 'Waiting for nagios to exit .'

                for i in 1 2 3 4 5 6 7 8 9 10 ; do

                    if status_nagios > /dev/null; then

                        echo -n '.'

                        sleep 1

                    else

                        break

                    fi

                done

                if status_nagios > /dev/null; then

                    echo ''

                    echo 'Warning - nagios did not exit in a timely manner'

                else

                    echo 'done.'

                fi

                rm -f $NagiosStatusFile $NagiosRunFile $NagiosLockDir/$NagiosLockFile $NagiosCommandFile

                ;;


-----------------------

注释里面就可以看到,nagios是允计多个进程运行的,如果stop时nagios在指定的时间内(10秒)没有正常退出,那么正在执行退出操作的nagios就会删除之前启动用产生的运行文件、状态文件、命令文件等,然后再启动一个新nagios进程,生成新的运行文件、状态文件、命令文件等,这个时间就存在多个nagios进程了。


(2)分析错误日志产生的原因

错误日志

Aug 20 15:54:55 imusic-mon nagios: Warning: Check result queue contained results for service 'SYS_Disk /' on host 'sh-bill-mus01-1.9', 

but the service could not be found!  Perhaps you forgot to define the service in your config files?

这个日志产生的原因我觉得是这样子的,这个执行服务检测操作的应该是旧的nagios进程,也就是没有正常退出的那个nagios进程,因为旧的nagios进程在启动时加载的那份配置文件里没有我新添加的服务,那么就会报上面的这样错,说“此服务名没有在配置文件里定义了”。


(3)监控状态的信息没有更新

这个应该是检测结果没有写到状态文件引起的,为什么结果没有写进状文件?

  1. 是上面的(2)所引起

  2. 用旧nagios进程检测试,由于旧nagios进程所对应的状态文件在关闭进程时已经删除,自然也就写不进去了

最后提醒下自已,配置文件有改动,比如添加新主机、服务之类的,用/etc/init.d/nagios reload就行了,尽量别用restart

阅读(1187) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~