当前位置: 首页 > article >正文

Zabbix7.0服务器在告警发生时自动调用客户机脚本

一、问题的产生

部署的应用服务器偶尔会因为各种原因停止服务,以往都是用户反馈后进行排查处理,90%以上的处理措施是重启服务。

在zabbix服务器部署完成后添加了触发器监控相应端口,故障发生后会给运维人员发送通知邮件,处理的时效性大为提高。但有时故障发生在非工作时间,相关人员虽然收到了通知却没有立即处理的条件。

二、解决的思路

zabbix服务器具有调用远程脚本的功能,打算通过告警触发后执行预设脚本来实现故障的自动处理。

三、实验环境

1、Zabbix服务器配置:

Zabbix 版本: Zabbix 7.0.3 LTS

操作系统: Ubuntu 24.04 (Noble)

数据库: MySQL 8

Web 服务器: Apache

IP:192.168.1.242

2、监控目标主机配置

操作系统: Ubuntu 24.04 (Noble)

Docker: 27.3.1

运行镜像:mysql

端口:3306

部署zabbix agent2  (因为要监测docker及mysql数据库)

IP:192.168.1.238

四、实验步骤

本次实验目标是通过3306端口来判断mysql服务是否正常,当3306端口down就引起触发器动作,执行预定脚本重启mysql服务。

  1. 新建运维脚本文件

在/usr/local/bin目录下,创建container_restart.sh文件

# cd /usr/local/bin

# vi container_restart.sh

2、赋予脚本执行权限

# chmod +x container_restart.sh

3、赋予 zabbix 用户执行权限

chown zabbix:zabbix container_restart.sh

4、配置 Zabbix Agent2 允许远程命令

与Zabbix Agent配置参数不同,Zabbix Agent2 是修改/etc/zabbix/Zabbix_agent2.conf文件,启用 AllowKey 参数。

如果部署的是Zabbix Agent,则修改/etc/zabbix/Zabbix_agent.conf,启用

EnableRemoteCommands=1  # 允许远程命令执行
LogRemoteCommands=1     # 记录远程命令日志(调试用)

# vi Zabbix_agent2.conf

注:未配置此参数,调用脚本时会报“Cannot execute script.Unknown metric system.run”。

5、重启 Zabbix Agent

# systemctl restart zabbix-agent2

7、配置触发器

进入 Action 配置页面:

导航到 Data collection → Hosts→Triggers 点击 Create trigger。

设置Name、Event Name、Expression。

8、新建脚本

进入 Scripts 配置页面:

导航到 Alerts → Scripts 点击 Create script。

设置Name、Type、Execute on、Commands。

Type 选Script,Execute on 选 Zabbix agent, Commands 输入之前创建的脚本文件名 /usr/local/bin/container_restart.sh

然后保存。

9、新建动作

进入 Trigger actions 配置页面:

导航到 Alerts → Actions → Trigger actions 点击 Create action。

设置Name、Conditions

Conditions选择刚才创建的触发器 “3306down”

在Operations页面的Operations栏点“Add”,添加一个操作,在弹出的“Operation details”页面中,在下拉框选择刚才创建的脚本"192.168.0.238_container_restart",在“Target list”栏勾选执行目标为“Current host”。

设置完成。

10、测试效果

手动停止mysql服务

Zabbix监测到端口down,触发器产生问题告警

成功执行远程命令

手动查看容器状态,mysql已重启。

Zabbix显示问题已解决


http://www.kler.cn/a/543798.html

相关文章:

  • 【STM32】ADC|多通道ADC采集
  • transformer
  • 小红书八股面经一份(JAVA开发)
  • 机器学习分类整理【表格版】分类角度、名称、概念、常见算法、典型案例
  • 项目复盘:提炼项目成功与失败的经验
  • JSON是什么
  • 从零开始学Python爬虫:(二)使用基本库urllib(上)
  • Vue的scoped原理是什么
  • 在 Navicat 17 中扩展 PostgreSQL 数据类型 - 范围类型
  • NLP深度学习 DAY7:平滑、语境学习、Scaling Law、大模型的发展、LLM的构建流程
  • 【Java】详细讲解数据类型与运算符
  • PlantUML 总结
  • 使用 EDOT 监测由 OpenAI 提供支持的 Python、Node.js 和 Java 应用程序
  • Ubuntu 上安装 Elasticsearch 7.6.0
  • ubuntu22.04可视化界面
  • 如何在Excel和WPS中进行翻译
  • Java 后端开发工程师进阶路线
  • Android10 音频参数导出合并
  • 机器学习核心算法解析
  • QT 5.15.2 开发地图ArcGIS 100.15.6(ArcGIS Runtime SDK for Qt)
  • Java8新特性Optional,Function,Supplier,Consumer
  • 【Cocos TypeScript 零基础 15.1】
  • Jenkins 部署 之 Mac 一
  • ASP.NET Core SignalR实践指南
  • 如何在Java EE中使用标签库?
  • 【实战指南】使用OpenVINO C# API轻松部署飞桨PP-OCRv4模型