脚本添加nagios监控主机(带分析)

简介:
[背景]
     公司要监控的主机很多,估计有近1K台,而且还会增加.....所以,如果让我用手工加的话,妈呀!怕怕.......
就想到了用脚本,也看了sery老师写的那个shell的,是交互性的,感觉不实用,就自己写了,也在这里和sery老师PK下喽(哈哈,开玩笑啦!)!(注:脚本的作用就是帮我解决重复的工作,所以嘛.......就把工作交给它了.)
[过程]
     nagios所监控的对象不就是主机,联系用户,命令,服务这四个对象嘛,我们来分析下,联系用户应该算是工作量很小的工作,不需要重复得劳动的,定义命令和服务这两个差不多,都不是很累人的活.....这么说来,就是主机的定义了......
分析hosts.cfg
define host{
 host_name   bogus-router
 alias    Bogus Router #1
 address    192.168.1.254
 parents    server-backbone
 check_command   check-host-alive
 check_interval   5
 retry_interval   1
 max_check_attempts  5
 check_period   24x7
 process_perf_data  0
 retain_nonstatus_information 0
 contact_groups   router-admins
 notification_interval  30
 notification_period  24x7
 notification_options  d,u,r
 }
我从参考文档的Example Definition拷过来的......
在这里,我们能看到host_name,alias,address应该与下一个定义主机不同的,其他的可以一样...哈哈.那就可以借用use这个选项了.
哈哈,那我将我的hosts.cfg分开....
原内容:
define host {
       host_name                  Windows
       alias                      Windows 3389
       address                    192.168.x.x
       contact_groups             sagroup
       check_command             check-host-alive
       max_check_attempts         5
       notification_interval      10
       notification_period        24x7
       notification_options        d,u,r
}
划分后
definehosts.cfg
define host{
       name     inithost       #切记这个不是host_name.....
       contact_groups             sagroup
       check_command              check-host-alive
       max_check_attempts         5
       notification_interval      10
       notification_period        24x7
       notification_options        d,u,r
       register                   0             #切记这个一定要加不然会报错的....
}
hosts.cfg
define host {
       use            inithost
       host_name                  Windows
       alias                      Windows 3389
       address                    192.168.x.x
}
再修改vi nagios.cfg
cfg_file=/usr/local/nagios/etc/definehosts.cfg
那么就可以写脚本了........脚本的功能就是读取IP,将其追加到hosts.cfg下.....

define host {
       use            inithost
       host_name                  192.168.1.2
       alias                      KT_TEL_1
       address                    192.168.1.2
}
define host {
       use            inithost
       host_name                  192.168.1.3
       alias                      KT_TEL_1
       address                    192.168.1.3
}
............................
大家应该看到变的是IP吧....我们只要收集好IP列表,写个这样的脚本应该不成问题吧!
addhost.pl
#!/usr/bin/perl
open(IP,"iplist.txt");
open(FH,">>hosts.cfg");
while(<IP>){
     $ip=$_;
     print FH "define host {\n";
     print FH "\tuse            inithost\n";
     print FH "\thost_name      $ip";        
     print FH "\talias          KT_TEL_1\n";
     print FH "\taddress        $ip";        
     print FH "}\n";                       
 } 
