最近接到一个需求要求天天巡检各台业务设备,并导出报表,但一想到设备有N台,一台台天天巡检这样的重复劳做实在是太伤神了,所以决定写一个脚原本搞定这件事。html
首先,第一个要解决的问题是批量服务器执行命令的问题。 python
以前尝试用过pssh来进行批量服务器上执行脚本,限制较少,效果不错,各位有兴趣的能够试一下,本次为了跟上互联公司的脚步,打算用ansible对服务器进行批量操控。linux
至于ansible的手册介绍能够百度下,固然使用ansible的前提是你被控服务器的python 版本2.4以上,控制机的版本要在2.6以上。缓存
ansible的安装服务器
安装ez_setup 并执行 安装命令ssh
wget -q http://peak.telecommunity.com/dist/ez_setup.py python ez_setup.py
esay_install ansible
接下来须要配置下ansible的host文件做为测试。在/etc下建立一个ansible目录。工具
mkdir /etc/ansible vi /etc/ansible/hosts # hosts [local] 127.0.0.1
而后运行下命令看看是否成功执行。测试
ansible all -a "who"
若是发现是密码验证方式错误则设置一下免密登录。ui
ssh-keygen ssh-copy-id -i ~/.ssh/id_rsa.pub root@127.0.0.1
再测试一下该命令发现运行成功了。spa
至此,该问题解决。
而后,开始考虑各项服务器上的检测
需求1、检测服务器的瞬时CPU使用率
参考博文:http://blog.csdn.net/marising/article/details/5182771
http://blog.chinaunix.net/uid-14825809-id-2943235.html
linux基本的cpu的展现属性总共有7种
1.idle,表示CPU闲置并等待工做分配. |
2.user,表示CPU在运行用户的进程 |
3.system,表示CPU在执行kernel工做 |
4.nice,表示CPU花费在被nice改变过优先级的process上的时间 |
5.iowait,表示CPU等待IO操做完成的时间 |
6.irq,表示CPU开销在响应硬中断上的时间 |
7.softirq,表示CPU开销在响应软中断上的时间 |
属性较多,都颇有用(load average也十分有意义),但基于报表展现精简考虑,只摘取idle所占用的时间,而后1-idle%便可求出当前cpu属性。
经过vmstat命令则能够直接查看当前的cpu,内存以及io的属性信息。
而后能够经过vmstat 1 10 来显示10s内的cpu属性值。能够简单写出脚本,一条代码搞定。
vmstat 1 10 | awk 'BEGIN{i=0}NR>2{i+=$15}END{printf("%.1f%\t",100-i/10)}'
需求2、检测服务器的瞬时内存使用率
查看当前服务器内存使用率有许多方法能够看,好比top、cat /pro/meminfo、vmstat、free或者一些图形化的工具,在此选择最简单的free来操做。
因为linux为将buffers和cached充分利用,能缓存的内容都会尽可能往磁盘上缓存,因此服务器的内存使用率=free+buffers+cached
最后“-/+ buffers/cache:”这一行的内容即为当前实际的内存使用率。
统计10s内的内存数值可得以下代码。
for i in `seq 1 10` do free | fgrep "buffers/cache" sleep 1 done | awk 'BEGIN{a=0;b=0}{a+=$3;b+=$3+$4}END{printf("%.1f%\t",a/b*100)}'
至此完成该需求。
需求3、监测服务器的瞬时硬盘使用率
习惯性地用df 来查看当前硬盘使用率,如图,直接查看df --total能够堪当当前硬盘的使用率
df --total | fgrep total|awk '{printf("%s\t",$5)}'