专注系统运维、网络架构,研究技术解决方案,记录我的思想轨迹、工作学习、生活和关注的领域
分类: 系统运维
2012-12-12 13:37:09
原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明。否则将追究法律责任。http://blog.chinaunix.net/space.php?uid=25266990&do=blog&id=3437195
如今,监控系统是琳琅满目,有Nagios、Cacti、Zabbix、Centreon、Munin等,也有系统集成如FAN等。个人在经过不同监控的安装测试后,还是比较倾向于Nagios的监控,简单命令;而且结合PNP4nagios等插件可以实现图表的功能。
Nagios、Pnp4nagios使用的是RRDtool工具来实现画图的,关于Naigos和Pnp4nagios的安装这里就不介绍了。
RRDtol是一套可以把数据生成表的程式,关于RRDtool的介绍和学习,大家可以到下面网站学习。
http://www.blogjava.net/ruoyoux/articles/257138.html
另外关于SHELL Scripts学习,网上有很多资料,偶然看到一个网站:
关于监控脚本,这里也不介绍了,可以自己编写,也可以网络上下载开发好的插件。
这里主要介绍关于监控数据的获取,以及通过Pnp4nagios展示数据报表。
一、数据的获取方式
nagios性能数据
nagios将插件输出中"|"号后的内容作为性能数据。性能数据格式如下:
注意:
1. 多个性能数据之间用空格分割
2. label 可以包含任何字符
3. 如果label中包含空格、等号、或者单引号,则label需要用单引号来括起来
4. warn/crit/min/max可以为null值
value, min and max只能为负号“-” “0到9” 和小数点“.” 并且单位必须统一
例如:cpu_user=0.5%;99.9;-9;
5. 如果UOM单位是%,则min和max不需要再指定
6. UOM单位可以是如下: 默认空,表示数量(用于用户数、处理器数等)
s 表示秒(也可以用us,ms)
% 表示百分比
B 表示字节(也可以用KB,MB,TB,GB)
c 一个连续的计数(如:接口传输的字节数)
如内存监控的数据:
说明:内存使用18.700%,实际使用内存为3003MB。
我们查看脚本:
红色代码部分即为性能数据,其中:
label为Used和REALMEMUSED,再次强调,如果label有特殊字符,需加"",参数间最好不要空格。
Used作为pnp4nagios的变量,如var1、var2,在pnp中也可以写成一样的值。
USEPCT为第一个参数值,即18.700。
UOM单位是%,同样REALMEMUSED的UOM单位是MB。
到处,监控的数据已经获取。
补充:格式为warn/crit/min/max值。
如:Used=${USEPCT}%;${WARN};${CRIT};0;100
WARN和CRIT为触发值,$1 、$2,,也可以在图表展示出来。
min/max 表示最低值、最高值。
二、Pnp4nagios生成数据图表。
找到Pnp的模版目录,我的目录为:
/usr/local/pnp4nagios/share/templates 模版开发目录
/usr/local/pnp4nagios/share/templates.dist 系统自带模版
监控脚本的名称和php模版名称对应。
因为为php语言,所以要遵循PHP格式
语法详解:
说明:设置图表标题,高度等。详细参数有:
-s 绘图资料的起始时间,预设是4小时前
-e 绘图资料的结束时间,预设是现在
-t --title图表标题
-v --vertical-label Y 軸说明
-w 资料区的宽度,资料区指的是数据显示示的部份,即底部说明
-h 资料区的高度
-u Y 軸正值高度
-l Y 軸負值高度
-M 自动跳转Y軸最大值
DEF 其语法为
vnam 为Nagios监控脚本 "|" 后输出的第一个变量,如var1 、var2,也可以指定名称。
DS(Data Source),亦即在图表中宣告一个资料来源,必須先宣告,让以下的图從这里取资料。AVERAGE|MAX|MIN 为取数据平均值和最大值等。
DEF以下代码为绘图显示过程。
1、显示第一种写法,用()语法:
LINE线条方式:
用这条函式就是您想把资料用线条的方式表示,其中依照的粗细又可分为LINE1、LINE2、LINE3三种SIZE;vname即DEF中的vname;#rrggbb這这里填你想要线条显示的顏色,使用RGB代码;name填写底部显示名称。
AREA方块方式:
AREA("vname",#rrggbb,name);
用这种方式就是您想把资料用填充块狀的方式表示,其他后面的参数请參照LINE的用法,做出来的实例如下︰
STACK行数其显示︰
STACK("vname",#rrggbb,name);
则是读出数据值至其上的数值,也就是要有资料数值在 STACK 数值之上,如有多个变量,数值高的显示在上面,用法同上兩个。
GPRINT vname 即DEF中的vname,而array看你要输出的文字是AVERAGE/MAX/MIN/LAST等数值,format 如同 printf 中的格式,
做出來如下示例︰
2、显示第二种写法,用 : 语法 :
语法中参数还是一样。
另外关于报警线条的显示,可以写为:
1、
做出来的示例:
三、示例
1、以check_mem.php模版说明︰
代码:
效果图:
2、check_traffic.php网卡流量监控模版
代码:
效果图:
以上仅个人理解,如有错误的地方,希望大家指正,谢谢。