关于nagios系统下shell自定义监控插件的编写、脚本规范以及没有实时监控图的问题的解决办法

在自已编写监控插件之前我们首先需要对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中也即是通过命令的退出状态码来判断,这样我们可以自已编写一个监控脚本

1.编写检查weburl地址的插件

可以如下的命令及语法进行编写。

[root@hd1 libexec]# cat check_url
#!/bin/bash
#get the shell script name
PROGNAME=`basename $`
#get the file path
PROGPATH=`dirname $`
usage() {
echo "Usage: /bin/sh $PROGNAME url"
exit
}
[ $# -ne ] &&usage
. $PROGPATH/utils.sh
t=`ping -c1 $|awk 'NR==2 {print $7,$8}'`
o=`ping -c1 $|awk 'NR==5{print $12}'`
ping -c1 $>/dev/null >&
if [ $? -eq ]
then
echo "Url $1 OK|$t;0.000000 size=295B;;;0"
exit $STATE_OK
else
echo "Url $1 NO|Socket timeout after $o"
exit $STATE_CRITICAL
fi
[root@hd1 libexec]#

接下来,脚本授权可执行 以及主动监控脚本写进command.cfg ,服务写进services.cfg

企业级监控nagios实践文档已经说过。  自行操作。

编写监控脚本是请参考utils.sh 规范

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

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

得到性能数据之后会在服务器端/usr/local/nagios/share/perfdata下生成文件。

如可输出给pnp4nagios,性能数据格式如下:

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

需要注意的是:

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

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

3、warn/crit/min/max可以为null值

value, min and max只能为负号"-" "0到9"和小数点"." 并且单位必须统一

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

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

s    表示秒(也可以用us,ms)

%    表示百分比

B    表示字节(也可以用KB,MB,TB,GB)

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

实际情况中性能数据选项值,可以参考已有监控插件的返回值。

[root@hd1 ~]# cd /usr/local/nagios

[root@hd1 nagios]# chown nagios.nagcmd share

用户和组必须改为:nagios nagcmd

文件的权限问题,web用户apache无法在/usr/local/nagios/share中写入。在前面已经把用户apache加入组nagcmd中了,所以直接改变文件夹的所有者和所属的组就可以了。

下一步

重新加载nagios

/etc/init.d/nagios reload

可以看到自己写的监控脚本 有实时监控图了。 OK

2.编写一个被动插件,监控客户端的/dev/sda3分区的如果磁盘占用率超过7%报警exit 2,如果不大于7%不报警,exit 0

[root@hd2 libexec]# cat check_sda3
#! /bin/bash
#get the shell script name
PROGNAME=`basename $`
#get the file path
PROGPATH=`dirname $`
usage() {
echo "Usage: /bin/sh $PROGNAME url"
exit
}
[ $# -ne ] &&usage
. $PROGPATH/utils.sh
n=`df -i|awk 'NR==2{print $5}'|sed 's/'%'//g'`
if [ $n -le ]
then
echo "disk usage rate is ok!|sda3=$n;7;50;0;100"
exit $STATE_OK
elif [ $n -gt -a $n -le ]
then
echo "disk usage rate is warning!!|sda3=$n;7;50;0;100"
exit $STATE_WARNING
elif [ $n -gt ]
then
echo "disk usage rate is critical!!!|sda3=$n;7;50;0;100"
exit $STATE_CRITICAL
fi
[root@hd2 libexec]#

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

  1. 关于nagios系统下使用shell脚本自定义监控插件的编写

    在自已编写监控插件之前我们首先需要对nagios监控原理有一定的了解 Nagios的功能是监控服务和主机,但是他自身并不包括这部分功能,所有的监控.检测功能都是通过各种插件来完成的. 启动Nagios ...

  2. linux系统下的shell脚本

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

  3. mac终端下运行shell脚本

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

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

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

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

    在linux下创建shell脚本

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

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

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

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

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

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

  9. OS10.11系统下 安装cocoapods 以及 安装cocoapods-xcode-plugin-master插件来加载三方框架

    http://www.cnblogs.com/cheng923181/p/4883476.html OS10.11系统下 安装cocoapods 以及 安装cocoapods-xcode-plugin ...

随机推荐

  1. 关于 <meta name="viewport" content="width=device-width, initial-scale=1.0">的解释

    对于移动开发来讲,我还不太熟悉.今天在github上荡了一个系统源码,进行分析.发现其中有这样一段话: <meta name="viewport" content=" ...

  2. LuoguP3964 [TJOI2013]松鼠聚会【切比雪夫距离/前缀和】

    题目传送门 前置知识:切比雪夫距离和曼哈顿距离的相互转化--自为风月马前卒 有了这个知识,我们便可以在读入松鼠的家的坐标时,先把他转化一下,然后把最后的总式化简,我们会得到一个充满后缀和以及前缀和的式 ...

  3. OpenCV认识之发展历史

    OpenCV认识之发展历史刚接触OpenCV,据说是专门用于机器视觉,机器人图形图像处理等,但对OpenCV的历史还不是特别了解,今天上网查好多资料,记录在此,OpenCV的全称是:Open Sour ...

  4. [BZOJ4064/Cerc2012]The Dragon and the knights

    Description 与当地鞋匠协会发生冲突的瓦维尔城堡的龙决定将它的狩猎场移出克拉科夫以减少敌对的邻居数量.现在他正在给和平而宁静的Bytes王国带来灾难与恐怖. 在Bytes王国有n条河流,每一 ...

  5. UvaLive3942(Trie + dp)

    查了半天数组越界的RE,才发现自己把ch数组放结构体里是过大的……放全局就A了. 类似区间的dp比较显然,只是用trie树做了优化,使得可以在trie树里一边走一边往上加dp值,不必枚举以前的每个位置 ...

  6. ADB over Wi-Fi

    ADB over Wi-Fi 1.root $adb root 2.设置tcp端口并重启tcpip服务 $adb shell setprop persist.adb.tcp.port &&am ...

  7. 7.1 Java集合概述

    List 有序.重复的集合 Set 无序.不可重复的集合 Map 具有映射关系的集合 jdk1.5之后.Java增加了Queue体系集合,代表一种队列集合实现

  8. Mysql多表联合更新、删除

    UPDATE snyts_user u INNER JOIN snyts_order o ON u.user_id = o.user_id INNER JOIN snyts_refund_order ...

  9. 设计模式(3)-- 原型模式 (clone分析)

    原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建对象. 在java中有语言级别的支持:clone 在java中使用原型模式是非常简单的事情,实现Cloneable接口,调用Objec ...

  10. logging模块基础

    很多程序都有记录日志的需求,日志不仅可以保存访问记录,也可以有错误,警告等信息输出. python的logging模块提供了标准的日志接口,可以通过logging存储各种格式的日志.logging模块 ...