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

nagios使用中两大问题的解决方案
2008-05-19 11:09
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
用来发邮件的帐号 [email protected]
SMTP 验证的用户名 nagios 密码 p#3isoda
 
以下就来介绍一下 sendEmail 这个软件的使用 .
sendEmail 的主页 [url]http://caspian.dotconf.net/menu/Software/SendEmail/[/url]
下载地址 [url]http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.55.tar.gz[/url]
软件十分小 , 是一个通过命令来发 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 [email protected] –t [email protected] –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 [email protected] –t [email protected] –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 [email protected] -t $CONTACTEMAIL$ -s mail.test.com -u "** $NOTIFICATIONTYPE$ alert - $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" -xu nagios -xp p#3isoda
        }
 
 
: 其实 sendEmail 是一个十分有用的程序 , 我们在这个地方用了它 , 其实别的地方也可以用 , 典型的好处就是你不需要每台机器都装 sendmail, 开启 smtp 服务 . 直接用现成的一台邮件服务器就行了 , 这无疑很大的加强了系统的安全性 , 也节约了资源 .
 
原地址为:[url]http://hi.baidu.com/dxwangtcg/blog/item/89173e54b4dffa5dd10906a8.html[/url]

你可能感兴趣的:(邮件,问题,nagios,sendmail)