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

embedded/2025/2/13 23:43:50/

一、问题的产生

部署的应用服务器偶尔会因为各种原因停止服务,以往都是用户反馈后进行排查处理,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.ppmy.cn/embedded/161993.html

相关文章

两个同一对象targetList和 sourceList 去重

我现在需要解决的问题是从一个Java的源列表`sourceList`中移除所有在目标列表`targetList`中存在的数据,并且还要去除`targetList`中的重复数据。让我先理清楚这两个问题的思路。 首先,如何快速从`sourceList`中移除含有`targetList`的数据。这里的“含有”应该是指两个列表中…

rabbitMQ数据隔离

用户管理 点击Admin选项卡,就会呈现rabbitMQ控制台的用户管理界面 Name:sde,也就是用户名Tags:administrator,说明sde用户是超级管理员,拥有所有权限Can access virtual host: /,可…

前端知识速记--JS篇:instanceof

前端知识速记–JS篇:instanceof 在JavaScript中,instanceof运算符用于检测一个对象是否是另一个对象的实例。它的基本语法为:obj instanceof Constructor。如果obj是Constructor的实例,它将返回true,否则返回false。这…

如何顺利开设Facebook账户并设置广告账户

随着数字营销的快速发展,Facebook成为了许多企业进行品牌推广、增加曝光和吸引潜在客户的重要平台。为了能够在Facebook上投放广告,首先需要开设一个Facebook个人账户,并进一步设置广告账户。 一、创建Facebook个人账户 1.访问Facebook官方…

Django中apps.py作用

在 Django 中,apps.py 文件用于定义应用程序的配置类(AppConfig),主要作用包括: 1. 应用程序配置 apps.py 中的 AppConfig 类用于配置应用程序的元数据和行为,例如应用程序的名称、标签等。 2. 应用程序…

微信小程序 - 分包加载

分包加载 小程序的代码通常是由许多页面、组件以及资源等组成,随着小程序功能的增加,代码量也会逐渐增加,体积过大就会导致用户打开速度变慢,影响用户的使用体验。 分包加载是一种小程序优化技术。将小程序不同功能的代码&#…

ADB的安装和使用

文章目录 前言一、ADB是什么?一、ADB的基本概念二、ADB的主要功能三、ADB在Linux系统中的安装与使用四、ADB命令的示例 二、windows 安装ADB1.ADB不用安装,解压文件后添加环境变量即可2.测试是否能使用 三、与linux通信3.1 将 usb设备连接到虚拟机3.2.测…

python动物识别深度学习分析系统

✔️该系统基于 深度学习 中的 卷积神经网络(CNN),利用 TensorFlow 或 PyTorch 框架,针对动物图像进行高效的分类和识别。通过 数据增强技术(如旋转、缩放、裁剪等)扩展数据集,提高模型的鲁棒性…