在自已编写监控插件之前我们首先需要对nagios监控原理有一定的了解

Nagios的功能是监控服务和主机,但是他自身并不包括这部分功能,所有的监控、检测功能都是通过各种插件来完成的。

启动Nagios后,它会周期性的自动调用插件去检测服务器状态,同时Nagios会维持一个队列。

所有插件返回来的状态信息都进入队列,Nagios每次都从队首开始读取信息,并进行处理后,把状态结果通过web显示出来。

Nagios提供了许多插件,利用这些插件可以方便的监控很多服务状态。安装完成后,在nagios主目录下的/libexec里放有nagios自带的可以使用的所有插件

如,check_disk是检查磁盘空间的插件,check_load是检查CPU负载的,等等。基本上每一个插件可以通过运行./check_xxx –h 来查看其使用方法和功能。

Nagios可以识别4种状态返回信息: 

0(OK)表示状态正常/绿色、

1(WARNING)表示出现警告/黄色

2(CRITICAL)表示出现非常严重的错误/红色

3(UNKNOWN)表示未知错误/深黄色。

Nagios根据插件返回来的值,来判断监控对象的状态,并通过web显示出来,以供管理员及时发现故障。四种监控状态如下图所示:

当我们知道了nagios是通过命令返回值来判断状态,在shell中也即是通过命令的退出状态码来判断,这样我们可以自已编写一个监控脚本

如编写监控postgresql数据库的ESTABLISHED连接数,可以如下的命令及语法进行编写。

#!/bin/bash
#
if [ "$1" = "-w" ] && [ "$2" -gt "" ] && [ "$3" = "-c" ] && [ "$4" -gt "" ]; then pgsql=`netstat -lnaput| grep ":5432" | grep ESTABLISHED | wc -l` if [ "$pgsql" -ge "$4" ]; then
echo "Pgsql_concurrent: CRITICAL Total: $pgsql - concurrent_count |USED=$pgsql;200;500;;"
$(exit )
elif [ "$pgsql" -ge "$2" ]; then
echo "Pgsql_concurrent: WARNING Total: $pgsql - concurrent_count|USED=$pgsql;200;500;;"
$(exit )
else
echo "Pgsql_concurrent: OK Total: $pgsql - concurrent_count|USED=$pgsql;200;500;;"
$(exit )
fi else
echo "check_PgsqlCount"
echo ""
echo "Usage:"
echo "check_PgsqlCount -w <warn count> -c <crit count>"
echo ""
echo "Copyright (C) 2014 http://www.cnblogs.com/5201351"
exit
fi

以上监控脚本为笔者工作所编写,在此作为一种编写nagios监控插件的思路,其中在if语句中的3条echo语句中、我们可以发现输出的内容是由|分隔

其中只写入"|"之前的内容也行,"|"之后的的内容为可选见容,nagios会将"|"之后的内容作为性能数据输出。如可输出给pnp4nagios,性能数据格式如下:

'label'=value[UOM];[warn];[crit];[min];[max]

需要注意的是:

1、性能数据的多个选项值之间用分号;分割

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

3、warn/crit/min/max可以为null值,如果有值单位必须统一

4、如果UOM单位是%,则min和max不需要再指定

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

s    表示秒(也可以用us,ms)
% 表示百分比
B 表示字节(也可以用KB,MB,TB,GB)
c 一个连续的计数(如:接口传输的字节数)

