基于Perl的一个网站监控脚本

朋友给了我一个课题,就是用perl实现一个网站监控的脚本。

这个脚本主要实现的功能就那么几点,每间隔一段时间获取网站的应答状态、网站的响应时间。

如果应答出错,通过邮件的形式将应答状态码发送过来。

首先先处理一下应答状态。

这个可以使用LWP::UserAgent实现。

实现很简单,通过查看CPAN的例子可以看到 http://search.cpan.org/~mschilli/libwww-perl-6.08/lib/LWP/UserAgent.pm

require LWP::UserAgent;

my $ua = LWP::UserAgent->new;
$ua->timeout(10);
$ua->env_proxy;

my $response = $ua->get(‘http://search.cpan.org/‘);

if ($response->is_success) {
    print $response->decoded_content;  # or whatever
}
else {
    die $response->status_line;
}

比较容易理解,起初是new一个LWP::UserAgent的对象,设置超时时间为10秒,环境变量获取代理设置,然后去获取网页的应答,访问成功则对应的$response->is_success为真,否则会返回错误的状态码。

这里需要说明一下的是,早期的LWP::UserAgent似乎只支持http而不支持https的,如果使用https的协议需要再安装一个LWP::Protocol::https,所以在没有装这个模块的时候会出一个错误。模块都是由cpan直接安装的,命令行打cpan然后install LWP::UserAgent,install LWP::Protocol::https这样。

接下来处理网站的响应时间,发现LWP::UserAgent似乎没有这个处理,故使用了Net::Ping这个模块,同样第一次使用的话先得通过cpan进行install。由于cpan中的模块有很多,模块可能还有更好的选择。

下面是cpan中给出的例子:http://search.cpan.org/~smpeters/Net-Ping-2.41/lib/Net/Ping.pm

# High precision syntax (requires Time::HiRes)
    $p = Net::Ping->new();
    $p->hires();
    ($ret, $duration, $ip) = $p->ping($host, 5.5);
    printf("$host [ip: $ip] is alive (packet return time: %.2f ms)\n", 1000 * $duration)
      if $ret;
    $p->close();

Net::Ping->new([$proto [, $def_timeout [, $bytes [, $device [, $tos [, $ttl ]]]]]]);

$proto的default值是tcp,其他还有"udp", "icmp", "stream", "syn", or "external"这些。

这里我用到的是syn这个,当这个syn协议被指定时,将会发送一个TCP SYN packet到网站并马上返回,syn包发送成功则返回true,发送失败则返回falase,由于不需要像tcp那样经过三次握手,返回的值可能是不确定的,不过由于响应的速度快,更适合向多个地址发送packet。

($ret, $duration, $ip) = $p->ping($host, 5.5);

返回成功则ret将会为true,得到一个包的返回时间duration,和域名对应的ip地址,5.5表示timeout,default值为5秒。

$p->hires();

这个函数需要使用Time::HiRes这个模块,为了返回微秒级的响应时间,就必须使用这个函数,所以duration得到的值是个微秒级的浮点型数值,故*1000将其转化成毫秒单位。

同样是封存了挺久的一份草稿呀。不过这里涉及到了Perl的几个库,所以就当一份资料存起来吧。

时间: 2024-11-10 13:28:29

基于Perl的一个网站监控脚本的相关文章

开发一个终端监控脚本

预备知识 script命令的使用 参数: -t     指明输出录制的时间数据文件 -f         如果需要在输出到日志文件的同时,也可以查看日志文件的内容,可以使用 -f 参数.PS:可以用于教学,两个命令行接-f可以实时演示 -a          输出录制的文件,在现有内容上追加新的内容 -q          可以使script命令以静默模式运行 格式: script -t 2>/目录/文件.date -a -q -f /目录/文件.log 其中-t 2>/目录/文件 是指定一个

一个网站的诞生09--自动监控

部署Web App,需要买一个域名,我推荐http://www.namecheap.com/,用信用卡或者paypal付款,一年10刀. 如果需要VPS,买Linode.com的,它家新推出每月10刀的主机,性能绝佳,如果选择东京的机房,从大陆访问很快,用海外的主机不需要备案,这是最大的卖点. 网站的tornado代码运行了,网站可以访问了.有时候网站会因为各种原因崩溃,比如被攻击,代码bug,流量太大等等. 这时候就需要一个自动监控脚本.这个脚本监控网站的tornado进程,每隔几秒检测一次进

ansible-playbook基于role的配置一键安装zabbix客户端以及拉取自定义监控脚本

在IT工作中,您可能会一遍又一遍地执行相同的任务:没有人喜欢重复的任务.通过Ansible,IT管理员可以开始自动化日常任务中的苦差事.自动化解放了管理人员,专注于通过加快应用交付时间和建立在成功文化基础之上,为业务提供更多价值的努力.最终,Ansible为团队提供了他们永远无法获得足够的一件事:时间.让聪明的人专注于聪明的事情. Ansible是一种简单的自动化语言,可以完美地描述IT应用程序基础结构.它易于学习,自我记录,并且不需要毕业级的计算机科学学位来阅读.自动化不应该比它正在取代的任务

【sehll学习】linux运维一个简单shell脚本监控系统内存

学习shell脚本入门后,慢慢要尝试编写一些脚本练练手,在这先简单的学习写个系统内存的监控. 1.首先先要确定一下截取一下需要关注的内存使用值,可使用free 命令来操作 free -m 显示 一般在监控内存是我们都是截取 第三行(-/+ buffers/cache)的值.确定后可以使用管道线和grep命令来获取这个的值. free -m | grep - | awk  '{print $4}' 获取到他的值为  858 当中 grep -  就是匹配一下要选取的内容,不太熟悉的可以学习一下gr

python 写一个类似于top的监控脚本

最近老板给提出一个需要,项目需求大致如下:  1.用树莓派作为网关,底层接多个ZigBee传感节点,网关把ZigBee传感节点采集到的信息通过串口接收汇总,并且发送给上层的HTTP Server: 2.要有数据的反向控制通道,即网关与Server间要保持长连接,采用websocket实现,以此实现给ZigBee传感节点发送控制命令,来实现对ZigBee节点的远程配置操作: 3.树莓派网关本身要与上层Server实现交互,上层Server能够看到网关实时的cpu.内存以及网络上行与下行的带宽等等:

基于nginx + dwz定制一个网站

前言 原创文章欢迎转载,请保留出处. 若有任何疑问建议,欢迎回复. 邮箱:[email protected] 稍微花了点时间定制了一个简单的dwz网站,主要利用框架制作了主界面和简单地调用了jQuery.ajax查询json. 利用dwz框架模板 之前已经搭建好dwz了,由于之前搭建的dwz后来使用的时候出现了bug,所以这里我使用新版的dwz 1.4.6,可以到https://code.google.com/p/dwz/downloads/list下载.这里我们只是使用dwz框架而已,所以暂时

网站监控系统安装部署(zabbix,nagios)

zabbix分布式监控系统安装部署 官方网站链接 https://www.zabbix.com/documentation/2.0/manual/installation 安装环境说明 参考地址 http://mayulin.blog.51cto.com/1628315/514371 虚拟机两台 zabbix_server 192.168.50.141 zabbix_agentd 192.168.50.139 os:CentOS 6.3 x64 软件: zabbix-2.0.6 需求软件:htt

Cacti 模板(图形模板、数据模板、主机模板)与自定义监控脚本

Cacti定义了三种类型的模板,分别是 主机模板 数据模板 图形模板     主机模板(Host templates),它是图像模板和数据查询的一个集合,描述了监控某一类型的机器需要生成那些图像. 数据模板(Data templates),它描述了 Cacti 存储哪些数据到指定类型的 RRD 文件.该模板与 RRDTool 工具的 create 命令相关. 图形模板(Graph templates),描述了生成的一张图像应该是什么样子的.包括使用哪些数据模板.展示哪些元素.是否使用 CDEF

基于jenkins搭建一个持续集成服务器

1 引言 1.1 编写目的 指导质量管理部,业务测试组同事进行Jenkins环境部署,通过Jenkins解决测试环境不可控,开发测试环境不一致等问题. 1.2 使用对象 质量管理部.基础研发部,集成部署部及EMT 目标受众: 本文的预期受众是从事持续交付或持续自动测试工作的软件工程师.要想按照本文中的步骤进行操作,您应该理解: 脚本开发. 软件开发流程. 1.3 持续集成概述 1.3.1 什么是持续集成 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成