用Perl的hash数组实现个性化监控
来源:互联网 发布:php开源图片管理系统 编辑:程序博客网 时间:2024/06/06 16:16
对于DBA来说,一个准确稳定的监控系统,不啻于一柄尚方宝剑。几十上百套系统,如果每天都靠人工来检查,工作量之大无法想象,而且人工也无法做到实时捕获错误。
但是这么多数据库系统,每个库承载的压力不一样,对于整个系统的重要度也不一样,负责的DBA也不可能是同一个人。如果都按同样的KPI同样的门限来做监控,则有些重要的系统可能无法准确的告警,有些不重要的系统却又会频繁误报。
比如系统的load,有些核心库由于采用了比较高端的硬件,即使一直在20~30左右都是正常的,而一些边缘的库则可能超过5就比较危险了,所以对于load,不同的库必须设置不同的检查门限。
如果要通过shell脚本来实现这个需求,可能需要写一堆的if或者case判断,一旦要做配置变更就十分的头疼。不过perl的hash数组可以很好的解决这个问题。
#!/usr/bin/perl -w
# creator: jiangfeng
############################################################
use strict;
# 配置各主机各KPI的检查门限
# 这里配置了两个门限值,达到第一个值发IM提醒,达到第二个值发手机短信
# server, load1 load2
my %cutoff=("db1", [ 30, 40 ],
"db2", [ 20, 35 ],
"db3", [ 10, 18 ]
);
# 配置各个门限值的数组中的位置,这样在以后即使修改门限的位置,也不需要修改功能代码
# 将配置和功能分开,将极大的简化后续维护工作
my ($load1,$load2)=(0,1);
############################################################
# 检查load的函数
sub check_load{
my($server)=@_;
my $load=get_server_load(); #获得数据库主机当前load,具体实现这里就不赘述了
my $cutoff1=$cutoff{$server}[$load1];
my $cutoff2=$cutoff{$server}[$load2];
if ( $load > $cutoff2){
my $mesg=$server." load more than ".$cutoff2.",now is ".$load."/n";
send_mobile($server,$mesg); # 大于load2,发送手机告警
}
elsif( $load > $cutoff1){
my $mesg=$server." load more than ".$cutoff1.",now is ".$load."/n";
send_wangwang($server,$mesg); # 大于load1,发送旺旺告警
}
}
############################################################
#循环检查所有主机的load
foreach my $server(keys(%cutoff)){
print "---- ".$server." -----/n";
check_load($server);
}
# creator: jiangfeng
############################################################
use strict;
# 配置各主机各KPI的检查门限
# 这里配置了两个门限值,达到第一个值发IM提醒,达到第二个值发手机短信
# server, load1 load2
my %cutoff=("db1", [ 30, 40 ],
"db2", [ 20, 35 ],
"db3", [ 10, 18 ]
);
# 配置各个门限值的数组中的位置,这样在以后即使修改门限的位置,也不需要修改功能代码
# 将配置和功能分开,将极大的简化后续维护工作
my ($load1,$load2)=(0,1);
############################################################
# 检查load的函数
sub check_load{
my($server)=@_;
my $load=get_server_load(); #获得数据库主机当前load,具体实现这里就不赘述了
my $cutoff1=$cutoff{$server}[$load1];
my $cutoff2=$cutoff{$server}[$load2];
if ( $load > $cutoff2){
my $mesg=$server." load more than ".$cutoff2.",now is ".$load."/n";
send_mobile($server,$mesg); # 大于load2,发送手机告警
}
elsif( $load > $cutoff1){
my $mesg=$server." load more than ".$cutoff1.",now is ".$load."/n";
send_wangwang($server,$mesg); # 大于load1,发送旺旺告警
}
}
############################################################
#循环检查所有主机的load
foreach my $server(keys(%cutoff)){
print "---- ".$server." -----/n";
check_load($server);
}
在send_mobile和send_wangwang实现告警发送的函数中,传入了$server参数,同样可以使用hash数组配置发送给不同的责任人,基本思想和这里没有大的差别,就不重复贴代码了。
--EOF--
- 用Perl的hash数组实现个性化监控
- perl 数组的hash表
- perl hash数组
- Perl HASH数组
- Perl 利用hash 数组累加
- Perl的数组与hash表使用的对比
- perl-hash的用法
- Perl学习笔记(6)值为数组的数组,值为hash的hash,自定义的行分隔符
- perl 引用(数组和hash引用)
- Perl散列(hash)和数组
- perl hash数组(转)
- Perl 使用引用来访问hash 数组
- perl 文本内容转hash数组
- perl实现数组间的组合
- 用perl 监控windows
- Perl中hash的用法
- 个性化的分页实现
- 个性化的分页实现
- 如何增加Oracle连接数
- 实现图片由 720*480 的bmp 转换成 1920*1080 的 png
- Subversion的一些资料
- 唯一性索引和非唯一性索引深入
- 对于测试架构师的简单理解
- 用Perl的hash数组实现个性化监控
- 快速复制一张大表讨论
- 优化SQL的另类思考
- 重用大表空闲字段所带来的数据处理问题
- 利用googlecode创建在线subversion版本库
- 分页sql中普通写法和rowid写法的性能比较
- 不让自己显示在彩虹QQ的隐身列表中
- 一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 用C++/lua/python/bash的四重实现(3) 最大子序列和问题
- 为什么人总是那么现实?有些东西真不会做,可真没有人愿意帮忙。发了也无人问津呢?