Zabbix通过curl命令判断Web服务是否正常并自动重启服务主要思路:
通过curl命令获取服务器响应码,如果正常返回200,不正常返回000
具体命令:
curl -I -s -w "%{http_code}" -o /dev/null
1.编辑zabbix-agent客户端的配置文件
①vim /etc/zabbix/zabbix_agentd.conf
# 添加命令参数
UserParameter=script_status,/usr/bin/curl -I -s -w "%{http_code}" -o /dev/null :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
--------------------------------------
start.sh脚本内容:
--------------------------------------
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"