用monit监视nfs

我想用Monit监视NFS挂载和NFS服务器进程。

在服务器上,我需要一个PID文件,但似乎无法find用现有configuration文件创build的方法。 有没有办法做到这一点,或有任何人以不同的方式监控服务器(检查端口53是否处于活动状态等)。

在客户端,我想让Monit简单地在NFS挂载中查找一个特定的文件,如果可以访问的话,一切都很好。 问题是,如果NFS服务器停止运行,文件请求通常会挂起(甚至可能无限期地,不确定)。 如何用monit来解决这个问题?

任何configuration示例将不胜感激!

至于在NFS服务器故障期间Monit进程的“悬挂”,这可以通过两种方法来绕开。

  1. 您将NFS挂接选项从hard更改为soft ,这会导致NFS层在重新尝试重新发送访问应用程序时发出I / O错误。 由于这可能会导致其他数据完整性方面的问题(您的编写应用程序需要能够处理I / O错误,或者至less干脆退出,而不会破坏写入的文件),您也可以尝试:
  2. 将您的支票与Monit同步(解开)。 你可以定义一个cronjob定期检查你的NFS挂载文件,并写入另一个“NFS状态文件”,例如。 到/ tmp。 这样,如果NFS服务器消失,只是cronjob会挂起(而不是你的Monit客户端)。 你的Monit检查现在只是检查这个第二阶段的“NFS状态文件”,以及它是否比cronjob的频率更早(这将表明挂起的NFS)。

希望这可以帮助!

你有没有检查nfs的init脚本? 我怀疑他们正在创build一个pid文件,并将其粘在某处,以便将来重新启动或停止操作。 如果没有,修改它们应该很简单。

至于检查挂载去看看http://nfs.sourceforge.net/nfs-howto/ar01s04.html#mounting_remote_dirs第4.3.1部分。 如果使用“软”选项安装它,您将获得允许监视它的行为,但不应该将其用于实际安装。 也许你想要第二个安装只是为了监测?

一般的做法是(假设没有任何Monit内置规则是适用的)

  1. 了解如何手动进行检查
  2. 编写执行这些检查的shell脚本,返回0表示“成功”,1表示“失败”
  3. 让Monittesting这些脚本(例如来自官方文档 ):

     check program myscript with path "/usr/local/bin/myscript.sh" if status != 0 then alert 

对于具体的问题,这可能意味着

  • 服务器:这可能取决于您的操作系统,Linux发行版,NFS 3或4等,但它应该很容易弄清楚。 例如在Ubuntu 12.04上,我会testingNFS服务器是否正在运行

     $ service portmap status $ service nfs-kernel-server status 

    如果两个命令都返回“running”,则创build一个返回0的shell脚本。

  • 客户端:为了检查某个NFS共享是否已经挂载,我主要使用df -h。 所以相应的shell脚本看起来就像

     #! /bin/bash df -h | grep -q thesharename