Perl监控网卡流量及网桥

在最近的项目中需要监控某几台服务器的网卡流量和网桥,写了一个小的perl脚本,当网卡出现异常时,会发送邮件进行通知


#!/usr/bin/perl
# 检测网卡流量,判断链路是否正常,检测网桥是否正常
# 若检测到异常,发送邮件通知
use strict;
use Net::SMTP; 

my $timer = 5; 
my $login = "ssh user\@addr -p port";
my $cmd1 = "$login cat /proc/net/dev | grep eth1";
my $cmd2 = "$login brctl show br0 | wc -l";

&interface(cmd1, "主机XX故障", "网络接口eth1流量过低 ");
&bridge(cmd2, 2, "主机XX故障", "brctl问题 ");

#bridge(shell_cmd, if_num, mail_head, mail_content)
sub bridge {
	my $cmd = $_[0];
	my $count = $_[1];
	my $head = $_[2];
	my $content = $_[3];
	my $br = `$cmd`;
	if($br != $count)
	{
		&sendMail();
	}
}

#interface(shell_cmd, mail_head, mail_content)
sub interface {	
	my $cmd = $_[0];
	my $head = $_[1];
	my $content = $_[2];
	
	my $in_old = `$cmd`;
	sleep $timer;
	my $in = `$cmd`;

	if($in_old =~ m/:\s*(\d+)/) {
		$in_old = $1;
	}

	if($in =~ m/:\s*(\d+)/)	{
		$in = $1;
	}

	# Mbps为单位
	my $diff = ($in - $in_old) * 8 / 1000 / 1000 / $timer;	
	if($diff < 10)
	{			
		&sendMail($head, $content);
	}
}

#sendMail(header,content)
sub sendMail {
	my $mailhost = "smtp.126.com"; 
	my $mailfrom = 'test1@126.com'; 
	my @mailto = ('test2@126.com'); 
	my $subject = $_[0];  
	my $content = $_[1];
	 
	my $smtp = Net::SMTP->new($mailhost, Hello => 'localhost');  
	  
	# 登录认证  
	$smtp->auth('test1@126.com','password');  
	  
	foreach my $mailto (@mailto) {  
		$smtp->mail($mailfrom);  
		$smtp->to($mailto);  
	  
		 
		$smtp->data();  
	  
		# 邮件头  
		$smtp->datasend("To: $mailto\n");  
		$smtp->datasend("From: $mailfrom\n");  
		$smtp->datasend("Subject: $subject\n");  
		$smtp->datasend("\n");  
	  
		# 邮件内容 
		$smtp->datasend("$content\n\n");  
	  
		
		$smtp->dataend();  
	}  
	$smtp->quit;  
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值