使用pnp4nagios实现naigos服务图表-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 6315111
  • 博文数量: 162
  • 博客积分: 3600
  • 博客等级: 中校
  • 技术积分: 10366
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-19 11:23
个人简介

专注系统运维、网络架构,研究技术凯发app官方网站的解决方案,记录我的思想轨迹、工作学习、生活和关注的领域

文章分类
文章存档

2014年(2)

2013年(16)

2012年(27)

2011年(117)

相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: 系统运维

2012-12-12 13:37:09

原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明。否则将追究法律责任。

如今,监控系统是琳琅满目,有nagioscactizabbixcentreonmunin等,也有系统集成如fan等。个人在经过不同监控的安装测试后,还是比较倾向于nagios的监控,简单命令;而且结合pnp4nagios等插件可以实现图表的功能。


nagiospnp4nagios使用的是rrdtool工具来实现画图的,关于naigospnp4nagios的安装这里就不介绍了。

rrdtol是一套可以把数据生成表的程式,关于rrdtool的介绍和学习,大家可以到下面网站学习。



另外关于shell scripts学习,网上有很多资料,偶然看到一个网站:



关于监控脚本,这里也不介绍了,可以自己编写,也可以网络上下载开发好的插件。



这里主要介绍关于监控数据的获取,以及通过pnp4nagios展示数据报表。


一、数据的获取方式


nagios性能数据

nagios将插件输出中"|"号后的内容作为性能数据。性能数据格式如下:


  1. 'label'=value[uom];[warn];[crit];[min];[max]

注意:

1. 多个性能数据之间用空格分割

2. label 可以包含任何字符

3. 如果label中包含空格、等号、或者单引号,则label需要用单引号来括起来

4. warn/crit/min/max可以为null

value, min and max只能为负号“-” “09” 和小数点“.” 并且单位必须统一 

例如:cpu_user=0.5%;99.9;-9;

5. 如果uom单位是%,则minmax不需要再指定

