pelr脚本实时监测重要网络设备以及服务器的连通性

几个月前开始着手做cacti相关的一些工作,使用cacti监控一些重要的网络设备以及服务器。cacti是基于snmp协议的,去轮询采集被监控设备的一些信息(流量 服务器资源使用情况等)。但有时会有一些设备因为轮询响应时间长或者没在规定的时间轮询到,而导致误报为snmp down,而实际并非如此。除了在调整cacti本身一些参数设置外,可以使用perl脚本实时监测这些设备的网络连通性

代码如下:

#!usr/bin/perl -w
use Net::Ping;  
#因为是一直检测所以条件一直为真
while(1){
$result=‘‘;  #用来记录测试的结果
#iphost.txt文件保存了需要检测的设备ip,逐行读取设备的ip,调用测试函数进行测试,将返回的结果记录下来
open(F,"iphost.txt");
while ($temp=<F>) {
		 $result=$result.&ping_test($temp);
}
close(F);
#完成测试,输出测试结果以及完成时间
print $result." ";
print &get_time."  test finish"."\n"; 
#将每次测试结果覆盖写入state.txt文件
open (FP,"+<state.txt");
print  FP $result;
close(FP);
sleep(30);
}
#连通性测试函数,使用的是Net::ping模块
sub ping_test{
my($host)[email protected]_;
$count=0;#用来记录ping不通的次数
$pingtool=Net::Ping->new("icmp");
#每个设备的IP测试五次,如果ping不通,$count自增
for($j=0;$j<5;$j++) {
    if(!$pingtool->ping($host)){   
	$count++;
	}   
}
#根据$count的值判断是否通过连通性测试,1代表通过测试,0代表没通过,5次ping测试都不通视为该设备连通性测试不通过
if($count==5){
   $state=0;
}else {
   $state=1;
 }
$pingtool->close();
return $state; #$state记录测试结果,并将其返回
}
#获取当前时间的函数
sub get_time{
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime();
	my $date = ($mon+1 .‘/‘. $mday);
	my $time = ($hour.":".$min);
	return $date." ".$time;
}

要测试的设备ip以及测试结果分别保存在iphost.txt文件以及state.txt文件,这样一来当有新增设备需要监测时,修改iphost.txt文件即可,然后通过php将测试结果显示在web端,并定时刷新,php代码如下

<html>
<head><meta http-equiv="refresh" content="120"></head>
<title>重要网络设备以及服务器连通性测试</title>
</html>
<?php
//读取刚刚测试的结果
$state_file=file("c:/perllesson/state.txt");
foreach($state_file as $value){
$state=$value;
}
//读取被测试的设备ip
$host_file=file_get_contents("c:/perllesson/iphost.txt");
$host=explode("\n",$host_file);
//将结果输出到表格,unreachable将显示为红色
echo "<table border=‘1px‘ align=‘center‘ width=‘700px‘>";
echo "<tr><th>测试类型</th><th>状态</th></tr>";
for($i=0;$i<strlen($state);$i++){
   if($state[$i]==1){
   echo "<tr align=‘center‘><td>{$host[$i]}</td><td>reachable</td></tr>";
   }else{
   echo "<tr align=‘center‘ bgcolor=‘red‘><td>{$host[$i]}</td><td>unreachable</td></tr>";
   }
}
echo "</table>" ; 
?>

其实测试的代码非常简单,这个测试的结果可以和cacti一块去判断设备是否正常运行,大大提高监测的准确性。此外在实际使用过程中,还可以在perl脚本中加入邮件报警以及短信平台的报警。在工作中遇到问题应该积极的去改善思考。

时间: 2024-11-04 09:10:20

pelr脚本实时监测重要网络设备以及服务器的连通性的相关文章

apachetop 实时监测web服务器运行状况

我们经常会需要知道服务器的实时监测服务器的运行状况,比如哪些 URL 的访问量最大,服务器每秒的请求数,哪个搜索引擎正在抓取我们网站?面对这些问题,我们虽然可以去分析查看统计访问日志文件,但是却不能让我们实时统计, 不能给我们直观的统计数据.现在好了,apachetop这个工具就可以实时的跟踪log的变化,能查看访问者正在查看哪些文件,和访问者IP等信息. 1. apachetop安装 # rpm -ivh http://mirrors.hustunique.com/epel/5/i386/ep

第一个shell脚本-监测恶意登录远程服务器

