注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 小五思科技术学习笔记之SSH
 帮助

nagios使用中两大问题的解决方案


2007-11-08 16:01:33
版权声明:原创作品,谢绝转载!否则将追究法律责任。
nagios使用的问题解决
 
1.通过web界面修改某个服务时报错
例如对某个服务进行临时安排其执行时间,或者不让它发警告,web页面上都有这样的设置.但是常常会有错误信息如下:
Could not open command file '/usr/local/nagios/var/rw/nagios.cmd' for update!
The permissions on the external command file and/or directory may be incorrect. Read the FAQs on how to setup proper permissions.
An error occurred while attempting to commit your command for processing.
 
关于这部分在nagios.cfg中有下面的内容
# EXTERNAL COMMAND FILE
# This is the file that Nagios checks for external command requests.
# It is also where the command CGI will write commands that are submitted
# by users, so it must be writeable by the user that the web server
# is running as (usually 'nobody').  Permissions should be set at the
# directory level instead of on the file, as the file is deleted every
# time its contents are processed.
这段话的核心意思是apache的运行用户要有对文件写的权限.权限应该设置在目录上,因为每次文件的内容被处理后文件就会被删掉
 
command_file=/usr/local/nagios/var/rw/nagios.cmd
本来将apache2运行的用户apache加到nagios组就应该可以了的
但是这个却不行,就将rw这个目录及其子文件的权限改了777,这样就可以了.
后来发现nagios.cmd的权限还是自动变回了rw-rw----,但是发命令没有受到影响,不报错了.(难道是用重启nagios,让其生效?)
 
2.nagios警告邮件的特殊配置
nagios发警告邮件是采用本机的smtp服务,可以查看commands.cfg中关于发邮件的命令的定义,使用本机的mail命令,这就需要开启本机的smtp服务,为了安全可以在防火墙上设置拒绝其他的机器连本机的25号端口
现在我们的网络里面有一个邮件服务器,所以要求使用这台现有的邮件服务器,不开启本机的smtp服务,这就需要重新定义命令使用第三方软件sendEmail.
 
首先我们当然要在邮件服务器上新建一个账户用来做发邮件的账户
这里邮件服务器的地址为mail.test.com
用来发邮件的帐号nagios@test.com
SMTP验证的用户名 nagios 密码 p#3isoda
 
以下就来介绍一下sendEmail这个软件的使用.
软件十分小,是一个通过命令来发smtp邮件的程序.安装也十分简单(查看其README文件即可).
解压缩tar –zxvf sendEmail-v1.55.tar.gz
cd sendEmail-v1.55
将可执行程序复制cp sendEmail /usr/local/bin
然后给确认确实它具有执行权限
ll /usr/local/bin/sendEmail
-rwxr-xr-x 1 root root 77882 11-03 14:23 /usr/local/bin/sendEmail
这样程序就装好了,使用也很简单.直接运行sendEmail就会显示详细的用法
先看一个典型的例子
/usr/local/bin/sendEmail –f nagios@test.com –t yahoon@test.com –s mail.test.com –u “from nagios” –xu nagios –xp p#3isoda –m happy
解释:
-f 表示发送者的邮箱
-t 表示接收者的邮箱
-s 表示SMTP服务器的域名或者ip
-u 表示邮件的主题
-xu 表示SMTP验证的用户名
-xp 表示SMTP验证的密码(注意,这个密码貌似有限制,例如我用d!5neyland就不能被正确识别)
-m 表示邮件的内容
 
如果你不带-m参数的话,就会提示你自行输入
Reading message body from STDIN because the ‘-m’ option was not used.
If you are manually typing in a message:
  - First line must be received within 60 seconds.
  - End manual input with a CTRL-D on its own line
输入完成后使用CTRL-D来结束
当然我们也可以将一个文件的内容作为邮件的正文发出去的
那么就可以使用:
cat 文件名 | /usr/local/bin/sendEmail –f nagios@test.com –t yahoon@test.com –s mail.test.com –u “from nagios” –xu nagios –xp p#3isoda
有关sendEmail的用法就讲到这里
 
