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 服务 . 直接用现成的一台邮件服务器就行了 , 这无疑很大的加强了系统的安全性 , 也节约了资源 .