启动nagios、启动sendmail测试nagios发信,通过监控maillog日志发现始终没有发信信息,并且得到错误提示:
sendmail[28180]: NOQUEUE: SYSERR(root): opendaemonsocket: daemon MTA: cannot bind: Address already in use
sendmail[28180]: daemon MTA: problem creating SMTP socket
查资料说是和postfix冲突,查看postfix服务状态,果然postfix启动了,果断停掉。重新启动一下sendmail。重新测试nagios检测服务停止发信功能。正常···
Error: Could not open command file ‘/usr/local/nagios/var/rw/nagios.cmd’ for update!
出现这个问题,一般是apache服务运行的账户对nagios.cmd没有权限。所以导致报错。
常见的解决办法是直接修改nagios.cmd的文件权限,直接改为777,问题即可解决。
但是在下次重新启动nagios服务时,此文件权限会又会变为原先的权限。
prw-rw—-. 1 nagios nagios 0 May 9 23:13 nagios.cmd
解决办法1:
修改apache的运行账户为nagios账户。这个nagios账户就是运行nagios服务的账户,一般我们会用”nagios”用户来运行。
但是这样可能会对apache有某种程度影响。如果是本机单纯跑nagios监控那就无所谓了。
解决办法2:
将naigos的运行账户改为apache的运行账户。
上面两种方法总结一句话就是apache和nagios的运行账户必须是同一个。
由于实际环境限制,它俩又不能用同一个账户,我采用下面方法。
解决方法3:
在nagios启动脚本上下手。
[root@localhost ~]# vi /etc/rc.d/init.d/nagios #截取其中一部分
case "$1" in start) echo -n "Starting nagios:" $NagiosBin -v $NagiosCfgFile > /dev/null 2>&1; if [ $? -eq 0 ]; then su - $NagiosUser -c "touch $NagiosVarDir/nagios.log $NagiosRetentionFile" rm -f $NagiosCommandFile touch $NagiosRunFile chown $NagiosUser:$NagiosGroup $NagiosRunFile $NagiosBin -d $NagiosCfgFile if [ -d $NagiosLockDir ]; then touch $NagiosLockDir/$NagiosLockFile; fi echo " done." chmod 777 /usr/local/nagios/var/rw/nagios.cmd exit 0 else echo "CONFIG ERROR! Start aborted. Check your Nagios configuration." exit 1 fi ;;
在 echo ” done.”(13行)下面添加一句chmod 777 /usr/local/nagios/var/rw/nagios.cmd
目的就是为了启动nagios的时候顺便执行一下修改权限。
另外还需要修改restart)部分 (重启nagios),这里第三种方式我认为最方便。
这样一来支持执行 service nagios start/restart 时就可以自动修改文件权限。
ssh端口修改后nagios监控ssh服务
nagios默认监控ssh的端口是22,这个是无疑的,为了安全我们可能会修改ssh的默认端口,这样一样nagios就无法正常监控了。
现在就需要修改监控主机的配置文件。
我们可能不了解nagios插件的参数,不过可以通过如下方式查看:
[root@localhost ~]# cd /usr/local/nagios/libexec/ #进入nagios插件目录
[root@localhost libexec]# ./check_ssh #直接执行二进制文件,有的是shell脚本 check_ssh: Could not parse arguments Usage: check_ssh [-4|-6] [-t <timeout>] [-r <remote version>] [-p <port>] <host> [root@localhost libexec]# ./check_http check_http: Could not parse arguments Usage: check_http -H <vhost> | -I <IP-address> [-u <uri>] [-p <port>] [-J <client certificate file>] [-K <private key>] [-w <warn time>] [-c <critical time>] [-t <timeout>] [-L] [-E] [-a auth] [-b proxy_auth] [-f <ok|warning|critcal|follow|sticky|stickyport>] [-e <expect>] [-d string] [-s string] [-l] [-r <regex> | -R <case-insensitive regex>] [-P string] [-m <min_pg_size>:<max_pg_size>] [-4|-6] [-N] [-M <age>] [-A string] [-k string] [-S <version>] [--sni] [-C <warn_age>[,<crit_age>]] [-T <content-type>] [-j method]
根据提示可以看到插件支持的参数,那么这里ssh的就需要-p指定端口号。
比如我现在监控本机,直接修改localhost.cfg
define service{ use local-service ; Name of service template to use host_name localhost service_description SSH check_command check_ssh! -p 1122 notifications_enabled 0 }
nagios下,命令与参数之间通过叹号!来分开。
define service{ use local-service ; Name of service template to use host_name localhost service_description HTTP check_command check_http! -p 8080 #也可以用check_tcp!8080这种方法 notifications_enabled 0 }
外部命令文件无法stat()。
外部文件不存在,或Nagios未运行、Nagios不支持外部命令。
提交命令时出错
在服务中启用服务通知 Enable notifications for this service 提交的时候报错。
Error: Could not stat() command file ‘/usr/local/nagios/var/rw/nagios.cmd’!
The external command file may be missing, Nagios may not be running, and/or Nagios may not be checking external commands.
An error occurred while attempting to commit your command for processing.
根据错误提示到/usr/local/nagios/var/rw下发现没有nagios.cmd文件。不知道为啥···
解决办法:
[root@localhost ~]# cd /usr/local/nagios/var/rw
[root@localhost rw]# mkfifo nagios.cmd
[root@localhost rw]# chmod o+w nagios.cmd
[root@localhost rw]# chmod g+w nagios.cmd
[root@localhost rw]# ll nagios.cmd
prw-rw—- 1 nagios nagios 0 May 9 09:08 nagios.cmd
[root@localhost ~]# service nagios restart
FIFO是一种特殊的文件类型,它允许独立的进程通讯.
一个进程打开FIFO文件进行写操作,而另一个进程对之进行读操作, 然后数据便可以如同在shell或者其它地方常见的的匿名管道一样流线执行。
关于nagios的介绍不做过多的描述,下面开始安装过程。
nagios的官方网站:http://www.nagios.org
目前最新版为4.0.6,这里我不用最新版本,采用nagios-3.5.1。
下载地址:http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.5.1.tar.gz
nagios插件下载地址:http://nagios-plugins.org/download/nagios-plugins-2.0.tar.gz
nagios汉化插件下载地址:http://nchc.dl.sourceforge.net/project/nagios-cn/sourcecode/zh_CN%203.2.3/nagios-cn-3.2.3.tar.bz2
nagios需要web服务器和php支持,所以安装Apache(或nginx)+php,mysql到用不上顺便装上留作其它测试用。
安装:
[root@centos-6.5-x64 ~]#useradd -s /sbin/nologin nagios [root@centos-6.5-x64 ~]#yum install -y gcc gcc-c++ gd gd-devel openssl openssl-devel zlib zlib-devel httpd php php-mysql php-gd php-mbstring mysql mysql-server sendmail [root@centos-6.5-x64 ~]#tar zxvf nagios-3.5.1.tar.gz [root@centos-6.5-x64 ~]#cd nagios [root@centos-6.5-x64 nagios]#./configure --prefix=/usr/local/nagios --with-gd-lib=/usr/lib --with-gd-inc=/usr/include/ [root@centos-6.5-x64 nagios]#make all [root@centos-6.5-x64 nagios]#make install [root@centos-6.5-x64 nagios]#make install-init #在/etc/rc.d/init.d目录下创建nagios启动脚本就可以通过service nagios start···管理 [root@centos-6.5-x64 nagios]#make install-commandmode #自动设置相关目录的权限 [root@centos-6.5-x64 nagios]#make install-config #安装nagios配置文件模板
安装nagios插件:
[root@centos-6.5-x64 ~]#tar zxvf nagios-plugins-2.0.tar.gz [root@centos-6.5-x64 ~]#cd nagios-plugins-2.0 [root@centos-6.5-x64 nagios-plugins-2.0]#./configure --prefix=/usr/local/nagios/ [root@centos-6.5-x64 nagios-plugins-2.0]#make all [root@centos-6.5-x64 nagios-plugins-2.0]#make install
插件被安装到/usr/local/nagios/libexec/下
安装中文插件:
对于像我这样渣渣英语的同学来说安装个汉化插件不错。
[root@centos-6.5-x64 ~]#tar jxvf nagios-cn-3.2.3.tar.bz2 [root@centos-6.5-x64 ~]#cd nagios-cn-3.2.3 [root@centos-6.5-x64 nagios-cn-3.2.3]#./configure [root@centos-6.5-x64 nagios-cn-3.2.3]#make all [root@centos-6.5-x64 nagios-cn-3.2.3]#make install
配置apache:
[root@centos-6.5-x64 ~]#vi /etc/httpd/conf/httpd.conf
User nagios #运行apache的用户、组改为nagios
Group nagios
DirectoryIndex index.php index.html index.html.var
直接跳到最后一行追加:
ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin" <Directory "/usr/local/nagios/sbin"> AuthType Basic Options ExecCGI AllowOverride None Order allow,deny Allow from all AuthName "Nagios Access" AuthUserFile /usr/local/nagios/etc/htpasswd #指定密码文件 Require valid-user </Directory> ServerName localhost Alias /nagios "/usr/local/nagios/share" <Directory "/usr/local/nagios/share"> AuthType Basic Options None AllowOverride None Order allow,deny Allow from all AuthName "Nagios Access" AuthUserFile /usr/local/nagios/etc/htpasswd Require valid-user </Directory>
因为nagios没有自带用户认证功能,所以通过apache来实现访问授权。
[root@centos-6.5-x64 ~]#htpasswd -c /usr/local/nagios/etc/htpasswd root #添加授权用户root,名字可自己定义。
New password:
Re-type new password:
Adding password for user root
[root@centos-6.5-x64 ~]#service nagios start
[root@centos-6.5-x64 ~]#service httpd start
现在可以访问nagios了。
http://192.168.1.53/nagios/
PS:
安装完成后访问出现的几个错误。
报错1:
错误: 无法正确地读出配置文件中的对象数据!
[root@localhost ~]# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg #检查配置文件
我执行后提示我Line 1043 (UNKNOWN VARIABLE) 1043行有错误。
#service_check_timeout_state=c #根据检查配置文件命令提示此行错误,屏蔽。
错误2:
The requested URL /nagios/cgi-bin/statusmap.cgi was not found on this server.
到/usr/local/nagios/sbin确认确实没有此文件。
这个错误是最开始安装时没有安装gd和gd-devel包,导致没有statusmap.cgi程序。不过上面我们已经安装了gd和gd-devel所以不会出现,留作提示大家注意下。
[root@localhost sbin]# yum install gd gd-devel 重新编译nagios
./configure --prefix=/usr/local/nagios --with-gd-lib=/usr/lib --with-gd-inc=/usr/include
编译nagios时通过此参数得到statusmap.cgi文件,否则登陆nagios后,点击拓扑图会提示404错误。