Zabbix 无法执行脚本

本文分享了在使用Zabbix进行钉钉告警时遇到的脚本触发问题及解决方案,主要涉及权限配置错误导致的脚本无法执行情况,并提供了具体的解决步骤。

前言

笔者在搭建一个zabbix钉钉告警的时候,本地直接运行脚本可以将测试信息发送至钉钉,而当zabbix出现告警的时候怎么也触发不了脚本。

笔者确认告警媒介、用户设置告警以及动作都设置无误。

解决方案

在后来发现是因为权限导致zabbix无法触发脚本。
将脚本加上可执行权限:

[root@ltd alertscripts]# chmod +x zabbix_dingding_script.py
[root@ltd alertscripts]# ll
-rwxr-xr-x 1 root root 672 10月  9 15:26 zabbix_dingding_script.py

如果仍然无法触发脚本,可以直接编辑zabbix_server配置文件以下两项,修改执行脚本的用户:

[root@ltd /root]# vim /etc/zabbix/zabbix_server.conf
……
AllowRoot=1
User=root
……

重启zabbix服务即可。

<think>嗯,用户的问题是关于在Zabbix Server中执行自定义脚本的配置方法。结合用户提供的引用内容,我需要整理出清晰的配置步骤。用户可能正在搭建监控系统,需要扩展自定义监控项,这属于Zabbix的中高级配置场景。 从引用内容看,用户已经接触过自定义监控项(如引用1和引用3提到的UserParameter配置)、告警脚本(引用2的钉钉告警)以及模板应用(引用4)。过用户当前聚焦在Server端执行脚本的机制上,这需要区分两种场景:主动监控项执行告警脚本执行。 首先考虑主动监控项场景。引用1和引用3详细说明了agent端的UserParameter配置,但用户问的是Server端执行。这里需要澄清:Server通常直接执行被监控主机的脚本,而是通过zabbix_get命令(如引用3所示)或agent主动上报。过对于Server本地的监控,可以在Server的agent配置中添加UserParameter。 然后是告警脚本执行场景。引用2和引用5提到关键路径AlertScriptsPath,这是Server执行自定义告警脚本的核心。需要强调脚本必须放在该目录下,且注意权限问题。用户可能混淆了监控数据收集脚本告警脚本的存放位置,需要明确区分。 用户引用的内容里还包含几个易错点:引用1提到的Timeout参数调整对执行耗时脚本很关键;引用5展示的脚本参数校验示范值得参考。这些细节都应融入回答中。 最后需要说明验证方法,如引用3的zabbix_get测试和Web界面配置。考虑到用户可能熟悉操作流程,步骤要拆解到命令级别,比如如何查找AlertScriptsPath位置、如何重启服务等。 相关问题设计要覆盖延伸需求:性能优化(如脚本超时)、安全风险(如脚本权限)、高级应用(如自动发现)。用户可能是运维工程师,问题应偏向实践排错和扩展应用。</think>在 Zabbix Server 中执行自定义脚本主要有两种场景:**主动监控数据收集**和**告警通知**。配置方法如下: --- ### 一、主动监控数据收集(通过 Zabbix Agent) 此场景下,脚本实际在 **被监控主机** 的 Zabbix Agent 上执行,Server 负责请求和接收数据。 1. **在目标主机(Agent 端)配置脚本** * 将自定义脚本(如 `check_script.sh`)放在 Agent 主机的一个安全目录下(如 `/usr/local/bin/`)。 * 确保脚本有可执行权限:`chmod +x /usr/local/bin/check_script.sh` 2. **修改 Agent 配置文件** * 编辑 `zabbix_agentd.conf` 或 `zabbix_agentd.conf.d/` 目录下的自定义配置文件。 * 添加 `UserParameter` 指令定义监控项键值: ```conf UserParameter=custom.key.name[*], /usr/local/bin/check_script.sh "$1" "$2" ``` * `custom.key.name`:自定义的监控项键值(在 Web 界面配置监控项时使用)。 * `[*]`:允许传入参数(可选)。脚本中通过 `$1`, `$2` 等获取参数。 * 逗号后面是脚本的完整路径和参数占位符。 3. **调整超时时间(可选)** * 如果脚本执行较慢,需在 Agent 端和 Server 端的配置文件中增加超时设置: * Agent 端 (`zabbix_agentd.conf`): `Timeout=30` * Server 端 (`zabbix_server.conf`): `Timeout=30` * **重启服务生效**: ```bash systemctl restart zabbix-agent # 重启 Agent systemctl restart zabbix-server # 重启 Server(如果需要) ``` 4. **在 Zabbix Server 端测试** * 使用 `zabbix_get` 命令验证监控项是否正常工作: ```bash zabbix_get -s <agent_host_ip> -k "custom.key.name[arg1, arg2]" ``` 5. **在 Zabbix Web 界面配置** * 创建或修改主机配置。 * 创建 **监控项 (Items)**: * **键值 (Key)**:填写 `custom.key.name[arg1, arg2]`(与 `UserParameter` 定义一致)。 * 将监控项关联到模板或主机[^4]。 --- ### 二、告警通知(在 Zabbix Server 端执行脚本) 此场景下,脚本在 **Zabbix Server** 本身上执行,用于发送告警(如邮件、钉钉、短信)。 1. **确定告警脚本目录** * 查看 Zabbix Server 配置文件 `zabbix_server.conf` 中的 `AlertScriptsPath` 参数: ```bash grep AlertScriptsPath /etc/zabbix/zabbix_server.conf # 示例输出: AlertScriptsPath=/usr/lib/zabbix/alertscripts ``` * 默认路径通常是 `/usr/lib/zabbix/alertscripts` 或 `/usr/share/zabbix/alertscripts`[^2]。 2. **放置告警脚本** * 将自定义告警脚本(如 `dingding.py`, `send_sms.sh`)放入 `AlertScriptsPath` 指定的目录。 * 确保脚本有可执行权限: ```bash chmod +x /usr/lib/zabbix/alertscripts/dingding.py chown zabbix:zabbix /usr/lib/zabbix/alertscripts/dingding.py # 确保 Zabbix Server 用户有权执行 ``` 3. **配置告警媒介类型** * 登录 Zabbix Web 界面 -> **管理 (Administration)** -> **媒介类型 (Media types)** -> **创建媒介类型 (Create media type)**。 * **类型 (Type)**: 选择 `脚本 (Script)`。 * **名称 (Name)**: 输入有意义的名称(如 `DingTalk Alert`)。 * **脚本名称 (Script name)**: 填写放置在 `AlertScriptsPath` 目录下的脚本文件名(如 `dingding.py`)。 * **脚本参数 (Script parameters)**: 添加需要的参数(通常至少包含 `{ALERT.MESSAGE}`, `{ALERT.SUBJECT}`),脚本内部通过 `sys.argv[1]`, `sys.argv[2]` 等获取[^2][^5]。例如: ``` {ALERT.SUBJECT} {ALERT.MESSAGE} {EVENT.TAGS} ``` 4. **配置用户接收告警** * 进入 **用户 (Users)** 设置 -> 选择用户 -> **报警媒介 (Media)** 标签页 -> **添加 (Add)**。 * 选择刚创建的媒介类型(如 `DingTalk Alert`)。 * 填写该媒介类型需要的收件地址/标识(如钉钉机器人 Webhook URL 或手机号,具体看脚本设计,可填入 `Send to` 字段)。 * 设置告警时段和严重性级别。 5. **配置动作 (Action)** * 进入 **配置 (Configuration)** -> **动作 (Actions)** -> **触发器动作 (Trigger actions)** -> 创建或修改动作。 * 在 **操作 (Operations)** 选项卡中,添加发送消息的操作。 * **发送给用户 (Send to Users)**: 选择配置了该媒介的用户或用户组。 * **仅送到 (Send only to)**: 选择刚创建的媒介类型(如 `DingTalk Alert`)。 * 配置好 **条件 (Conditions)** 和 **消息内容 (Message details)**。 6. **重启 Zabbix Server(可选)** * 某些更改(如修改 `AlertScriptsPath`)可能需要重启 Server: ```bash systemctl restart zabbix-server ``` --- **关键点总结:** | 场景 | 脚本执行位置 | 核心配置点 | 配置文件/界面 | | :----------------- | :----------------- | :---------------------------------- | :--------------------- | | **主动监控数据收集** | 被监控主机的 Agent | `UserParameter` (Agent 端) | `zabbix_agentd.conf` + Web 监控项 | | **告警通知** | Zabbix Server 本身 | `AlertScriptsPath` (Server端) + Web 媒介类型 | `zabbix_server.conf` + Web 媒介类型/动作 | **注意事项:** * **权限:** 确保 Zabbix Server 或 Agent 进程用户(通常是 `zabbix`)对脚本脚本依赖的资源有读/执行权限。 * **超时:** 对于执行时间较长的脚本,务必在 Agent (`Timeout`) 和 Server (`Timeout`) 配置文件中增加超时时间[^1]。 * **参数传递:** 在 `UserParameter` 和告警媒介参数中正确使用 `[*]` 和 `$1/$2` 或 `sys.argv[1]/sys.argv[2]` 来传递参数[^1][^2][^5]。 * **测试:** 使用 `zabbix_get` 测试监控项脚本,在命令行手动运行告警脚本(模拟 Zabbix 传递参数)进行充分测试[^3]。 [^1]: 需要在 Agent 和 Server 的配置文件中调整 `Timeout` 参数以支持长时间运行的脚本,并确保 `UserParameter` 中正确使用了 `[*]` 来传递参数。 [^2]: 告警脚本必须放置在 Zabbix Server 配置文件 `zabbix_server.conf` 中定义的 `AlertScriptsPath` 目录下,并在 Web 界面创建对应的脚本媒介类型。 [^3]: 使用 `zabbix_get` 命令在 Server 端主动请求 Agent 端的自定义监控项是验证脚本和 `UserParameter` 配置是否生效的有效方法。 [^4]: 在 Zabbix Web 界面中,需要将包含自定义监控项的主机或模板链接(Link)到目标主机。 [^5]: 告警脚本通常需要处理命令行参数(如告警主题和消息),脚本内部应包含参数校验逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值