close FH;
close IP;
执行后....
[root@study soft]# more hosts.cfg 
define host {
 use            inithost
 host_name      192.168.1.2
 alias          KT_TEL_1
 address        192.168.1.2
}
define host {
 use            inithost
 host_name      192.168.1.3
 alias          KT_TEL_1
 address        192.168.1.3
}
哈哈....
还差一步,就是分组喽!把这个iplist.txt里的IP都划分到一个组里,这是我们需要的.
那么再写个脚本吧!
addgroups.pl
#!/usr/bin/perl
open(IP,"iplist.txt");
while(<IP>){
     $ip=$_;
     chomp($ip);
     $members=$members.","."$ip"; 

close IP;
$members=~s/^,//;
$members="members\t".$members;
open(FH,">KTgroups.cfg");
   print FH "define group {\n";
   print FH "\thostgroup_name  KT_TEL_1\n";
   print FH "\talias           KT_TEL_1\n";
   print FH "\t".$members."\n";
   print FH "}\n";
close FH;
这样就可以了,看简化了很多吧!大家再把KTgroups.cfg加到nagios.cfg进去就可以了,或者自己建个目录修改cfg_dir,这样在这个目录下添加新的文件不需要再改nagios.cfg了,这点小手术,我相信大家还是有的,基本上功能完全实现了,这两个脚本也绝对受用!希望大家能在工作上能用得上!


本文转自hahazhu0634 51CTO博客,原文链接:http://blog.51cto.com/5ydycm/116336,如需转载请自行联系原作者
相关文章
|
JSON 自然语言处理 前端开发
用D3制作一张有翻页特效的手撕日历(只需100行代码)
在D3中用十分简单的代码就可以实现丰富的动画,下面来看一下手撕日历的动画效果吧
544 1
用D3制作一张有翻页特效的手撕日历(只需100行代码)
|
BI
专业认证!阿里云Quick BI入选Gartner®魔力象限
专业认证!阿里云Quick BI入选Gartner®魔力象限
448 1
|
分布式计算 C语言 Python
基于Python实现MapReduce
一、什么是MapReduce 首先,将这个单词分解为Map、Reduce。 • Map阶段:在这个阶段,输入数据集被分割成小块,并由多个Map任务处理。每个Map任务将输入数据映射为一系列(key, value)对,并生成中间结果。 • Reduce阶段:在这个阶段,中间结果被重新分组和排序,以便相同key的中间结果被传递到同一个Reduce任务。每个Reduce任务将具有相同key的中间结果合并、计算,并生成最终的输出。
|
新零售 运维 Prometheus
带你读《云原生架构白皮书2022新版》——加速 SaaS 规模化演进,餐道基于 K8s 的云上创新底座(下)
带你读《云原生架构白皮书2022新版》——加速 SaaS 规模化演进,餐道基于 K8s 的云上创新底座(下)
954 99
|
存储 JavaScript 前端开发
Node 中的 AsyncLocalStorage 的前世今生和未来(一)
作者系统详实的介绍了什么是AsyncLocalStorage、如何使用、Node 是如何实现的 AsyncHook等。不论你是0基础还是对此API有些了解的读者都比较适合阅读此文。(文末有活动)
|
机器学习/深度学习 人工智能 自然语言处理
MaskFormer:将语义分割和实例分割作为同一任务进行训练
目标检测和实例分割是计算机视觉的基本任务,在从自动驾驶到医学成像的无数应用中发挥着关键作用。目标检测的传统方法中通常利用边界框技术进行对象定位,然后利用逐像素分类为这些本地化实例分配类。但是当处理同一类的重叠对象时,或者在每个图像的对象数量不同的情况下,这些方法通常会出现问题。
5079 0
|
机器学习/深度学习 人工智能 算法
LabVIEW快速实现OpenCV DNN(YunNet)的人脸检测(含源码)
LabVIEW快速实现OpenCV DNN(YunNet)的人脸检测
1295 0
LabVIEW快速实现OpenCV DNN(YunNet)的人脸检测(含源码)
|
XML 网络协议 前端开发
Android国标接入终端实现GB28181实时位置(MobilePosition)上报
在实现本文提到的Android平台国标GB28181接入终端的实时位置上报之前,之前已经完成了Android终端GB28181常规功能接入,采集到实时音视频数据,编码PS打包后,按需传到GB28281服务平台,媒体流支持最新GB28181-2016的UDP和TCP被动模式,参数配置,支持注册有效期、心跳间隔、心跳间隔次数、TCP/UDP信令设置,支持RTP Sender IP地址类型、RTP Socket本地端口、SS-R-C、RTP socket 发送Buffer大小、RTP时间戳时钟频率设置,支持注册成功、注册超时、INVITE、ACK、BYE状态回调等。
344 0
|
机器学习/深度学习 Serverless
5分钟理解RELU以及他在深度学习中的作用
5分钟理解RELU以及他在深度学习中的作用
824 0
5分钟理解RELU以及他在深度学习中的作用
|
JSON JavaScript 数据可视化
Vue + Echarts 实现中国地图多级钻取功能
Vue + Echarts 实现中国地图多级钻取功能
694 0
Vue + Echarts 实现中国地图多级钻取功能