最近学习到linux系统日志和计划任务,下班回家的地铁上有了灵感,尝试编写了自己的第一个脚本,监测如果有恶意登录服务器的话,发邮件通知管理员.暂时还没学习到如何发邮件给管理员,目前只是命令行的提醒和日志记录:脚本的内容也比较简单,都是学习过的基本知识,活学活用. 1.首先编写一个脚本: 定义一个变量LT,变量的值为lastb命令列出的行数(即无效登录的次数,如有恶意登录的话行数会变多): 执行一个if判断语句,如果定义的值大于15次的话,判断为恶意登录,通知管理员. 脚本内容如下: [[emai

智能化的U-Mail邮件中继实时监测确保必达

在全球经济时代,人们越来越多的在商务活动中使用邮件进行沟通,它除了具有即时到达的便利之外,还具有传输文件量大种类丰富的优势,最新颁布的法律认为邮件等电子数据具有法律凭证一样的地位,因此邮件的重要性不言而喻.需要进行海外通邮的企业通常有这么几类:一是规模大的跨国公司基于全球布局的考虑往往在海外有分支机构:二是一些主打外销的企业,虽然规模小员工不多,但客户和市场都在海外,那就是他们的"生命线"哈:三是在国内面临着产能过剩竞争激烈局面亟需拓展海外市场的企业.但是海外通邮时,往往会遭遇到退信.

Netdata Linux下性能实时监测工具

导读 本文将介绍一款非常好用的工具——Netdata,这是一款Linux性能实时监测工具,为一款开源工具,我对其英文文档进行了翻译,水平有限,有翻译错误的地方欢迎大家指出,希望本文对大家有所帮助,谢谢. Netdata 实时性能监测(看起来是不是逼格非常高~) 特点: Netdata是一个高度优化的Linux守护进程,它为Linux系统,应用程序,SNMP服务等提供实时的性能监测. 它用可视化的手段,将被监测者最细微的细节,展现了出来.这样,你便可以清晰地了解你的系统和应用程序此时的状况. 使用

实时监测Tomcat服务的状态,如果关闭,自动开启(已解决)

前几天写了一个实时监测tomcat的脚本,之前是检测的tomcat进程是否存在,如果不存在,就开启start.bat.但是在项目部署的时候(我的项目部署在了Windows系统中了),tomcat有时会自动关闭,但是在用start.bat开启时,运行一段时间,回报Java(TM)Platform SE binary已停止工作 导致脚本检测到进程关闭,也无法正常开启tomcat.于是我就用开启服务的办法来开启tomcat, 一下脚本是检测tomcat服务运行的状态,如果tomcat服务关闭,就自动开

智能帽子能遮阳还能实时监测体征

http://tinypic.com/useralbum.php?ua=Ivdn0kUPpdQsR3ar6XbQ1w%3D%3D http://tinypic.com/useralbum.php?ua=Ivdn0kUPpdSb%2B%2B7aupBqNg%3D%3D&as=new http://tinypic.com/useralbum.php?ua=Ivdn0kUPpdS%2ByG7gI4noFw%3D%3D&as=new http://tinypic.com/useralbum.php

实时监测input控件value值动态变化的事件

目录 [1]input [2]propertychange [3]兼容处理 前面的话 HTML5为input控件新增了很多type属性,大大增加了input控件的应用场景.其中一个是type="range"的input控件,可以通过拖动游标改变value值,但并不是所有浏览器都可以实时显示,除了IE10+浏览器 说到改变value值的事件,首先想到的便是change事件,但change事件的触发条件是失去焦点并且value值改变.而游标拖动并没有失去焦点.所以,change事件并不能达

Powershell脚本实时获取所有cpu使用时间非0的进程

Powershell脚本实时获取所有cpu使用时间非0的进程,并将名称一致的进程合并. #定义结果输出路径 $OutFile = "D:\CPU_" + (Get-Date).GetDateTimeFormats()[1] + ".csv" #定义性能收集器对象 $CpuCores = (Get-WMIObject Win32_ComputerSystem).NumberOfLogicalProcessors $Processes = Get-Counter &qu

Linux的watch命令 — 实时监测命令的运行结果

Linux的watch命令 - 实时监测命令的运行结果   watch 是一个非常实用的命令,如同名字一样,watch 可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行. 用法: 直接在 watch 后面接你想运行的命令,watch 就会帮你重复运行,并把每次的结果都更新在屏幕上. 默认 watch 会以 2s 的间隔重复运行命令,你也可以用 -n 参数指定时间间隔-. 还有一个实用的参数是 -d,这样 watch 会帮你高亮显示变化的区域,这样更加一目了然了-Ctrl+c 就可以退出-