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

关于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地址的插件

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

[[email protected] libexec]# cat check_url
#!/bin/bash
#get the shell script name
PROGNAME=`basename $0`
#get the file path
PROGPATH=`dirname $0`
usage() {
      echo "Usage: /bin/sh  $PROGNAME url"
      exit 1
  }
[ $# -ne 1 ] &&usage
. $PROGPATH/utils.sh
t=`ping -c1 $1|awk ‘NR==2 {print $7,$8}‘`
o=`ping -c1 $1|awk ‘NR==5{print $12}‘`
ping -c1 $1>/dev/null 2>&1
if [ $? -eq 0 ]
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
[[email protected] 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    一个连续的计数(如:接口传输的字节数)

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

[[email protected] ~]# cd /usr/local/nagios

[[email protected] 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

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

原文地址:https://www.cnblogs.com/xh-blog/p/9696088.html

时间: 2024-10-09 22:24:15

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

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

在自已编写监控插件之前我们首先需要对nagios监控原理有一定的了解 Nagios的功能是监控服务和主机,但是他自身并不包括这部分功能,所有的监控.检测功能都是通过各种插件来完成的. 启动Nagios后,它会周期性的自动调用插件去检测服务器状态,同时Nagios会维持一个队列. 所有插件返回来的状态信息都进入队列,Nagios每次都从队首开始读取信息,并进行处理后,把状态结果通过web显示出来. Nagios提供了许多插件,利用这些插件可以方便的监控很多服务状态.安装完成后,在nagios主目录

Linux下的shell脚本编程-变量-算术表达式-判断语句-if分支语句

Linux下的shell脚本编程-变量-算术表达式-判断语句-if分支语句 一:实验环境 1):虚拟机 2):linux系统 二:实验目标 1): shell 基本语法 2):变量 3):表达式 4):判断语句 5): if表达式 三:实验脚本 第一块 一个简单的shell脚本程序 [[email protected] ~]# mkdir test [[email protected] test]# vim example1.sh #!/bin/bash #This is to show wha

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

Linux下添加shell脚本使得nginx日志每天定时切割压缩一 简介 对于nginx的日志文件,特别是access日志,如果我们不做任何处理的话,最后这个文件将会变得非常庞大 这时,无论是出现异常时查日志,还是使用"GoAccess"等工具对日志进行分析都将会变得非常麻烦.因此,每天定时对nginx日志进行切割压缩就非常有必要了 二 实现 我的实现思路是每天晚上接近12点时定时执行脚本.其脚本内容就是将当前的nginx日志先按照当天日期进行重命名接着进行压缩,最后是新建空白的ngi

eclipse下搭建shell脚本编辑器--安装开发shell的eclipse插件shelled

eclipse下搭建shell脚本编辑器--安装开发shell的eclipse插件shelled 1.安装"man-page viewer"插件(ShellEd需要,有的机器不需要,先装上) 安装地址:http://download.eclipse.org/technology/linuxtools/updates-nightly/ 2.安装"shelled"插件 在http://sourceforge.net/projects/shelled/files/late

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

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

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

OS10.11系统下 安装cocoapods 以及 安装cocoapods-xcode-plugin-master插件来加载三方框架A.安装cocoapods:1.sudo gem update --system 更新gem(1.1 sudo gem uninstall cocoapods 该情况看是否需要卸载cocoapods 一般不必使用该命令) 2.gem source -l http://rubygems.org/ 查看安装ruby环境的路径 3.gem source -a http:/

Mac下通过shell脚本修改properties文件

通过shell脚本替换属性文件中的某行记录 假设有如下属性文件 demo.properties user.name=test user.password=123456 ............................... 需求:先需要通过shell 脚本将 user.name 和 user.password 的value值替换为实际需要的用户名和密码, 将可以通过如下方式实现: sed -i "s#^user.name=.*#user.name=用户名#g"  path/de

linux下使用shell脚本自动化部署项目

在Java开发项目时经常要把正在开发的项目发布到测试服务器中去测试,一般的话是要把项目先打成war包,然后把war包发布到服务器中,关闭服务器, 最后重新启动服务器,虽然这过程不是很繁琐,但如果是多个工程都要发布的时候,发布的过程就会比较繁琐,所以福音来了-- 通过 编写shell 脚本来完成这些操作,只要执行一个shell脚本,项目就可以自动发布到服务器了,用起来还是比较方便的. 第一步:在linux中安装svn.(这个可以参照另外一篇博客:http://simplelife.blog.51c

windows下建立文件的换行符^M导致linux下的shell脚本运行错误的解决方案

经常在windows下编辑的文件远程传送到linux下的时候每行末尾都会出现^M,这将导致shell脚本运行错误,主要是因为dos下的编辑器和linux下的编辑器对文件末行的回车符处理不一致导致. 主要解决如下: (1)在VI编辑器中将^M删除: 将VI编辑器切换到命令模式下,输入 :%s/^M//g (注意^M 不是shift ^ +M 而是ctrl+v 加上ctrl+m)  s///g是shell的替换命令 此命令必须是手动打上,不可复制. (2)dos2unix 命令 dos2unix f