web篇
关键字:shell mysql python web.py
在上一篇中,我们介绍了如何使用shell脚本监控系统状态,并在出现异常时通过email发送警报。但email报警有一个弊端,无法实时了解服务器的运行状态。为了满足这一需求,就要开发一个web程序,通过网页的方式来显示所有服务器的实时运行状态。
关键字:shell mysql python web.py
在上一篇中,我们介绍了如何使用shell脚本监控系统状态,并在出现异常时通过email发送警报。但email报警有一个弊端,无法实时了解服务器的运行状态。为了满足这一需求,就要开发一个web程序,通过网页的方式来显示所有服务器的实时运行状态。
随着维护服务器量的增多,越来越觉得监控的重要性。监控,就是运维人员的眼睛,没有了监控,你不知道磁盘是否满了,网络流量是否超标,甚至服务器是否宕机。监控的重要性不言而喻。市面上的监控软件也很多,如商业版的ipmontor、opmanager,免费开源的nagios、cacti等。每个监控软件都有各自优缺点和应用场景,这里不去探讨。本文要探讨的是从一个初学者的角度去打造属于自己的监控系统。共分为三部分:email篇、web篇和移动篇(android)。好了,不废话了,下面开始。
vim flow.sh
1 | #!/bin/bash |
脚本默认显示eth0的流量,如果要显示其它网卡的流量,请在脚本后接网卡名,如:
./flow.sh eth1
另一个版本,就是改了下显示的方式:
1 | #!/bin/bash |
CentOS的yum源是在/etc/yum.repos.d/目录下的两个文件中进行配置的,CentOS-Base.repo和CentOS-Media.repo。其中,CentOS-Base.repo是配置网络yum源,CentOS-Media.repo是配置本地yum源。
如果要在没有网络的环境下安装rpm包,可以配置本地光盘源来解决。
expr只能用于一元操作符,不支持二元操作符
1 | x=1 |
$x + 1之间必须有空格
1 | x=10 |
1 | x=$((4+5)) |
1 | x=$[ 4 + 5 ] |
1 | decare -i num |
1、使用shell当编辑器
1 | mail -s "hi,this is a test by shell" [email protected] |
-s后面接邮件的主题,[email protected]是邮件的接收人,输入完这行命令后回车,会进入邮件正文的编写。当邮件正文输入完成后,按CTRL+D结束输入,邮件就发送出去了。
200 – OK,服务器成功返回网页
– Standard response for successful HTTP requests.
301 – Moved Permanently(永久跳转),请求的网页已永久跳转到新位置。
– This and all future requests should be directed to the given.
403 – Forbidden(禁止访问),服务器拒绝请求
– forbidden request (matches a deny filter) => HTTP 403
– The request was a legal request, but the server is refusing to respond to it.
列出所有 ESTABLISHED 状态的连接:
1 | netstat -nta | fgrep "ESTABLISHED" | cut -b 49-75 | cut -d ':' -f1 | sort | uniq -c | sort -n -r --key=1,7 | head -25 |
PS:关于nagios的被动监控(nsca)好几个月前就想整理了,整了这么久才整完,看来自己又懒散了。需要寻找一些动力了。。。
nagios的主动监控,可以参考下以下博文,博主讲得很详细:nagios全攻略
以下介绍nagios的被动监控NSCA:
随着服务器的不断增加,nagios监控机已经有点不堪负重,故尝试使用被动模式以承担更大的监测量,同时也提高了监测的灵敏性和监测的方便性。
相比与主动模式中服务器主动去被监控机上轮询获取监控数据的方式,被动模式则是在被监控机上面通过插件或脚本获取监控数据,然后将数据通过send_nsca发往监控机,最后监控机通过Nsca接收并解析数据,并传递给Nagios。这样做的一个很大的优势就是将除去处理数据的其他工作都放在了被监控机上面(包括了数据的传输),这样就避免了被监控机数量大时,一次轮询时间过长而导致监控反应延迟,这也是被动模式能承担更大监控量的关键
Nsca (安装在MonitorServer上,用来接收并解析MonitorClient发来的监控数据,传递给nagios)
Send_nsca(安装在MonitorClient上,用来发送监控数据。)
在MonitorClient上面,使用nagios-plugins提供的插件,得出监控数据,然后将数据存为一个文件,利用输入重定向,通过send_nsca将数据发往MonitorServer。MonitorServer上面运行一个nsca的daemon(默认开启5667端口),用来接收这些数据,然后做一个简单的处理(会和nagios的service文件进行对应,将多余的监控数据排除),然后将数据进行格式的转换,发给nagios的“外部命令文件”(默认配置为“/usr/local/nagios/var/rw/nagios.cmd”在nagios.cfg中定义的)。
该文件是一个管道文件,也是nagios主程序的一个接口(用来接收监控数据),使用cat查看该文件时候,会出来经nsca处理后的数据格式。然后nagios主程序对数据进行处理(前台展示,警报)。
1)修改配置文件nagios.cfg
1 | check_external_commands = 1 (enable commands file) |
2)添加模板(template.cfg)
1 | define service{ |
3)定义一个command
1 | define command{ |
该command对被监控机发过来的数据进行处理,check_dummy只能处理4个参数(0、1、2、其他数字)
1 | [root@vps /]# /usr/local/nagios/libexec/check_dummy 0 |
4个参数可以代表4种状态,而监测服务一般只需要两种状态(running,sotp),硬件三种(OK warning critical)
4)再定义一个本机的被动监控service:
1 | define service{ |
1 | wget http://nchc.dl.sourceforge.net/project/nagios/nsca-2.x/nsca-2.9.1/nsca-2.9.1.tar.gz |
以上步骤检查正确执行以后:
1)、会在src目录下生成两个程序 nsca send_nsca(主程序)
2)、sample-config中会有nsca.cfg与send_nsca.cfg(配置文件)
3)、当前目录下会有一个init-script(启动脚本)
Nagios监控机(MonitorServer)操作:
1 | cp src/nsca /usr/local/nagios/bin/ |
至此nsca安装完成,下面需要更改一些配置选项: (nsca.cfg)
1 | server_address=xxx.xxx.xxx.xxx (这里务必使用对外表现的IP) |
1 | /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg |
1 | service nagios start |
1 | echo "localhost;NSCA;0;testOK"|./send_nsca -H 127.0.0.1 -d ";" -c /root/send_nsca.cfg |
通过管道将数据传给send_nsca程序,send nsca再将数据发送到nsca服务,其中localhost是nsca监听的主机名,NSCA是Nagios中定义的被动监测服务的名字,0告诉nsca正常,testOK是附加信息,在web端的显示如下:
也可以将要发送的数据写入一个文件,如/root/info.txt,用下面命令发送数据:
1 | ./send_nsca -H 127.0.0.1 -d ; -c /root/send_nsca.cfg < /root/info.txt |
1 | #!/bin/bash |
将脚本放到被监控机上,例如保存为/root/nsca/nsca_check.sh,给予执行权限,并放到crontab每5分钟执行一次。
1 | #!/bin/bash |
保存为/root/nagios_add.sh,并给予执行权限。
使用:
例如将需要添加被动监控服务器信息写道文件/root/servers.txt中,第一列为主机名,第二列是主机对应的ip:
1 | service1 192.168.1.1 |
执行:
1 | /root/nagios_add.sh test /root/servers.txt |
其中,test是服务器要加入到组。
执行结果:
1 | [root@vps ~]# more /usr/local/nagios/etc/nsca/test.cfg |
最后重启nagios让配置文件生效。
最精确硬盘分区的算法如下:
硬盘一般有255磁头,63扇区,故每柱面大小为:
1 | 512byte x 255 x 63=8225280bytes =7.84423828125 MB |
如果要分40GB,那么要
1 | 40x1024MB=40960MB |
需要柱面数为
1 | 40960÷7.84423828125=5221.66 |
取整数既为5222个柱面
应分M数为
1 | 5222x7.84423828125=40962.6123046875MB |
不管小数点后面几位都进1,也就是40963MB,windows就认为是40GB了。
这个方法NTFS和FAT32通用。
下面附10GB到200GB整10GB递增的精确计算结果:
1 | 10GB = 10245MB |
此精确分区结果,在管理工具-磁盘管理界面,和Windows资源管理器里面显示的是整数,10G就是10.00GB,20G就是20.00GB,40G就是40.00GB。