既然nagios要使用sendEmail来发警告邮件,那么就要修改commands.cfg中关于发邮件的命令的定义,我们现在来修改notify-by-email这个命令,如下(注意其中粗体的部分)
# 'notify-by-email' command definition
define command{
        command_name    notify-by-email
        command_line    /usr/bin/printf "%b" "***** Nagios 2.9 *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /usr/local/bin/sendEmail -f nagios@test.com -t $CONTACTEMAIL$ -s mail.test.com -u "** $NOTIFICATIONTYPE$ alert - $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" -xu nagios -xp p#3isoda
        }
 
 
:其实sendEmail是一个十分有用的程序,我们在这个地方用了它,其实别的地方也可以用,典型的好处就是你不需要每台机器都装sendmail,开启smtp服务.直接用现成的一台邮件服务器就行了,这无疑很大的加强了系统的安全性,也节约了资源.
 
 
 
 

本文出自 “yahoon的小屋” 博客,谢绝转载!





    文章评论
 
2007-11-08 22:08:33
YAHOON,厉害
我已经收藏啦

2007-11-13 16:55:04
/usr/local/bin/sendEmail –f nagios@test.com –t yahoon@test.com –s mail.test.com –u “from nagios” –xu nagios –xp p#3isoda –m happy
测试已发送成功,我也收到了邮件。
修改commands.cfg后,却一直没有收到邮件,这是怎么回事?
我的nagios监控有CRITICAL错误。

2007-11-14 10:05:24
你的通知命令确实是notify-by-email吗?
你在commands.cfg中重新定义notify-by-email了吗?
定义正确吗?

2007-11-14 10:08:49
还有 你修改了配置文件记得重启nagios!!

2007-11-14 10:40:25
# 'notify-by-email' command definition
define command{
    command_name   notify-by-email
    command_line   /usr/bin/printf "%b" "***** Nagios 2.10 *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /usr/local/bin/sendEmail -f nagios@guoing.com -t $CONTACTEMAIL$ -s mail.guoing.com -u "** $NOTIFICATIONTYPE$ alert - $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" -xu nagios -xp passwd
    }
nagios我也重启了。。

2007-11-14 11:43:26
OK已经弄好了,多谢yahoon兄

2007-11-15 16:53:53
关于第一个问题
必需保证apache是有效的运行组和用户

#User nobody
User apache
Group apache
#Group #-1

特别是组,不能使用#-1,否则不停的报这个错

2008-02-27 15:18:21
关于第一个问题,应该这样的解决,你说得不明不白的。其实文档都写得很清楚。

首先,看一下你的进程,apache的进程,是什么用户运行,一般会是nobody

#ps -ef | grep http
root   27252   1 0 Feb26 ?     00:00:01 /usr/local/apache/bin/httpd -k start
nobody   12587 27252 0 15:23 ?     00:00:00 /usr/local/apache/bin/httpd -k start
nobody   12588 27252 0 15:23 ?     00:00:00 /usr/local/apache/bin/httpd -k start
nobody   12589 27252 1 15:23 ?     00:00:01 /usr/local/apache/bin/httpd -k start
nobody   12590 27252 1 15:23 ?     00:00:01 /usr/local/apache/bin/httpd -k start
nobody   12591 27252 0 15:23 ?     00:00:00 /usr/local/apache/bin/httpd -k start
nobody   12618 27252 0 15:23 ?     00:00:00 /usr/local/apache/bin/httpd -k start

注意,这里指的是普通用户,而不是root运行的那个起始进程。

然后怎么做呢,如果你运行的nagios进程的用户是nagios,组也是nagios,则:

usermod -G nagios nobody
chmod g+s /path/to/nagiosdir/var/rw

注意,cgi.cfg里面设置就不多说了。

然后重启apache,这样就能运行了。

2008-02-27 16:52:36
呵呵 谢谢指点

 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: