ZABBIX新功能系列2-通过Webhook调用虚拟化API重启故障主机
Zabbix老版本当发生故障时我们可以定义“动作”(Action)可以通过客户端Zabbix agent执行某些操作来使故障自动恢复,如检查发现磁盘可使用空间小于10%时,自动执行清理临时文件与日志文件的Shell脚本等方法来清理磁盘空间达到告警消除的目的,从而做到故障自愈。但这种方法一般只适用于监控主机仍然存活且Zabbix agent客户仍然可用的情景下。
现在我们很多生产环境部署在各种虚拟化或云环境下,这时可能会因为各种原因主机会发生死机等情况,这时zabbix agent也就无法正常访问了,这时我们通常的做法是通过云管平台重启云主机,这通常需要我们手动去操作,为了减少手工操作,同时使一线运维人员快速处理这类问题,这里我们提出一种可以通过Zabbix监控发现这种问题并自动处理或者集成到ZABBIX扩展菜单里使一线人员在确认问题可以直接通过扩展菜单功能来重启发生死机等故障的云主机。
这里我们就以创建一个在ZABBIX里手动重启Proxmox虚拟机的脚本为例来介绍有关操作。
-
"管理"->"脚本"->"创建脚本"
-
输入创建脚本的有关参数。
名称 脚本的唯一名称 Scope Action operation 作为动作使用的脚本,可以告警操作中使用。
Manual host action 扩展监控主机操作菜单 ,在任何可以显示主机操作菜单中手动选择菜单项进行操作。
Manual event action 事件扩展菜单,如本系列1中所讲,可以配置一个事件操作菜单,手工选择来发送特定告警。Memu path 菜单显示配置 类型 可以选择Webhook,脚本,SSH,Telnet,IPMI 参数 值对列表,与系列1中相同,将传递给脚本使用,请参考系列1. 脚本 同系列1相同,输入有关Javascript脚本,实现Webhook操作。 主机群组 选择脚本可用的主机组 ( 如这里我们选择PROXMOX集群)。 用户群组 选择脚本可用的用户群组 应用确认 选中复选框在执行脚本之前将显示确认消息。对于潜在的危险操作(如重新启动脚本)添加相关提示信息将特别有用。 确认文 字 输入确认弹出窗口的自定义确认文本 (例如,{HOST.NAME}将要重启,您确定吗?)(这里可以相关宏) -
输入调用Proxmox Api重启主机脚本。
12345678910111213141516171819202122232425262728293031try
{
var
params = JSON.parse(value),
req =
new
HttpRequest(),
response;
if
(params.HTTPProxy) {
req.setProxy(params.HTTPProxy);
}
req.addHeader(
'PVEAPIToken:USER@REALM!TOKENID=UUID'
);
Zabbix.log(4,
'[ PROXMOX webhook ] Webhook request with value='
+ value);
response = req.post(params.hook_url,
'vmid='
+ params.vmid);
Zabbix.log(4,
'[ PROXMOX webhook ] Responded with code: '
+ req.Status() +
'. Response: '
+ response);
try
{
response = JSON.parse(response);
}
catch
(error) {
if
(req.getStatus() < 200 || req.getStatus() >= 300) {
throw
'Request failed with status code '
+ req.getStatus();
}
else
{
throw
'Request success, but response parsing failed.'
;
}
}
if
(req.getStatus() !== 200 || !response.ok || response.ok ===
'false'
) {
throw
response.error;
}
return
'执行成功'
;
}
catch
(error) {
Zabbix.log(3,
'[ Pro webhook ] Sending failed. Error: '
+ error);
throw
'执行失败,发生错误: '
+ error;
}
-
"监测"->"主机"选择Proxmox集群,将列表有关监控主机,然后单击主机名将显示可操作菜单,其中就有新添加的“重启PROXMOX虚拟机",如下图:
-
点击该菜单就可以测试脚本相关功能,从而实现在监控系统里对故障主机的相关操作。
如果您喜欢这个系统,请扫码关注:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库