6. uom单位可以是如下: 默认空,表示数量(用于用户数、处理器数等)

       s    表示秒(也可以用usms

       %   表示百分比

       b    表示字节(也可以用kb,mb,tb,gb

       c    一个连续的计数(如:接口传输的字节数)

如内存监控的数据:


  1. # /usr/local/nagios/libexec//check_mem 90 95

  2. mem ok - memory usage = 18.700%, realused=3003mb|used=18.700%;realmemused=3003mb

说明:内存使用18.700%,实际使用内存为3003mb

我们查看脚本:


  1. #!/bin/bash

  2. # determine memory usage percentage on linux servers.

  3. # original write for rhel3 for pc1 project - jlightner 05-jul-2005

  4. #

  5. # modified for rhel5 on mailservers.

  6. # -some of the escapes previously required for rhel3's ksh not needed on rhel5.

  7. # -changed comparisons to allow for decimal rather than integer values.

  8. # jlightner 23-jan-2009

  9. #

  10. # usage: check_mem.sh warning critical

  11. # where warning and critical are the integer only portions of the

  12. # percentage for the level desired.

  13. # (i.e. 85% warning & 95% critical should be input only as "85 95".)

  14. # define levels based on input

  15. #

  16. warn=$1

  17. crit=$2

  18. # setup standard nagios/nrpe return codes

  19. #

  20. # give full paths to commands - nagios can't determine location otherwise

  21. #

  22. bc=/usr/bin/bc

  23. grep=/bin/grep

  24. awk=/bin/awk

  25. free=/usr/bin/free

  26. tail=/usr/bin/tail

  27. head=/usr/bin/head

  28. # get memory information from the "free" command - output of top two lines

  29. # looks like:

  30. # total used free shared buffers cached

  31. # mem: 8248768 6944444 1304324 0 246164 5647524

  32. # the set command will get everything from the second line and put it into

  33. # posiional variables $1 through $7.

  34. #

  35. set `$free |$head -2 |$tail -1`

  36. # now give variable names to the positional variables we set above

  37. #

  38. memtotal=$2

  39. memused=$3

  40. memfree=$4

  41. membuffers=$6

  42. memcached=$7

  43. # do calculations based on what we got from free using the variables defined

  44. #

  45. realmemused=`echo $memused - $membuffers - $memcached | $bc`

  46. usepct=`echo "scale=3; $realmemused / $memtotal * 100" |$bc -l`

  47. realmemusedmb=`echo "($realmemused)/1024" | $bc`

  48. # compare the used percentage to the warning and critical levels input at

  49. # command line. issue message and set return code as appropriate for each

  50. # level. nagios web page will use these to determine alarm level and message.

  51. #

  52. #if [ `echo "5.0 > 5" |bc` -eq 1 ]

  53. #then echo it is greater

  54. #else echo it is not greater

  55. #fi

  56. if [ `echo "$usepct > $crit" |bc` == 1 ]

  57. then echo "mem critical - memory usage = ${usepct}%, realused=${realmemusedmb}mb |used=${usepct}%;realmemused=${realmemusedmb}mb"

  58. exit 2

  59. elif [ `echo "$usepct > $warn" |bc` == 1 ]

  60. then echo "mem warning - memory usage = ${usepct}%, realused=${realmemusedmb}mb |used=${usepct}%;realmemused=${realmemusedmb}mb"

  61. exit 1

  62. elif [ `echo "$usepct < $warn" |bc` == 1 ]

  63. then echo "mem ok - memory usage = ${usepct}%, realused=${realmemusedmb}mb|used=${usepct}%;realmemused=${realmemusedmb}mb"

  64. exit 0

  65. else echo "mem error - unable to determine memory usage"

  66. exit 3

  67. fi

  68. echo "unable to determine memory usage."

  69. exit 3

红色代码部分即为性能数据,其中:

labelusedrealmemused,再次强调,如果label有特殊字符,需加"",参数间最好不要空格。

used作为pnp4nagios的变量,如var1var2,在pnp中也可以写成一样的值。

usepct为第一个参数值,即18.700

uom单位是%,同样realmemuseduom单位是mb

到处,监控的数据已经获取。

补充:格式为warn/crit/min/max值。

如:used=${usepct}%;${warn};${crit};0;100

warncrit为触发值,$1 $2,,也可以在图表展示出来。

min/max 表示最低值、最高值。

二、pnp4nagios生成数据图表。

找到pnp的模版目录,我的目录为:

/usr/local/pnp4nagios/share/templates  模版开发目录

/usr/local/pnp4nagios/share/templates.dist 系统自带模版

监控脚本的名称和php模版名称对应。

因为为php语言,所以要遵循php格式

语法详解:


  1. $opt[1] = "--vertical-label % -l0 -u 100 --title \"memory for $hostname / $servicedesc\" ";

说明:设置图表标题,高度等。详细参数有:
-s  绘图资料的起始时间,预设4小时

-e  绘图资料结束时间,预设现在

-t  --title图表标题
-v  --vertical-label  
-w  资料区的宽度,资料区指的是数据显示示的部份,即底部说明
-h   资料区的高度
-u   軸正值高度
-l   軸負值高度
-m  自动跳转y最大值


  1. def("vname", rrd_filename, $ds_name, "[average|max..]");

def 其语法为 

vnam 为nagios监控脚本 "|" 后输出的第一个变量,如var1 var2,也可以指定名称。

ds(data source),亦即在表中宣告一个资料来源,必須先宣告,以下的这里资料average|max|min 为取数据平均值和最大值等。

def以下代码为绘图显示过程。

1显示第一种写法,用()语法


  1. line{1|2|3}("vname",#rrggbb,name);

  2. gprint("vname", array("last", "average", "max"), "format");


line线条方式:

这条函式就是您想把资料线条的方式表示,其中依照的粗又可分line1line2line3sizevnamedef中的vname#rrggbb这里填你想要线条显示的顏色,使用rgb代码name填写底部显示名称

area方块方式:
area("vname",#rrggbb,name);

这种方式就是您想把资料用填充狀的方式表示,其他面的参数请參照line的用法,做出来的实例如下︰


stack行数显示

stack("vname",#rrggbb,name);

则是读出数据值至其上的也就是要有资料数值在 stack 值之上如有多个变量,数值高的显示在上面,用法同上兩


gprint vname def中的vnamearray看你要输出的文字是average/max/min/lastformat 如同 printf 中的格式,
做出來如下示例

2、显示第二种写法,用 : 语法 


  1. line{1|2|3}:vname:#rrggbb:\"name\" ";

  2. gprint:vname:last:\"format\" ";

  3. gprint:vname:average:\"format\" ";

  4. gprint:vname:last:\"format\"format\ ";

语法中参数还是一样。

另外关于报警线条的显示,可以写为:

1


  1. if ($warn[1] != "") {

  2. $def[1] .= "hrule:$warn[1]#ffff00 ";

  3. }

  4. if ($crit[1] != "") {

  5. $def[1] .= "hrule:$crit[1]#ff0000 ";

  6. }

  7. 2、

  8. $def[1] .= "hrule:$warn[1]#ffff00 ";

  9. $def[1] .= "hrule:$crit[1]#ff0000 ";

做出来的示例:

三、示例

1、以check_mem.php模版说明

代码:


  1. <?php

  2. # 凯发app官方网站 copyright (c) 2006-2010 joerg linge ()

  3. # plugin: check_mem

  4. $opt[1] = "--vertical-label % -l0 -u 100 --title \"memory for $hostname / $servicedesc\" ";

  5. $def[1] = rrd::def("var1", $rrdfile[1], $ds[1], "average");

  6. if ($warn[1] != "") {

  7.     $def[1] .= "hrule:$warn[1]#ffff00 ";

  8. }

  9. if ($crit[1] != "") {

  10.     $def[1] .= "hrule:$crit[1]#ff0000 ";

  11. }

  12. $def[1] .= rrd::line1("var1", "#00ff00", "memory") ;

  13. $def[1] .= rrd::gprint("var1", array("last", "average", "max"), "%6.2lf");

  14. ?>

效果图:

2、check_traffic.php网卡流量监控模版

代码:


  1. <?php

  2. $opt[1] = "--vertical-label bits/s --title \"traffic for $hostname / $servicedesc\" ";

  3. $colors = array(

  4.        'red'=> '#ff0000',

  5.        'green' => '#00ff00',

  6.        'blue' => '#0000ff',

  7.        'yellow' => '#ffff00',

  8.        'black' => '#000000',

  9.        'deepred' => '#330000',

  10.         );

  11. $def[1] = "def:var1=$rrdfile:$ds[1]:average " ;

  12. $def[1] .= "def:var2=$rrdfile:$ds[2]:average " ;

  13. $def[1] .= "hrule:$warn[1]#ffff00 ";

  14. $def[1] .= "hrule:$crit[1]#ff0000 ";

  15. $def[1] .= "area:var1$colors[green]:\"in \" " ;

  16. $def[1] .= "gprint:var1:last:\"%6.1lf last\" " ;

  17. $def[1] .= "gprint:var1:average:\"%6.1lf avg\" " ;

  18. $def[1] .= "gprint:var1:max:\"%6.1lf max\\n\" ";

  19. $def[1] .= "line:var2$colors[blue]:\"out \" " ;

  20. $def[1] .= "gprint:var2:last:\"%6.1lf last\" " ;

  21. $def[1] .= "gprint:var2:average:\"%6.1lf avg\" " ;

  22. $def[1] .= "gprint:var2:max:\"%6.1lf total\\n\" " ;

  23. ?>

效果图:



以上仅个人理解,如有错误的地方,希望大家指正,谢谢。

阅读(25354) | 评论(0) | 转发(3) |
给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图