问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何扩展Nagios,以实现自定义监控

发布网友 发布时间:2022-04-26 18:17

我来回答

1个回答

热心网友 时间:2022-04-12 00:27

  功能强大的Nagios网络监控平台让你可以为其功能增添一系列可用插件。
  如果你找不到可以满足自身要求的一款插件,也很容易自行编写,本文就介绍了如何自行编写插件。
  Nagios插件可以用任何一门编程语言来编写,只要该编程语言在运行Nagios的平台上得到支持。Bash是用来编写Nagios插件的一门流行语言,因为它功能强大、使用简单。
  借助插件进行的每一次有效的Nagios检查(Nagios check)都会生成一个数字表示的退出状态。可能的状态有:
  0--各方面都正常,检查成功完成。
  1--资源处于警告状态。某个地方不太妙。
  2--资源处于临界状态。原因可能是主机宕机或服务未运行。
  3--未知状态,这未必表明就有问题,而是表明检查没有给出一个清楚明确的状态。
  插件还能输出文本消息。默认情况下,该消息显示在Nagios web界面和Nagios邮件警报信息中。尽管消息并不是硬性要求,你通常还是可以在可用插件中找到它们,因为消息告诉用户出了什么岔子,而不会迫使用户查阅说明文档。
  用Bash编写的一个简单的Nagios插件类似这样。这个示例插件检查一个指定的文件:
  #!/bin/bash

  #将第一个实参($1)指定为文件名
  filename=$1

  #先检查该文件是否存在。这是你应该开始的第一个检查,也是最基本的检查。
  if [ ! -e $filename ]; thenecho "CRITICAL status - file $filename doesn't exist"

  exit 2 #返回临界状态,那是由于你的最糟糕情况是该文件根本就不存在。
  #如果前一个条件通过(文件存在),那么接下来检查该文件是否可读:
  elif [ ! -r $filename ]; thenecho "WARNING status - file $filename is not readable."

  exit 1 #返回警告状态,那是由于该状态胜于根本不存在文件;
  #如果前一个条件通过,检查它是不是一个普通文件,而不是目录或设备文件。
  elif [ ! -f $filename ]; thenecho "UNKNOWN status - file $filename is not a file."

  exit 3 #返回未知状态;
  #如果所有上述检查均通过,那么表明它正常:
  elseecho "OK status - file is OK"exit 0 #Return OK statusfi

  注释(Bash中以#开始)解释了代码;如果你需要更清晰的解释,或者想进一步了解Bash的文件测试操作符,请查阅说明文档(http://tldp.org/LDP/abs/html/fto.html)。
  尽管这个实例很简单,但它清楚地表明了如何实现Nagios插件逻辑。始终首先要寻找最糟糕的情况。只有当所有检查均通过,脚本退出时才会显示状态正常。确保在退出之前指定明确消息。
  使用插件
  默认情况下,所有的Nagios插件均存放在用$USER1宏命令定义的目录中,具体在文件/etc/nagios/private/resource.cfg中定义。在来自EPEL存储库(http://fedoraproject.org/wiki/EPEL)的典型Nagios安装环境下,$USER1被定义为/usr/lib/nagios/plugins。你对插件应该做的头一件事就是,把它拷贝到用$USER1宏命令定义的目录中。插件通常归root所有,其权限设置为755。Nagios在属于nagios群组的用户nagios下工作,所以脚本需要读取和执行其他群组的权限。
  一旦你把脚本放在/usr/lib/nagios/plugins目录中,就要在文件/etc/nagios/objects/commands.cfg里面把它定义成Nagios命令。假设你将脚本命名为check_file.sh,添加下列命令定义:
  #我们的自定义文件检查命令:
  define command{command_name check_filecommand_line $USER1$/check_file.sh $ARG1$}

  这应当相当清楚。变量$ARG1$代表传递给Nagios命令的第一个实参;在本例中,这第一个实参应该是文件名称。如果你想传递更多的实参,可以将$ARG2$用作第二个实参,将$ARG3$用作第三个实参,以此类推。
  想开始使用你的插件,应在你的nagios配置文件(比如service.cfg)中将其定义成一项服务:
  define service{use local-servicehost_name localhostservice_description Check the file /etc/passwdcheck_command check_file!/etc/passwd}

  上述服务是为本地主机(host_name localhost)定义的,为本地服务使用模板(使用local-service),详见文明文档的对象继承部分(http://nagios.sourceforge.net/docs/3_0/objectinheritance.html),即可了解模板及模板的工作原理。最重要的部分是check_command指令。它指定了命令check_file,然后是作为分隔符的感叹号,后面是作为实参的文件名称。如果你的插件有不止一个实参,可以用另外的感叹号来分隔。
  远程运行Nagios插件
  示例check_file plugin存在的一个明显缺点是它本地运行,这意味着无法检查远程服务器上的文件。你有许多办法可以解决这个问题。
  第一个办法就是使用ssh命令,远程执行代码。这需要你把脚本拷贝到远程服务器上,并利用ssh可以运行远程命令的功能。这还需要你为Nagios服务器及其nagios用户配置无密码密钥登录。如果这方面你不太确信如何操作,可以参阅本文http://www.techrepublic.com/blog/opensource/remotely-monitor-servers-with-the-nagios-checkbyssh-plugin/321,了解所有的相关细节。
  这第一个办法的优点是,你拥有了针对被监控的服务器,本地运行命令所具有的功能和灵活性。缺点就是,Nagios服务器必须能够借助密钥,无密码登录到远程服务器。这是个安全问题,不推荐敏感环境使用。
  第二个比较安全的办法是,使用SNMP扩展功能。这要求你已在远程服务器上安装和配置好了net-snmp程序包(面向CentOS)。
  想使用SNMP扩展命令,先将check_file.sh脚本拷贝到远程服务器上。比如说,你可以把该脚本放在目录/usr/bin/中。
  接下来,将配置指令extend check_passwd_file /usr/bin/check_file.sh /etc/passwd添加到远程服务器上的文件/etc/snmp/snmpd.conf。语法是extend some_alias command argument。下面是这种方法存在的主要不便之处:你得为每一次独立的检查定义一个别名,在本例中这意味着为我们想要测试的每一个独立文件定义一个别名,因为无法通过SNMP来传送实参。
  文件/etc/snmp/snmpd.conf只要出现变化,都需要你用service snmpd reload命令(面向CentOS),重新装入snmpd服务。之后,你可以用snmpget命令来测试新的检查,就跟在snmpget -v2c -c public -OvQ 10.0.0.2 NET-SNMP-EXTEND-MIB::nsExtendOutputFull.\"check_passwd_file\"中一样。这个示例snmpget命令通过SNMP版本2c,以"public"共用字符串查询服务器10.0.0.2。自定义SNMP扩展命令的对象标识符(OID)是NET-SNMP-EXTEND-MIB::nsExtendOutputFull.\"some_alias\"。
  遗憾的是,上面这个命令无法直接用Nagios来实现。如果snmpget正常工作,可以连接至远程主机,它总是会返回状态0,这表明每方面都正常,因为程序snmpget本身退出时没有错误。因而,即使某个文件不存在,检查脚本也会返回状态0,不过它会输出文件不存在的正确消息。
  你可以解决这个问题,只要充分利用针对Nagios的名为check_snmp_extend.sh的特殊插件。这个插件取得状态消息的第一个单词后,根据该单词来设定状态。由于预计使用这个插件,我们在示例脚本check_file.sh中设定了消息,以便从OK(正常)、CRITICAL(临界)、WARNING(警告)和UNKNOWN(未知)开始。
  想开始使用check_snmp_extend.sh插件,先下载该插件(http://www.logix.cz/michal/devel/nagios/check_snmp_extend.sh),然后把它放到Nagios服务器上的目录/usr/lib/nagios/plugins($USER1宏命令)。在CentOS上,你得编辑脚本check_snmp_extend.sh,并把/usr/local/nagios/libexec/utils.sh换成/usr/lib/nagios/plugins/utils.sh,这是utils.sh脚本的正确路径。
  之后,你就可以像使用其他任何插件那样使用check_snmp_extend.sh。首先,把它定义为一个命令:
  define command{command_name check_snmp_extendcommand_line $USER1$/check_snmp_extend.sh $HOSTADDRESS$ $ARG1$}

  之后,定义一项服务:
  define service{use generic-servicehost_name somehost.example.orgservice_description Check For /etc/passwdcheck_command check_snmp_extend!check_passwd_file}

  使用SNMP的扩展选项就跟你的SNMP配置一样安全。这个办法只需要在远程主机上进行极少的改动,又确保了标准的设置环境符合安全方面的最佳实践。你可以找到用于类似用途的其他Nagios插件,比如nrpe,但是它们要求远程安装额外服务,从安全和兼容性的角度来看这并非总是一个好主意。
  如你所见,很容易用自行编写的插件来扩展Nagios。Nagios允许这种扩展,这一点正是许多管理员青睐它、而不是青睐其他监控解决方案的原因之一。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
按现行会计制度的规定,短期借款所发生的利息,一般应记入( )科目。 省钱输送机 江西同步带欧规皮带滚轮模组规格 请问91年3月12日是什么星座拜托各位大神 1991年3月11的双鱼座怎样拜托了各位 谢谢 ...年11月3号。这两个时间出生的人各是什么塔罗牌?拜托各位大神... 孤岛惊魂4怎么不显示dlc 微信百万保障诈骗是怎么回事 秋季大棚里应候种植什么蔬菜最适合 上海音乐学院钢琴十级通过率 港股打新艾德证券期货有限公司支持暗盘交易吗? 港股暗盘在哪里看? ubuntu 15.04安装的zabbix是什么版本 打新蓝月亮的话,要是没中签的话,哪里有港股暗盘? nagios安装报错了!! 港股有哪些券商暗盘,艾德证券支持暗盘交易吗? 哪家证券公司可以进行暗盘交易啊,请各位大神推荐一下 港股打新暗盘交易有哪些优势?在哪开户有暗盘交易? ubuntu nagios 安装官方安装后,怎么访问不了 艾德一站通港股新股暗盘在哪里看? 想问一下,港股暗盘都有哪些交易平台? 用韩国后化妆品肤色暗沉 韩国化妆品后的具体介绍 苹果手机叫不出来siri 手机买的时候有贴膜吗? 手机买来手机上有没有贴膜 从2000年到2016年这17年中平年有几年,闰年有几年? 上海市闸北区梅园路77号上海人才大厦19楼 上海电信的十全十美套餐一家子人用可以么? 1,闰年几年闰一次? nagios是怎样监控的,怎么监控客户端的,需要安装什么,nagios监控的原理是什么 安装nagios-plugins-1.4.16.tar.gz插件 软件包需要安装Digest-MD5-2.52.tar.gz ,在安装此软件包时候报错 如何在CentOS,Redhat和Fedora中安装NagiosQL3与Nagios的核心_百度... 2022年新国标电动车标准 我安装nagios的时候执行到make intall 和make install-config报错,说/usr/bin/intall无效的用户,怎么办 国家电动车的新标准是什么 我安装nagios之后,某个服务器出现CHECK_NRPE: Error - Could not compl... 电动自行车时速不得超过多少? 【求助】谁知道怎么查自己的手机卡给谁打过电话 哪里有卖装纪念币的册子或盒子? 纪念币外面的有机玻璃小合子什么地方有买?谢谢。 福州哪里有卖纪念币盒 流通纪念币、纪念章在哪里买?怎么买? 郑州哪个地方可以买纪念币盒子 纪念币塑封在哪里能买到 银行的生肖纪念币在哪里可以买到? 什么软件可以把音乐的比特率调成16 word 怎么插入图片那个箭头 手机上有没有可以写小说又可以上传的软件 有款软件可以改变MP3比特率(中文的),有谁知道?帮帮忙