zabbix通过curl命令判断web服务是否正常并自动重启服务

主要思路:
通过curl命令获取服务器响应码,如果正常返回200,不正常返回000
具体命令:
curl -I -s -w "%{http_code}" -o /dev/null http://www.baidu.com/

1.编辑zabbix-agent客户端的配置文件
①vim /etc/zabbix/zabbix_agentd.conf

# 添加命令参数
UserParameter=script_status,/usr/bin/curl -I -s -w "%{http_code}" -o /dev/null http://1.1.1.1:9735/check
# 打开远程命令调用
EnableRemoteCommands = 1

重启服务生效
service zabbix-agent restart

②visudo打开关于zabbix操作的命令
a. 添加zabbix权限
zabbix ALL=(ALL) NOPASSWD: ALL

b.注释掉如下一行,否则命令无法执行:
# Default requiretty

2.添加需要被触发的脚本
vim /usr/local/zabbix-agent/scripts/restart_script.sh

#!/bin/bash
# killyunva-script 关闭yunva-script这个java进程
ps -ef|grep yunva-script-1.0.0.jar|/bin/kill `awk '{print $2}'`
sleep 3
# start yunva-script 重新启动yunva-script这个java脚本
cd /home/script/ && /bin/bash start.sh start chmod +x /usr/local/zabbix-agent/scripts/restart_script.sh

--------------------------------------
start.sh脚本内容:

#!/bin/bash
LANG="zh_CN.UTF-8" APP_HOME=$(echo `pwd` | sed 's/bin//')
APPPIDFILE=$APP_HOME/app.pid case $1 in
start)
echo "Starting server... " HEAP_MEMORY=1024m
PERM_MEMORY=64m
JMX_PORT=8911
JMX_HOST=1.1.1.1 JAVA_OPTS="-server -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider -XX:+HeapDumpOnOutOfMemoryError -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dio.netty.leakDetectionLevel=advanced" shift
ARGS=($*)
for ((i=0; i<${#ARGS[@]}; i++)); do
case "${ARGS[$i]}" in
-D*) JAVA_OPTS="${JAVA_OPTS} ${ARGS[$i]}" ;;
-Heap*) HEAP_MEMORY="${ARGS[$i+1]}" ;;
-Perm*) PERM_MEMORY="${ARGS[$i+1]}" ;;
-JmxPort*) JMX_PORT="${ARGS[$i+1]}" ;;
-JmxHost*) JMX_HOST = "${ARGS[$i+1]}" ;;
esac
done
JAVA_OPTS="${JAVA_OPTS} -Xms${HEAP_MEMORY} -Xmx${HEAP_MEMORY} -XX:PermSize=${PERM_MEMORY} -XX:MaxPermSize=${PERM_MEMORY} -Dcom.sun.management.jmxremote.port=${JMX_PORT} -Djava.rmi.server.hostname=${JMX_HOST} -Dapp.home=${APP_HOME}"
echo "start jvm args ${JAVA_OPTS}"
nohup /home/java/jdk1.8.0_40/bin/java -classpath .:./yunva-script-1.0.0.jar:$CLASSPATH $JAVA_OPTS com.yunva.script.ScriptServer&
echo $! > $APPPIDFILE
echo STARTED
;; stop)
echo "Stopping server ... "
if [ ! -f $APPPIDFILE ]
then
echo "error: count not find file $APPPIDFILE"
exit 1
else
kill -15 $(cat $APPPIDFILE)
rm $APPPIDFILE
echo STOPPED
fi
;; *)
echo "Please enter start|stop ... "
;; esac exit 0

--------------------------------------

3.zabbix-server的web配置

测试远程命令是否ok
# zabbix_get -s 1.1.1.1 -p 10050 -k script_status
200

①添加监控项item
Confuguration --> Hosts --> 找到对应的主机,点开 Items --> Create item
Name: script_check
# key需要和zabbix-agentd.conf中定义的Parameter参数一致
Key: script_status


②创建对该监控项的触发器
Confuguration --> Hosts --> 找到对应的主机,点开 Triggers --> Create trigger

Name: yunva_scripts_port_9735_not_200
Expression: {iZ23xtdqvgmZ:script_status.last()}<>200

③设置Action
Configuration-->Actions-->Create action

创建Action动作,即返回值不是200的时候重启服务
在Action选项中,
定义Name:yunva_scripts_port_9735_not_200
#action name自定义即可,action选项的其余部分可采用默认值,如下:


Conditions
在Conditions选项中添加新的条件判断,以使判断更有针对性,如
New condition:Trigger severity = Warning
New condition:Trigger name like yunva_scripts_port_9735_not_200
#trigger name对应步骤1中定义的trigger name,如下:


Operations
在Operations选项中,添加新的”Action operation”,点击”New”,
Operation type:选择”Remote Command”
Target list:添加target为”Current host”
#agent在本机
Type:选择”Custom script”
Execute on:选择”Zabbix agent”,命令为 "sudo /bin/bash /usr/local/zabbix-agent/scripts/restart_script.sh"

以上的方法实践证明不是很可靠,如果服务宕掉,可以出发事件,http服务如果超出一定时间不响应,使用curl命令无法判断到底是否触发,如果超过了10秒以上,我们可以认为服务已经不可用(没有用户可以忍受10秒以上的页面响应速度),通过web的方式可以做到,具体实现方法可以参考zabbix系列(八)zabbix添加对web页面url的状态监控 :http://blog.csdn.net/reblue520/article/details/52312164

