
指标监控可观测性告警运维【免费下载链接】zabbixReal-time monitoring of IT components and services, such as networks, servers, VMs, applications and the cloud.项目地址https://gitcode.com/gh_mirrors/zabbix2/zabbix点击查看免费下载Zabbix 通过内置 Webhook 机制可以与 iTop开源 IT 服务管理平台对接将触发器产生的告警自动转换为 iTop 工单Ticket并在问题恢复或更新时同步到工单的日志Log中形成监控告警 → 事件管理的闭环。本文以仓库中 templates/media/itop/README.md 与 media_itop.yaml 为骨架完整讲解 Webhook 的导入、参数配置、iTop 侧准备与 Zabbix 侧动作配置并结合src/libs/zbxalerter、src/libs/zbxscripts的源码剖析 Webhook 在 Zabbix 内部的实际执行链路。读完本文你将能独立完成 Zabbix 与 iTop 的告警工单集成并具备排查发送失败问题的能力。一、集成概览与前置要求1.1 集成方案概述该集成方案完全基于 Zabbix 的Webhook 媒体类型Media Type特性实现不依赖任何外部插件或脚本服务。其工作模式为Zabbix 触发告警动作Action时将{ALERT.MESSAGE}、{ALERT.SUBJECT}、{EVENT.*}等宏展开后的内容作为 JSON 参数传入 Webhook 脚本Webhook 脚本通过 iTop 的 REST APIwebservices/rest.phpAPI 版本 1.3调用core/create操作创建工单或调用core/update操作向已存在工单的日志区private_log/public_log追加更新内容创建工单成功后脚本通过结果标签Tags回传 iTop 工单 ID、友好名称friendlyname与跳转链接使 Zabbix 前端可在问题事件菜单中直接打开对应 iTop 工单。重要限制恢复Recovery与更新Update操作仅支持触发器Trigger类型事件。这一限制不仅在 README 中声明也在 Webhook 脚本中通过运行时校验强制执行见下文脚本工作原理一节。1.2 版本要求Zabbix 版本8.0 及以上。媒体类型导出文件 media_itop.yaml 头部声明zabbix_export: version: 8.0低于该版本的 Zabbix 无法正确导入。二、Webhook 参数详解导入 media_itop.yaml 后媒体类型中包含两类参数可配置参数Configurable parameters与内部参数Internal parameters。2.1 可配置参数可配置参数用于按实际环境调整 Webhook 行为导入后需将占位符替换为真实值参数名默认值说明itop_api_version1.3iTop REST API 版本脚本会将其拼入请求 URL 的version参数itop_classUserRequest创建工单时使用的 iTop 类名如UserRequest用户请求或Problem问题itop_commentCreated by Zabbix action {ACTION.NAME}随工单创建请求提交到工单历史的注释可包含 Zabbix 宏itop_logprivate_log工单中用于记录 Zabbix 问题更新的日志区类型必须为private_log或public_log对应 iTop 的私有日志/公共日志脚本会校验取值itop_organization_idPLACE ORGANIZATION ID工单归属组织Organization的 ID必填itop_passwordPLACE PASSWORD OR TOKENiTop API 用户的密码或令牌必填itop_urlPLACE YOUR ITOP URLiTop 实例的实际 URL必填itop_userPLACE LOGINiTop API 用户登录名必填tls_verify{$HTTP.TLS.VERIFY:iTop}HTTP 请求的 TLS 证书校验策略none表示禁用校验peer表示校验证书链与有效期full表示完全校验。任何其他取值都按full处理。若要仅对本媒体类型覆盖该设置可定义上下文为 iTop 的全局宏例如{$HTTP.TLS.VERIFY:iTop}关于tls_verify的取值语义可直接对照 media_itop.yaml 中脚本的CTlsConfig构造函数脚本会将原始值trim().toLowerCase()后与[none, peer, full]比对不在列表中的值一律回退为full随后映射为两条底层选项——SSLVerifyPeer: (raw_value peer || raw_value full)与SSLVerifyHost: (raw_value full)。也就是说none不启用 TLS 校验允许使用http://地址peer校验对端证书链及有效期但不校验主机名full在peer基础上追加主机名校验。同时脚本提供了checkURL()保护逻辑当 TLS 校验启用非none而 URL 不是https://开头时会直接抛出异常提示改用 HTTPS 地址或将{$HTTP.TLS.VERIFY}设为none避免证书校验形同虚设。2.2 内部参数内部参数保留给预定义宏使用不建议修改参数名值说明alert_message{ALERT.MESSAGE}动作配置中默认消息的值alert_subject{ALERT.SUBJECT}动作配置中默认主题的值event_recovery_value{EVENT.RECOVERY.VALUE}恢复事件的数值event_source{EVENT.SOURCE}事件来源的数值取值0 - 触发器1 - 发现2 - 自动注册3 - 内部4 - 服务event_update_status{EVENT.UPDATE.STATUS}问题更新状态的数值0 - Webhook 因问题/恢复事件被调用1 - 更新操作event_value{EVENT.VALUE}触发动作的事件数值1 为问题0 为恢复itop_id{EVENT.TAGS.__zbx_itop_id}由创建工单时写入的事件标签回传的 iTop 工单 ID供后续更新/恢复操作定位工单从源码结构看内部参数是脚本判断创建 / 更新 / 恢复分支的关键输入脚本会检查event_source是否在 0–3 范围内检查event_value对 source 为 0 或 3 时必须为 0 或 1检查event_update_status对 source 为 0 时必须为 0 或 1并强制非触发器事件不允许恢复操作Recovery operations are supported only for trigger-based actions.。2.3 HTTP 代理支持每个 Webhook 均支持 HTTP 代理。如需启用在媒体类型参数中新增一个名为http_proxy的参数将其值设为代理 URL 即可。脚本中Itop.setProxy(params.HTTPProxy)会把该值传给底层HttpRequest.setProxy()之后所有请求都会经代理转发。三、iTop 侧服务准备Service setup在配置 Zabbix 之前需要先在 iTop 中完成两项准备创建 API 用户创建具有REST Services User配置文件的用户或复用现有用户并确保该用户在目标工单模块中具备创建工单ticket的权限。获取组织 ID进入数据管理Data administration 目录Catalog 组织Organizations打开目标组织的资料页从浏览器地址栏 URL 中获取组织 ID。典型 URL 形如itop_url/pages/UI.php?operationdetailsclassOrganizationid1c[menu]Organization其中id1即组织 ID将其填入媒体类型的itop_organization_id参数。四、Zabbix 配置步骤4.1 导入媒体类型并填写参数进入管理Administration 媒体类型Media types导入仓库中的 media_itop.yaml。打开新建的iTop媒体类型将所有PLACEHOLDERS替换为实际值。以下参数为必填itop_url— iTop 实例的实际 URLitop_user— iTop 用户登录名itop_password— 用户密码itop_organization_id— 组织的 IDitop_class— 从 Zabbix 通知创建工单时使用的类名例如UserRequest或Problemitop_log— 工单中用于记录 Zabbix 问题更新的日志区类型必须为Privateprivate_log或Publicpublic_logitop_comment— 写入工单历史的注释。导入后的媒体类型默认状态为DISABLED已禁用见 media_itop.yaml 中status: DISABLED完成参数配置后需记得启用。4.2 创建 Zabbix 用户并添加媒体创建或复用一个Zabbix 用户在其媒体Media中添加iTop媒体类型。注意虽然 iTop Webhook 不使用发送到Send to字段但该字段不能为空为满足前端校验要求可填入任意字符。确保该用户对所有需要将问题通知转换为 iTop 工单的主机都具有访问权限否则这些主机产生的告警不会触发发送。4.3 创建动作Action在告警动作Actions中配置触发器动作将 iTop 媒体类型加入通知收件人即 4.2 创建的用户。动作的默认主题与默认消息会分别映射为{ALERT.SUBJECT}与{ALERT.MESSAGE}作为工单的标题title与描述description内容。媒体类型自带针对各类事件源的消息模板见 media_itop.yaml 的message_templates段覆盖触发器的问题/恢复/更新、发现Discovery、自动注册Autoregistration、内部事件Internal以及服务Service事件导入后即可作为动作消息的默认内容使用。五、Webhook 在 Zabbix 内部的执行链路源码级解析5.1 从动作到脚本执行Webhook 媒体类型在 Zabbix 内部被当作一种脚本型告警处理。从 src/libs/zbxalerter/alerter.c 的alerter_process_webhook()可以看出完整链路告警数据经 IPC 消息传给 alerter 进程对应zbx_alerter_deserialize_webhook()序列化/反序列化实现在 src/libs/zbxalerter/alerter_protocol.c初始化嵌入式脚本引擎zbx_es_init并注入代理/来源 IP 等环境信息zbx_es_init_env设置脚本执行超时zbx_es_set_timeout开启调试模式可选调用zbx_es_execute()执行媒体类型携带的脚本传入脚本二进制与 JSON 参数执行结果含调试信息通过alerter_send_result()回传给告警处理流程。可见 Webhook 脚本由 Zabbix 内置的嵌入式脚本引擎执行而非系统 Shell。5.2 参数打包宏展开后如何传给脚本媒体类型的参数在发送前会被收集并打包为 JSON 字符串。核心实现在 src/libs/zbxscripts/scripts.c 的zbx_webhook_params_pack_json()该函数遍历参数名-值对逐一写入 JSON 对象zbx_json_addstring。也就是说动作配置中的{ALERT.MESSAGE}、{ALERT.SUBJECT}、{EVENT.SOURCE}等宏会先被展开为实际文本再与媒体类型参数一起组成 JSON作为脚本入口value传入。脚本入口部分media_itop.yaml 的script段正是JSON.parse(value)取出全部参数凡是键以itop_开头的参数会被剥离前缀后归入itop_params供请求构造使用alert_subject、summary、event_recovery_value、event_source、event_value、action_name等关键参数若为空则直接抛出Parameter ... cant be empty.。5.3 脚本分支逻辑创建 / 恢复 / 更新脚本主体定义了一个Itop对象其核心行为可归纳为三条分支对应 iTop 工单生命周期创建工单core/create发生在两类场景——非触发器事件首次上报或触发器问题事件且尚无关联工单itop_id仍为未替换的{EVENT.TAGS.__zbx_itop_id}字面值时。setCreatePayload()会将alert_subject作为工单标题title、alert_message作为描述description并对描述做 HTML 转义→lt;、→gt;及换行转换\r\n|\r|\n→br。创建成功后脚本通过result.tags.__zbx_itop_id、result.tags.__zbx_itop_key、result.tags.__zbx_itop_link三个标签回传工单 ID、友好名称与详情页链接。更新工单core/update当问题已关联工单itop_id已替换为真实 ID时setUpdatePayload()使用add_item向private_log或public_log日志区追加一条文本消息内容为主题 换行 消息体实现问题更新同步到工单日志。恢复Recovery恢复事件时同样走core/update分支向工单日志追加恢复信息。5.4 请求构造与错误处理认证脚本使用 HTTP Basic 认证Authorization: Basic base64(user:password)并设置Content-Type: multipart/form-dataURL 拼接itop_url末尾若不以/结尾则自动补全随后追加webservices/rest.php?versionapi_version最终请求为POST urljson_dataJSON 载荷响应校验脚本解析 iTop 返回的 JSON依次检查HTTP 状态码必须落在 200–299iTop 业务码code必须为 0否则抛出带状态码 / iTop code / message 的错误并提示查阅调试日志Zabbix.log(4, ...)记录请求与响应全文调试媒体类型开启调试debug模式时请求 URL 与响应内容会以日志级别 4 记录脚本中以[ iTop Webhook ]为前缀错误信息以级别 3 记录这是排查工单创建失败最直接的线索。5.5 事件菜单与工单跳转媒体类型还启用了两项与问题事件菜单相关的能力见 media_itop.yaml 尾部process_tags: YES允许脚本向事件写入标签__zbx_itop_id、__zbx_itop_key、__zbx_itop_linkshow_event_menu: YESevent_menu_url/event_menu_name在 Zabbix 前端的告警事件菜单中增加一条iTop: {EVENT.TAGS.__zbx_itop_key}菜单项点击即可跳转到对应的 iTop 工单详情页。从源码结构可以推断创建工单时写入的__zbx_itop_id标签会持久化到事件上后续更新/恢复事件即可通过{EVENT.TAGS.__zbx_itop_id}定位到同一工单形成闭环。六、常见问题与排错建议工单创建失败报Request failed with iTop code ...多为认证信息错误itop_user/itop_password、组织 ID 不正确或 API 用户权限不足可在媒体类型上开启调试后查看[ iTop Webhook ]前缀的日志。报Failed to parse response received from iTopiTop 返回了非 JSON 内容通常是 URL 配置错误如缺少webservices路径前缀或代理干预。报TLS certificate verification is enabled ... but the URL uses plain HTTPtls_verify未设为none而itop_url使用了http://按脚本的checkURL()逻辑会直接拒绝执行。报Recovery operations are supported only for trigger-based actions恢复操作只支持触发器动作请勿为发现/自动注册/内部/服务事件配置恢复动作。报Incorrect iTop ticket ID givenitop_id未替换为有效工单 ID仍为宏字面值或为空即事件标签中不存在__zbx_itop_id无法执行更新/恢复。告警未发出请检查媒体类型是否已启用导入后默认为 DISABLED、动作收件用户是否对相关主机有访问权限以及用户媒体中的发送到字段是否非空。七、延伸阅读Webhook 执行引擎与告警处理src/libs/zbxalerter/alerter.cWebhook 参数打包为 JSONsrc/libs/zbxscripts/scripts.cWebhook IPC 序列化协议src/libs/zbxalerter/alerter_protocol.c完整媒体类型定义含脚本源码与全部消息模板templates/media/itop/media_itop.yaml若在使用该媒体类型时发现问题可向 Zabbix 官方支持系统提交工单或在 Zabbix 官方论坛的 Suggestions and Feedback 版块反馈讨论。赞分享指标监控可观测性告警运维【免费下载链接】zabbixReal-time monitoring of IT components and services, such as networks, servers, VMs, applications and the cloud.项目地址https://gitcode.com/gh_mirrors/zabbix2/zabbix点击查看免费下载相关推荐使用 Zabbix Webhook 将告警接入 Rocket.Chat媒体类型配置与源码级原理解析使用 Zabbix Webhook 将告警接入 Rocket.Chat媒体类型配置与源码级原理解析 本篇技术指南以 Zabbix 8.0 仓库自带的 Rock指标监控可观测性告警运维Zabbix 与 Jira 集成实战Webhook 媒体类型配置与源码级原理解析Zabbix 与 Jira 集成实战Webhook 媒体类型配置与源码级原理解析 本指南以当前 Zabbix 仓库内置的 Jira 媒体类型模板 templ指标监控可观测性告警运维深入解析 Meshery Edge Network Relationship基于 Catalog 教学设计的组件网络关系建模指南深入解析 Meshery Edge Network Relationship基于 Catalog 教学设计的组件网络关系建模指南 本篇技术指南围绕 Meshe指标监控可观测性告警运维上一篇Roundup让 GitHub Copilot CLI 学会你的写作风格按需自动生成状态简报下一篇Label Studio Enterprise 下线 MinIO 迁移指南从 MinIO 到持久化存储的完整迁移方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考