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

来源:互联网 发布:企业vpn网络解决方案 编辑:程序博客网 时间:2024/06/02 04:25

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

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

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

start.sh脚本内容:

  1. #!/bin/bash
  2. LANG="zh_CN.UTF-8"
  3.  
  4. APP_HOME=$(echo `pwd` | sed 's/bin//')
  5. APPPIDFILE=$APP_HOME/app.pid
  6.  
  7. case $1 in
  8. start)
  9. echo "Starting server... "
  10.  
  11. HEAP_MEMORY=1024m
  12. PERM_MEMORY=64m
  13. JMX_PORT=8911
  14. 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"
  15.  
  16. shift
  17. ARGS=($*)
  18. for ((i=0; i<${#ARGS[@]}; i++)); do
  19. case "${ARGS[$i]}" in
  20. -D*) JAVA_OPTS="${JAVA_OPTS} ${ARGS[$i]}" ;;
  21. -Heap*) HEAP_MEMORY="${ARGS[$i+1]}" ;;
  22. -Perm*) PERM_MEMORY="${ARGS[$i+1]}" ;;
  23. -JmxPort*) JMX_PORT="${ARGS[$i+1]}" ;;
  24. -JmxHost*) JMX_HOST = "${ARGS[$i+1]}" ;;
  25. esac
  26. done
  27. 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}"
  28. echo "start jvm args ${JAVA_OPTS}"
  29. nohup /home/java/jdk1.8.0_40/bin/java -classpath .:./yunva-script-1.0.0.jar:$CLASSPATH $JAVA_OPTS com.yunva.script.ScriptServer&
  30. echo $! > $APPPIDFILE
  31. echo STARTED
  32. ;;
  33.  
  34. stop)
  35. echo "Stopping server ... "
  36. if [ ! -f $APPPIDFILE ]
  37. then
  38. echo "error: count not find file $APPPIDFILE"
  39. exit 1
  40. else
  41. kill -15 $(cat $APPPIDFILE)
  42. rm $APPPIDFILE
  43. echo STOPPED
  44. fi
  45. ;;
  46.  
  47. *)
  48. echo "Please enter start|stop ... "
  49. ;;
  50.  
  51. esac
  52.  
  53. 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

原创粉丝点击