zabbix通过curl命令判断web服务是否正常并自动重启服务的更多相关文章

  1. windows service自动重启服务

    服务一般都能正常的运行,但有时候也会有一些假死现象,比如公司有一考勤服务就因为依赖于硬件厂家的api, 但厂家api运行一段时间后会默名的假死,引起整个服务假死,因为这一假死现象具有不确定性,所以不太 ...

  2. Node.js热部署代码,实现修改代码后自动重启服务方便实时调试

    写PHP等脚本语言的时候,已经习惯了修改完代码直接打开浏览器去查看最新的效果.而Node.js 只有在第一次引用时才会去解析脚本文件,以后都会直接访问内存,避免重复载入,这种设计虽然有利于提高性能,却 ...

  3. [转]C#创建服务及使用程序自动安装服务,.NET创建一个即是可执行程序又是Windows服务的exe

    写在前面 原文地址:C#创建服务及使用程序自动安装服务,.NET创建一个即是可执行程序又是Windows服务的exe 这篇文章躺在我的收藏夹中有很长一段时间了,今天闲着没事,就自己动手实践了一下.感觉 ...

  4. systemd实践: 依据情况自动重启服务【转】

    1.最简单的自动重启范例 [Unit] Description=mytest [Service] Type=simple ExecStart=/root/mytest.sh Restart=alway ...

  5. C#创建服务及使用程序自动安装服务,.NET创建一个即是可执行程序又是Windows服务的exe

    不得不说,.NET中安装服务很麻烦,即要创建Service,又要创建ServiceInstall,最后还要弄一堆命令来安装和卸载. 今天给大家提供一种方式,直接使用我们的程序来安装/卸载服务,并且可以 ...

  6. 监控windows服务,当服务停止后自动重启服务

    近期花时间研究了一下windows和linux下某服务停了后自动重启的功能,在网上收集了些资料,并经过测试,在此整理一下.这里介绍的是windows服务的监控,是通过批处理来实现的.本例是监控wind ...

  7. C#创建服务及使用程序自动安装服务

    .NET创建一个即是可执行程序又是Windows服务的exe 不得不说,.NET中安装服务很麻烦,即要创建Service,又要创建ServiceInstall,最后还要弄一堆命令来安装和卸载. 今天给 ...

  8. swoft实现自动重启服务 转

    目的:1.上传代码后HTTP服务自动重启,不需要自己手动执行:php bin/swoft http:start2.自动重启适用于开发调试阶段,因为不能再后台运行所以在线上环境的话还是要重启http服务 ...

  9. nodejs之pm2自动重启服务

    pm2 start xxx #启动服务器 pm2 list #查看运行状态 pm2 logs #查看日志 pm2 restart xxx #重启应用 pm2 stop xxx #停止应用 监听修改,并 ...

随机推荐

  1. Node.js高级编程读书笔记 - 6 应用程序构建和调试 - Never

    Explanation 现阶段console.log(...),util.inspect(...), JSON.stringify(...)在控制台输出已经够用了[2015/07/19]. 单元测试隶 ...

  2. 动态添加Marquee标签,并动态赋值与属性

    前台加载js $(function(){ var publishStr="<%=publishText%>" var marqueeStr=" <mar ...

  3. HTTP协议详解--转载http://blog.csdn.net/gueter/article/details/1524447

    引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...

  4. 2016HUAS_ACM暑假集训1A - 士兵队列训练问题

    这道题我觉得是个简单的模拟题,整理一下思路,弄清楚题意就好了. 新手上路,采用两个数组进行交互赋值,用的方法也比较笨,思路差不多都在代码的注释里了. 下面是题目大意: 首先将士兵从1开始编号(士兵总数 ...

  5. [hdu 3376]Matrix Again

    这题就是真正的费用流了,用 大屁 就算不超时,你也有个 CE :数组 so large 拆点,费用取反,最大费用最大流即可了喵~ 不过似乎这题很不兼容 dijkstra 的样子 就算用 spfa 重赋 ...

  6. Cellmap 基站查询 For Pc

    cellmap for pc 6.2.8.3.0.9 在线版本 更新日期:2017年1月5日 下载地址:<地址一> 主页:www.cellmap.cn 特别声明:本软件不能手机定位.谨防受 ...

  7. ./configure,make,make install的作用(转)

    这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤. ./configure是用来检测你的安装平台的目标特征的.比如它会检测你是不是有CC或GCC,并不是需要CC或GCC ...

  8. .tar.gz文件和.rpm文件的区别

    Linux软件的二进制分发是指事先已经编译好二进制形式的软件包的发布形式,其优点是安装使用容易,缺点则是缺乏灵活性,如果该软件包是为特定的硬件/操作系统平台编译的,那它就不能在另外的平台或环境下正确执 ...

  9. (转)pdf文件结构

    PDF文件结构(一)  ————物理结构 PDF(Portable   Document   Format,便携式文档结构)是一种很有用的文件格式,其最大的特点是平台无关而且功能强大(支持文字/图象/ ...

  10. yum install nginx

    先安装nginx的yum源 http://nginx.org/en/linux_packages.html#stable 找到链接,安装: rpm -ivh http://nginx.org/pack ...