关于nagios系统下使用shell脚本自定义监控插件的编写的更多相关文章

  1. 关于nagios系统下使用shell脚本自定义监控插件的编写以及没有实时监控图的问题

    关于nagios系统下shell自定义监控插件的编写.脚本规范以及没有实时监控图的问题的解决办法 在自已编写监控插件之前我们首先需要对nagios监控原理有一定的了解 Nagios的功能是监控服务和主 ...

  2. linux系统下的shell脚本

    #!/bin/bash  说明我需要启用bin目录下的bash解释器解释脚本##将第一个文件拷贝到第二个文件,如果出错将错误输出到/dev/null 的空.if判断cp的返回值是否为1,1为成功,0为 ...

  3. mac终端下运行shell脚本

    最近公司要弄关于IOS下自动化打包的东西,研究了用命令行的形式来代替手工的方式来处理.即: 用xcodebuild 和xcrun  语法来进行脚本实现.    但由于语法的结构够了,另一个问题产生了, ...

  4. CentOS下编写shell脚本来监控MySQL主从复制的教程

    这篇文章主要介绍了在CentOS系统下编写shell脚本来监控主从复制的教程,文中举了两个发现故障后再次执行复制命令的例子,需要的朋友可以参考下 目的:定时监控MySQL主从数据库是否同步,如果不同步 ...

  5. Linux下添加shell脚本使得nginx日志每天定时切割压缩

    Linux下添加shell脚本使得nginx日志每天定时切割压缩一 简介 对于nginx的日志文件,特别是access日志,如果我们不做任何处理的话,最后这个文件将会变得非常庞大 这时,无论是出现异常 ...

  6. linux下实现shell脚本自动连接mongodb数据库并创建索引

    在linux下创建shell脚本

  7. 【linux】系统初始化的shell脚本

    根据参考网上的一些文章,总结出来一个系统初始化的shell脚本 1.初始化脚本 #!/bin/bash cat << EOF +------------------------------ ...

  8. 2019.11.13课堂实验之用Linux下的shell脚本完成两文本交替输出

    有两个文本如下,实际中并不知道两文本各有多少行: 文本1.txt aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ccccccccccccccccccccccccccc ...

  9. Jmeter(五十四) - 从入门到精通高级篇 - 如何在linux系统下运行jmeter脚本 - 上篇(详解教程)

    1.简介 上一篇宏哥已经介绍了如何在Linux系统中安装Jmeter,想必各位小伙伴都已经在Linux服务器或者虚拟机上已经实践并且都已经成功安装好了,那么今天宏哥就来介绍一下如何在Linux系统下运 ...

随机推荐

  1. php的MCRYPT_RIJNDAEL_256 和mcrypt_encrypt 用法

    <?php $key = "miyao";//密钥 $string="jiami";//需要加密的字符 $d = new d(); //加密 $crypt ...

  2. glibc中fork系统调用传参

    因为想跟踪下在新建进程时,如何处理新建进程的vruntime,所以跟踪了下fork. 以glic-2.17中ARM为例(unicore架构的没找到),实际上通过寄存器向系统调用传递的参数为: r7: ...

  3. 如何在Datatable中取得每列的数据列宽度

    你用SqlDataAdapter填充DataTable的时候不要用Fill方法而应该用FillSchema方法: using (SqlConnection conn = new SqlConnecti ...

  4. …gen already exists but is not a source folder. Convert to a source folder or rename it [closed]

    Right click on the project and go to "Properties" Select "Java Build Path" on th ...

  5. IE8 AJAX 不能正常工作 解决办法

    function crossDomainAjax(url, successCallback) { // IE8 & 9 only Cross domain JSON GET request i ...

  6. ajax+json+Struts2实现list传递(转载)

    一.首先需要下载JSON依赖的jar包.它主要是依赖如下: json-lib-2.2.2-jdk15 ezmorph-1.0.4       commons-logging-1.0.4       c ...

  7. ios学习之UIWebView网页视图

    转载于爱德凡的百度空间,地址:http://hi.baidu.com/aidfan/item/34a720866b33cbcdef083d37 UIWebView 使用详解 一.UIWebView加载 ...

  8. CMake设置输出目录

    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Lib)set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAK ...

  9. U3D优化

    容易忽略的美术资源的优化: 优化的美术制作真是一种感觉和经验的积累,能看出制作水平的不是做的效果多么犀利,而是得看制作的效果与对机器的要求等的性价比. 关于合并:  100个三角形的MESH,在渲染时 ...

  10. 偶值得纪念的一天-初学习C#

    今天好悲催啊,竟然生病啦,不过一切还好! 今天我们在云和数据学习的第二天,上午没有听课,似乎学习了变量的定义以及命名方法,还有变量类型的显隐式转换:我感觉这些还是在之前看书知道啦把,因此看啦看老师做的 ...