Nagios 3.xx / Icinga 1.xx服务器集成通过FoxBox设备在Debian Squeeze上的短信提醒
本教程介绍如何将标准的Nagios(或Icinga)监控服务器与SMS通知外部设备FoxBox( www.smsfoxbox.it )进行集成 。
1初步说明
如制造商所说,FoxBox有两种类型的版本(G25和LX800),硬件细节不同。 在本指南中,我们将参考SMS Gateway LX800(由于其更高的性能和CompactFlash存储,我们购买了这个),但我相信它可以扩展到其他版本没有问题。
我们的服务器在Debian Squeeze上运行Nagios Core 3.5.0(带1.4.16 Nagios插件)。 可能对于不同的发行,路径会发生变化,但逻辑依然很小。
2在FoxBox端安装
该设备专为这些通信任务而设计,因此除此之外还有很多功能:
- 提供从我们的监控服务器可访问的有效IP地址;
- 插入测试完整的SIM卡,发送短信。
3在服务器端安装
首先我们需要将这个脚本放在文件夹/ usr / lib / nagios / plugins /中
:
#!/usr/bin/perl use LWP::UserAgent; use Getopt::Long; use strict; use warnings; use constant OK => 0; use constant WARNING => 1; use constant CRITICAL => 2; use constant UNKNOWN => 3; use constant SEND_PAGE => "/source/send_sms.php"; my($host); my($username); my($password); my($number); my($message); sub usage() { print("Usage: send_sms -h|--host <host> -u|--user <username> --pw|--pass <password> -n|--number <phone_number> -m|--message <message>\n\n"); print("<host> - IP address or hostname of the SMS FoxBox\n"); print("<username> - name of the SMS FoxBox administrator\n"); print(" <password> - password of the SMS FoxBox administrator\n"); print(" <phone_number> - phone number where SMS will be sent\n"); print("<message> - message to be sent\n"); } sub send_sms { my($host, $user, $pass, $phonenum, $text) = @_; my($ua); my($html_page); my($response); my($status_code); $ua = LWP::UserAgent->new; $ua->timeout(10); $response = $ua->post("http://$host" . SEND_PAGE, [ "username" => $user, "pwd" => $pass, "from" => 'Nagios', "nphone" => $phonenum, "testo" => $text, "nc" => "http://$host" . SEND_PAGE ]); if(!$response->is_success) { print("ERROR: " . $response->status_line . "\n"); $status_code = UNKNOWN; } $html_page = $response->content; if($html_page =~ /p class="(\w+)"/g) { if($1 eq "confneg") { print("ERROR: Unable to send SMS\n"); $status_code = UNKNOWN; } else { $status_code = OK; } } else { print("ERROR: Unknown page output\n"); $status_code = UNKNOWN; } return $status_code; } undef $host; undef $username; undef $password; undef $number; undef $message; GetOptions( 'host|H=s' => \$host, 'user|u=s' => \$username, 'pass|pw=s' => \$password, 'number|n=s' => \$number, 'message|m=s' => \$message); if(!defined $host || !defined $username || !defined $password || !defined $number || !defined $message) { usage(); exit(UNKNOWN); } $message =~ s/\\n/\n/g; my($ret_status); $ret_status = send_sms($host, $username, $password, $number, $message); exit($ret_status);
正确设置此文件的权限同样重要,以便Nagios用户执行它。
现在我们应该添加新的通知命令,在短信通道上工作,而不是传统的电子邮件。 为此,我们必须将这些行添加到/etc/nagios3/commands.cfg
文件中
:
# 'notify-host-by-foxbox' command definition define command{ command_name notify-host-by-foxbox command_line /usr/lib/nagios/plugins/sendSMS.sh -h "127.0.0.1" -u "nagiosadmin" -pw "nagios" -n "$CONTACTPAGER$" -m "Host Alert: $HOSTNAME$ \nHost State: $HOSTSTATE$ \nDate/Time: $LONGDATETIME$" } # 'notify-service-by-foxbox' command definition define command{ command_name notify-service-by-foxbox command_line /usr/lib/nagios/plugins/sendSMS.sh -h "127.0.0.1" -u "nagiosadmin" -pw "nagios" -n "$CONTACTPAGER$" -m "Service Alert: $HOSTALIAS$/$SERVICEDESC$ \nService State: $SERVICESTATE$ \nDate/Time: $LONGDATETIME$" }
如您所见,我们需要联系人的新信息:电话号码。 因此,我们必须在文件/etc/nagios3/conf.d/contacts_nagios2.cfg中将
其定义为“寻呼机”。
而且,我们设置了service / host notification命令。 默认情况下,这些使用电子邮件通道,而我们想通过新的通知命令提醒,所以我们也必须编辑参数“service_notification_commands”和“host_notification_commands”:
define contact{ contact_name test-contact use generic-contact alias tester email yourname@domain host_notification_commands notify-host-by-foxbox service_notification_commands notify-service-by-foxbox pager 12453683421 }
显然,一旦完成配置,我们必须重新启动Nagios服务才能看到它们的效果。
检查一切是否正常,也许您可以启动飞行前检查
nagios3 -v /etc/nagios3/nagios.cfg
正如我所看到的,这种架构也已经在一对FoxBox版本上实现,提供了一体化通知解决方案(EasyG2 G25和监控LX800)。
(参考: www.smsfoxbox.it )