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

第一步:编写脚本

vim  /usr/lib/nagios/plugins/check_disk.sh 写入如下内容: //这是一个disk脚本样例,你也可以写自己的监控脚本
#!/bin/bash
row=`df -h |wc -l`
for i in `seq 2 $row`
do
        ava=`df -h |sed -n "$i"p|awk ‘{print $4}‘`
        u_per=`df -h |sed -n "$i"p|sed -n "s/\%//"p|awk ‘{print $5}‘`
        p_p=`df -h |sed -n "$i"p|awk ‘{print $6}‘`
        if [ "$u_per" -gt "95"  ];then           //百分比可以自定义
                echo -n "$p_p CRITICAL $u_per% $ava  "
                sta[$i]=2
        elif [ "$u_per" -gt "90" ];then
                echo -n "$p_p WARNING! $u_per% $ava  "
                sta[$i]=1
        else
                echo -n "$p_p OK $u_per% $ava  "
                sta[$i]=0
        fi
done
n=0
for j in `seq 2 $row`
do
        if [ "${sta[$j]}" -gt $n  ];then
                n=${sta[$j]}
        fi
done
exit $n   //该循环是为了找出所有磁盘分区的sta[]最大值

2. 保存后,修改该脚本的权限
chmod +x  /usr/lib/nagios/plugins//check_disk.sh (client上)
3. 然后编辑/etc/nagios/nrpe.cfg文件
vim /etc/nagios/nrpe.cfg  # 加入一行:(client上)
command[check_disk]=/usr/lib/nagios/plugins/check_disk.sh
保存,重启nrpe服务
/etc/init.d/nrpe restart (client上)、

第二步:添加服务

cd /etc/nagios/conf.d/
vim IP.cfg     # 文件名可以自定义,我这里用客户端IP做文件名,也可以用主机名,目的是为了方便区分
define service{
        use     generic-service
        host_name       IP
        service_description     check_disk
        check_command           check_nrpe!check_disk
        max_check_attempts 5
        normal_check_interval 1
}
6. 重启nagios服务
/etc/init.d/nagios restart   (server上)

第三步:修改nagios.conf

添加配置文件

nagios-调用脚本的更多相关文章

  1. [工具开发] keepalived使用nagios监控脚本

    最近在做开发和办公环境的高可用,采用的是keepalived:keepalived基于Linux内核支持的LVS,既能实现高可用,又能实现负载均衡,非常实用. keepalived监控服务状态时可以用 ...

  2. 脚本调用脚本时.与bash的差别

    在做项目时,发现脚本调用脚本时,会意外退出任务. 下面的脚本是父脚本: #!/bin/bash . ./data/child.sh echo 123sds echo "45gfdg" ...

  3. centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobackupex/Xtrabackup 第四十节课

    centos   shell编程6一些工作中实践脚本   nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志  直接送给bc做计算  gzip  innobacku ...

  4. C#调用脚本语言(三)-- IronJS 与 IronLua 简单方法性能比较

    1.   测试环境 1.1. 硬件环境 CPU:intel Core i7-740QM 内存:8GDDR3 Memory 1.2. 系统 系统:Windows 8 Enterprise 开发工具:Vs ...

  5. 【Android】使用persist属性来调用脚本文件

    Android系统中有许多属性,属性由两个部分组成:name & value,可以使用这些属性来记录系统设置或进程之间的信息交换.Android系统在启动过程时会按序从以下几个文件中加载系统属 ...

  6. Shell学问: 调用脚本之间

    于Java,Python于,您可以使用import该方法使脚本或模块之间的呼叫,例如: >>> import math >>> math.sqrt(4) 2.0 在 ...

  7. Linux - 简明Shell编程11 - 调用脚本(CallTheScript)

    脚本地址 https://github.com/anliven/L-Shell/tree/master/Shell-Basics 示例脚本及注释 主脚本: CallTheScript.sh #!/bi ...

  8. Mysql数据库触发器调用脚本

    一.数据库触发器 mysql触发器trigger 实例详解 对数据库触发器new和old的理解 示例 二.UDF mySql的UDF是什么 三.安装执行命令UDF mysql触发器调用外部脚本(安装) ...

  9. Shell - 简明Shell入门11 - 调用脚本(CallTheScript)

    示例脚本及注释 主脚本: CallTheScript.sh #!/bin/bash . ./11-subscript.sh # 调用其他脚本;注意点号"."和文件路径之间有一空格; ...

  10. nodejs调用脚本(python/shell)和系统命令

    每种语言都有自己的优势,互相结合起来各取所长程序执行起来效率更高或者说哪种实现方式较简单就用哪个,nodejs是利用子进程来调用系统命令或者文件,文档见http://nodejs.org/api/ch ...

随机推荐

  1. 完整搭建一个vue项目

    目录 一. 搭建一个vue项目的完整步骤 二. 卸载vue-cli 三. 完全卸载webpack 一. 搭建一个vue项目的完整步骤 1.安装node.js 下载地址 # 检查是否安装成功 node ...

  2. springboot-springmvc

    0依赖 <!-- jsp --> <dependency> <groupId>org.apache.tomcat.embed</groupId> < ...

  3. deepin终端下载速度超慢解决方案

    最近发现在deepin终端下载软件包时速度简直是慢到不可饶恕,最快速度不上20KB/s,哭了,这要下载个几百KB的还能忍,稍微下载个百内MB的包就得等1-2小时,这咋行! 在网上查了几篇博客后,终于找 ...

  4. MariaDB知识点总结02--日志+备份

    一.日志 1.查询日志 记录每一条sql语句,建议不开启,因为如果访问量较大,会占用相当大的资源,影响性能; vim /etc/my.cnf.d/server.cnf general_log = ON ...

  5. (转)window.XMLHttpRequest详解(AJAX工作原理)

    转自:http://l.xbest.blog.163.com/blog/static/8640444120100225516963/?fromdm&fromSearch&isFromS ...

  6. 【机器学习】ICA特征提取

    看完了ICA的一整套原理介绍后,感觉完整的介绍和andrew ng的课程中的ICA特征提取关系不是很大:在ICA的理论中,主要用于盲源分离的,也就是混合的观测数据X,通过一个正交的且其范数为1的分离矩 ...

  7. C语言I—2019秋作业第一周作业

    1.你对软件工程专业或者计算机科学与技术专业了解是怎样? 软件工程专业是一门研究用工程化方法构建和维护有效的.实用的和高质量的软件的学科.它涉及到程序设计语言,数据库,软件开发工具,系统平台,标准,设 ...

  8. 实例一 airflow_failover

    源码: https://github.com/teamclairvoyant/airflow-scheduler-failover-controller #怎么判断scheduler是running的 ...

  9. VUe兄弟通信

    用过Vue,你肯定知道,Vue组件之间的通信常见的有$dispatch - 通过冒泡的方式传递事件$broadcast - 通过广播的方式向子孙组件传递事件 如果组件之间的关系只是父-子关系,那么di ...

  10. 【转帖】.NET的一点历史故事:作者的一些感想

    .NET的一点历史故事:作者的一些感想 https://mp.weixin.qq.com/s?__biz=MzAwNTMxMzg1MA==&mid=2654068684&idx=2&a ...