好吧,让我们说我有一个Nagios设置,使用所谓的nagios插件来监视不同的服务。
对于我的nagios插件(可能用python编写)来确定给定的服务是否正常运行,最好的办法是什么?
有问题的特定服务是一个侦听某个端口的python套接字服务器。 所以我会确保nagios经常检查服务,如果停止响应/死亡,我应该重新启动它。 我该怎么做才能知道套接字服务器是否还活着? 最终,我将如何检查它是否响应。
我可以控制服务 – 如果能帮助我确定它的健康状态,我可以改变它的工作方式。
任何想法都欢迎!
保持在Ubuntu存储库上find的标准Nagios插件,可以使用check_tcp插件发送一个string,然后检查它是否返回预期的响应:
Usage:check_tcp -H host -p port [-w <warning time>] [-c <critical time>] [-s <send string>] [-e <expect string>] [-q <quit string>][-m <maximum bytes>] [-d <delay>] [-t <timeout seconds>] [-r <refuse state>] [-M <mismatch state>] [-v] [-4|-6] [-j] [-D <days to cert expiry>] [-S <use SSL>] [-E]
既然你可以修改你的服务,你可以做一些类似“你还好吗? 并寻找“我很好”。 这取决于您希望如何检查服务是否正常运行。
您也可以使用check_procs来查看服务的进程是否在那里。 这可能与check_tcp检查结合使用,或作为替代scheme。 再次,这取决于你在做什么,以及你想要做多less事情。 如果你想涉足很多,你可以编写一个定制的Nagios检查程序来做各种事情来validation服务的function,并将自定义状态消息返回给Nagios服务器。
有几种方法可以确保服务正在运行。
ps -ef输出中。 netstat -lnp | grep your_port输出中查看监听端口 netstat -lnp | grep your_port 。 你可以使用一个python脚本,如你所build议检查,这里是我写的只是检查1端口。 https://github.com/jonzobrist/Bash-Admin-Scripts/blob/master/tcpcheck.py
这是一个稍微不同的版本,速度要快很多,并且检查你指定的次数。 它会在不到半秒的时间内将本地服务器打到1500次。
https://github.com/jonzobrist/Bash-Admin-Scripts/blob/master/tcpcheck-bulk.py
如果你正在寻找一个本地shell脚本,pgrep processname工作得很好,在Bash这样的事情应该得到你想要的。
PROC_PID=$(pgrep processname) if [ "${PROC_PID}" ] then echo "Process is running" else echo "Process is not running" fi
你可以用lsof -i做类似的事情:PORT对于https / tcp 443来说就像
PORT_LISTEN=$(lsof -i :443 | grep LISTEN) if [ "${PORT_LISTEN}" ] then echo "Port is listening ${PORT_LISTEN}" else echo "Nothing is listening on 443" fi