【免费下载链接】community-templates
Zabbix Community Templates repository
community-templates(Zabbix Community Templates 社区模板仓库)中的CustomApp Plesk模板提供了一套针对 Plesk Obsidian 控制面板主机的完整健康检查方案:通过 15 个 TCP 端口探测确认 Web/邮件/DNS/数据库服务存活,通过 21 个进程数采集项确认底层服务进程(Nginx、Apache、PHP-FPM、Postfix、Dovecot、MySQL、Plesk 自身守护进程等)在运行,再通过 HTTP 代理抓取 Plesk 默认页与登录页的关键内容片段做应用层可用性验证。读完本文,你将掌握该模板的三层监控架构、全部 41 个采集项与 37 条触发的配置细节,并能在 Zabbix 6.0 中正确导入、裁剪和调优这套监控。
模板定位与文件组织
该模板位于仓库的Applications(应用程序类)模板目录,提供 3 个 Zabbix 版本分支,同一套监控逻辑按 Zabbix 导出版式分发:
| 版本目录 | 导出文件 | 适用 Zabbix 版本 |
|---|---|---|
| 5.0/5.0/template_plesk_obsidian_(active).xml) | template_plesk_obsidian_(active).xml | Zabbix 5.0 |
| 5.4/5.4/template_plesk_obsidian_(active).yaml) | template_plesk_obsidian_(active).yaml | Zabbix 5.4 |
| 6.0/6.0/template_plesk_obsidian_(active).yaml) | template_plesk_obsidian_(active).yaml | Zabbix 6.0 |
6.0 版本的 YAML 导出文件(template_plesk_obsidian_(active).yaml/6.0/template_plesk_obsidian_(active).yaml))头部声明如下:
zabbix_export: version: '6.0' date: '2021-11-21T22:06:50Z' groups: - uuid: a571c0d144b14fd4a87a9d9b2aa9fcd6 name: Templates/Applications templates: - uuid: 118c5f3395ae4f80bfc335b3f9cc5dbe template: 'CustomApp Plesk' name: 'CustomApp Plesk' description: | ## Author samsteve169从文件结构看,该模板归属Templates/Applications模板组,作者为samsteve169(见 YAML 头部description字段,L8-L17/6.0/template_plesk_obsidian_(active).yaml#L8-L17))。README(6.0/README.md/6.0/README.md))同时确认:模板不含宏引用、不含模板链接、不含发现规则(LLD),即它是一个纯静态定义、无需依赖其他模板即可独立导入的监控包。
需要注意:5.0/5.4/6.0 三个版本的 UUID 完全一致(如模板 UUID118c5f3395ae4f80bfc335b3f9cc5dbe、FTP 项 UUIDd4fff025f16044eaad33e91802ea7d57在各版本文件中相同),从文件结构推断这是同一套定义的多次导出版式转换,而非不同功能版本。
三层监控架构总览
整个模板由 41 个采集项、1 个值映射和 37 条触发器构成,按数据获取方式分为三层:
- TCP 端口存活层:15 个
Simple check(SIMPLE 类型)项,由 Zabbix 服务端直接发起 TCP 连接,验证 FTP、SMTP、DNS、HTTP、HTTPS、邮件、数据库及 Plesk 管理端口可达; - 进程存活层:21 个
Zabbix agent (active)(ZABBIX_ACTIVE 类型)项,全部基于proc.num键,由被管主机上的 Zabbix Agent 主动上报进程数量,验证 Nginx、Apache、Postfix、Dovecot、MySQL、Xinetd、Fail2ban、SpamAssassin、PHP-FPM 各版本以及 Plesk 自身守护进程(sw-engine、sw-cp-serverd、sw-collectd 等)在运行; - HTTP 内容可用层:5 个
HTTP agent项,抓取 Plesk 默认欢迎页(80/443/7080 端口)和登录页(7081/8443 端口)的 HTML 内容,供模板级触发器做内容指纹匹配。
三层之间通过标签体系串联:每个采集项都带有Application标签,取值为对应的组件名(Nginx、Apache、Postfix、Dovecot、MySQL、Bind、Plesk、Fail2ban、Xinetd、Spamassassin或PHP-FPM x.x),便于在 Zabbix 前端按组件过滤告警与数据。
TCP 端口存活检查:15 个服务端口全覆盖
15 个 SIMPLE 类型项均使用net.tcp.service[tcp,,<端口>]键,采集频率 1 分钟,并统一挂接值映射Service state。以 YAML 中第一个项(FTP)为例(L23-L39/6.0/template_plesk_obsidian_(active).yaml#L23-L39)):
- uuid: d4fff025f16044eaad33e91802ea7d57 name: 'FTP service is running (tcp check)' type: SIMPLE key: 'net.tcp.service[tcp,,21]' valuemap: name: 'Service state' tags: - tag: Application value: Xinetd triggers: - uuid: 704c106bd42f4cdead9a535940dbe57d expression: 'max(/CustomApp Plesk/net.tcp.service[tcp,,21],#3)=0' name: 'FTP service (tcp check) is down on {HOST.NAME}' priority: HIGH完整端口清单及其归属组件(Application标签)如下:
| 项名称 | 键 | 端口 | 组件标签 |
|---|---|---|---|
| FTP service is running (tcp check) | net.tcp.service[tcp,,21] | 21 | Xinetd |
| SMTP service is running (tcp check) | net.tcp.service[tcp,,25] | 25 | Postfix |
| DNS service is running (tcp check) | net.tcp.service[tcp,,53] | 53 | Bind |
| HTTP service is running (tcp check) | net.tcp.service[tcp,,80] | 80 | Nginx |
| POP3 service is running (tcp check) | net.tcp.service[tcp,,110] | 110 | Dovecot |
| IMAP service is running (tcp check) | net.tcp.service[tcp,,143] | 143 | Dovecot |
| HTTPS service is running (tcp check) | net.tcp.service[tcp,,443] | 443 | Nginx |
| SMTPS service is running (tcp check) | net.tcp.service[tcp,,465] | 465 | Postfix |
| IMAPS service is running (tcp check) | net.tcp.service[tcp,,993] | 993 | Dovecot |
| POP3S service is running (tcp check) | net.tcp.service[tcp,,995] | 995 | Dovecot |
| MySQL service is running (tcp check) | net.tcp.service[tcp,,3306] | 3306 | MySQL |
| HTTP 7080 service is running (tcp check) | net.tcp.service[tcp,,7080] | 7080 | Apache |
| HTTPS 7081 service is running (tcp check) | net.tcp.service[tcp,,7081] | 7081 | Apache |
| Plesk service is running (tcp check) | net.tcp.service[tcp,,8443] | 8443 | Plesk |
端口选型体现了对 Plesk Obsidian 默认架构的理解:80/443 由 Nginx 作为前置反向代理对外提供 Web 服务;7080/7081 是 Apache 内置的辅助监听端口,对应 Plesk 管理控制台(Web 组件)的 HTTP/HTTPS 服务;8443 是 Plesk 主面板端口。邮件侧覆盖 Postfix 的 25/465 与 Dovecot 的 110/143/993/995 全端口组合,另有 Xinetd 托管的 FTP(21)、Bind 的 DNS(53)与 Plesk 数据库 MySQL(3306)。
值映射与端口级触发器
每个 TCP 项绑定值映射Service state(L666-L676/6.0/template_plesk_obsidian_(active).yaml#L666-L676)),将原始数值翻译为可读状态:
| 原始值 | 映射值 |
|---|---|
0 | Down |
1 | Up |
每个 TCP 项都内联挂载一条 HIGH 级别触发器,表达式统一为max(/CustomApp Plesk/net.tcp.service[tcp,,<端口>],#3)=0:取最近 3 个采样值的最大值,只要 3 分钟内出现过一次可达即视为存活,3 次全部失败才告警。这个max(#3)写法起到了对瞬时抖动的容忍作用,避免单次探测失败直接产生 HIGH 告警。触发器名称统一采用{HOST.NAME}主机宏,例如FTP service (tcp check) is down on {HOST.NAME},在多主机组网中可直接定位故障主机。
HTTP 内容可用性检查:默认页与登录页指纹
5 个 HTTP agent 项将监控从"端口通不通"推进到"页面内容对不对"。它们共同的参数配置为:值类型TEXT(文本),关闭趋势存储(trends: '0'),不跟随重定向(follow_redirects: 'NO'),且以retrieve_mode: BOTH同时获取响应体与 HTTP 代码。
| 项名称 | 键 | 抓取 URL | 状态 |
|---|---|---|---|
| Plesk default page on 80 is available | plesk_default_80_key | http://{HOST.IP}/index.html | 启用 |
| Plesk default page on 443 is available | plesk_default_443_key | https://{HOST.IP}/index.html | 启用 |
| Plesk default page on 7080 is available | plesk_default_7080_key | http://{HOST.IP}:7080/index.html | 启用 |
| Plesk login on 7081 is available | plesk_login_7081_key | https://{HOST.IP}:7081/login_up.php | 禁用 |
| Plesk login on 8443 is available | plesk_login_8443_key | https://{HOST.IP}:8443/login_up.php | 启用 |
注意两点实现细节:
- 所有 URL 均使用 Zabbix 内建主机宏
{HOST.IP}而非{HOST.NAME}(如 L268/6.0/template_plesk_obsidian_(active).yaml#L268))。这意味着 HTTP 检查直接打到主机记录的第一 IP 上,规避了 DNS 解析变量,但也要求主机的 IP 地址在 Zabbix 中维护正确;若主机使用域名访问且 IP 变更,需要更新主机记录中的 IP。 login_up.php是 Plesk 面板的登录入口路径。7081 端口的登录检查项(L304-L317/6.0/template_plesk_obsidian_(active).yaml#L304-L317))在导出时即为status: DISABLED状态,推测是因为部分 Plesk 部署将控制台仅暴露于 8443 端口,7081 未必开启——实际使用时应按部署形态自行决定保留哪些项。
进程存活检查:21 个 proc.num 采集项
进程层全部采用 Zabbix Agent 主动上报(type: ZABBIX_ACTIVE),要求被管主机部署 Zabbix Agent 并开启主动发送模式。21 个项的完整清单如下(采集频率均为 1 分钟):
| 项名称 | 键 | 组件标签 |
|---|---|---|
| Number of Dovecot process | proc.num[dovecot] | Dovecot |
| Number of Fail2ban process | proc.num[fail2ban-server] | Fail2ban |
| Number of Apache process | proc.num[httpd,apache] | Apache |
| Number of Postfix process | proc.num[master] | Postfix |
| Number of MySQL process | proc.num[mysqld,mysql] | MySQL |
| Number of Bind process | proc.num[named,named] | Bind |
| Number of Nginx process | proc.num[nginx,nginx] | Nginx |
| Number of PHP-FPM 5.4 process | proc.num[php-fpm,root,,5.4] | PHP-FPM 5.4 |
| Number of PHP-FPM 5.5 process | proc.num[php-fpm,root,,5.5] | PHP-FPM 5.5 |
| Number of PHP-FPM 5.6 process | proc.num[php-fpm,root,,5.6] | PHP-FPM 5.6 |
| Number of PHP-FPM 7.0 process | proc.num[php-fpm,root,,7.0] | PHP-FPM 7.0 |
| Number of PHP-FPM 7.1 process | proc.num[php-fpm,root,,7.1] | PHP-FPM 7.1 |
| Number of PHP-FPM 7.2 process | proc.num[php-fpm,root,,7.2] | PHP-FPM 7.2 |
| Number of PHP-FPM 7.3 process | proc.num[php-fpm,root,,7.3] | PHP-FPM 7.3 |
| Number of PHP-FPM 7.4 process | proc.num[php-fpm,root,,7.4] | PHP-FPM 7.4 |
| Number of PHP-FPM 8.0 process | proc.num[php-fpm,root,,8.0] | PHP-FPM 8.0 |
| Number of Spamd process | proc.num[spamd child,popuser] | Spamassassin / Xinetd |
| Number of SwCollectd process | proc.num[sw-collectd] | Plesk |
| Number of SwCpServer process | proc.num[sw-cp-serverd] | Plesk |
| Number of PleskWebSocket process | proc.num[sw-engine,psaadm] | Plesk |
| Number of SwEngineFpm process | proc.num[sw-engine-fpm,psaadm] | Plesk |
其中几个键的写法值得注意:
proc.num四参数形式:PHP-FPM 系列使用proc.num[<进程名>,<用户>,<命令行包含>,<命令行排除>]的第 4 个参数(命令行匹配串)5.4~8.0来区分不同 PHP 版本的 php-fpm 进程组。Plesk 允许同时安装多个 PHP 版本供不同站点选择,因此逐项监控各版本 FPM 是否存活。- SpamAssassin 的匹配串是
spamd child(L574-L589/6.0/template_plesk_obsidian_(active).yaml#L574-L589)):按spamd child关键字与运行用户popuser匹配,这是 Xinetd 按需拉起 spamd 工作进程的典型命名方式;该采集项同时打了Spamassassin和Xinetd两个 Application 标签,因为它的存活依赖 Xinetd 超级服务器框架。 - Plesk 自身守护进程:
sw-engine(psaadm 用户,Plesk 面板核心引擎/WebSocket)、sw-engine-fpm、sw-cp-serverd(控制面板服务)、sw-collectd(面板侧数据采集)四个进程项对应 Plesk 面板自身的运行时组件,是区别于"只监控 Nginx/PHP"这类通用 Web 模板的关键点。 - Postfix 匹配
master:Postfix 的主进程名为master,通过proc.num[master]判断 MTA 整体是否在运行,比匹配qmgr等子进程更贴近服务级健康。
触发器体系:37 条触发与两级可用性判定
YAML 中共定义了 37 条触发器,全部为 HIGH 级别,分为两类:
1. 采集项内联触发(32 条)
每个 TCP 项和进程项各挂一条max(...,#3)=0形式的停机触发器,名称格式统一为<服务名> service (tcp check/process check) is down on {HOST.NAME}。例如 Dovecot 进程触发器(L341-L346/6.0/template_plesk_obsidian_(active).yaml#L341-L346)):
triggers: - uuid: 063435634e3245119bc544b048b15b75 expression: 'max(/CustomApp Plesk/proc.num[dovecot],#3)=0' name: 'Dovecot service (process check) is down on {HOST.NAME}' priority: HIGH2. 模板级触发(5 条)
模板级触发器组合了 TCP 探测与 HTTP 内容指纹,实现"端口通且内容对"的双重判定,全部位于 YAML 尾部(L677-L703/6.0/template_plesk_obsidian_(active).yaml#L677-L703)):
| 触发器名称 | 表达式逻辑 | 状态 |
|---|---|---|
| Plesk default page on 80 is unavailable on {HOST.NAME} | max(net.tcp.service[tcp,,80],#3)=0 or find(plesk_default_80_key,,"like","<title>Web Server''s Default Page</title>")=0 | 启用 |
| Plesk default page on 443 is unavailable on {HOST.NAME} | 同上,443 端口 | 启用 |
| Plesk default page on 7080 is unavailable on {HOST.NAME} | 同上,7080 端口 | 启用 |
| Plesk login on 7081 is unavailable on {HOST.NAME} | 匹配登录页<meta name="forgery_protection_token" ...片段 | 禁用 |
| Plesk login on 8443 is unavailable on {HOST.NAME} | 匹配登录页<meta name="forgery_protection_token" ...片段 | 启用 |
默认页触发器使用find(...,"like",...)在抓取的 HTML 中模糊匹配 Plesk 出厂默认欢迎页的标题指纹<title>Web Server's Default Page</title>:只要最近 3 次探测端口不可达,或页面中匹配不到该指纹(=0表示 0 次匹配),即判定"默认页不可用"。登录页触发器则匹配 Plesk 登录表单特有的反 CSRF 元标签<meta name="forgery_protection_token" id="forgery_protection_token" content=",以此确认 8443 端口的面板登录界面真正可交互,而不只是 TCP 端口开放。
这里也隐含一条运维提示:当站点上线真实业务内容后,默认欢迎页指纹将不再出现,三条"默认页不可用"触发器会持续告警。合理做法是站点上线后关闭这三条模板级触发器或改写匹配串,转而依赖端口级触发器;模板作者保留默认页检查,正是为了覆盖"Plesk 全新安装、尚未发布站点"这一初始态的健康巡检场景。
README 与 YAML 的差异
6.0/README.md/6.0/README.md) 的Triggers一节写着 "There are no triggers in this template.",与 YAML 中实际存在的 37 条触发器明显不符;README 的Items collected表格(41 个项)则与 YAML 完全一致。因此本文以 YAML 导出文件为权威依据,README 仅可作为采集项清单的速览参考。
部署与调优建议
- 导入方式:在 Zabbix 6.0 前端使用Configuration → Templates → Import导入 6.0/template_plesk_obsidian_(active).yaml/6.0/template_plesk_obsidian_(active).yaml)(5.0/5.4 版本分别使用对应目录下的 XML/YAML 文件)。模板无宏、无模板链接,导入后无需额外配置依赖。
- 前置条件:进程层 21 个项为 Zabbix Agent 主动项,被管主机必须部署 Agent 且服务端允许主动连接;TCP 层与 HTTP 层由 Zabbix 服务端发起,需保证服务端到主机的相应端口网络可达。若服务器位于内网且端口经防火墙严格管控,HTTP/登录页检查可能被拦截,应预先放行或改用被动 Agent 方案自行调整。
- PHP-FPM 多版本告警噪声:模板对 5.4/5.5/5.6/7.0/7.1/7.2/7.3/7.4/8.0 共 9 个版本各配了一条"进程数为 0 即 HIGH 告警"的触发器,且导出时全部启用。Plesk 主机通常只安装 1~2 个 PHP 版本,未安装版本的项会持续上报 0 并产生误告警。导入后应检查
ps -ef | grep php-fpm确认实际安装的版本,将未安装版本对应的采集项与触发器禁用。 - 按需启停的检查项:Xinetd/SpamAssassin、Fail2ban、Bind、FTP 等组件并非每台 Plesk 主机都启用(例如邮件或 DNS 托管在别处),应结合
systemctl实际启停情况裁剪对应项,避免对未部署组件的进程/端口检查产生无效告警。 - 面板端口差异:Plesk 主面板默认在 8443;部分部署会把 Apache 辅助端口 7081 作为面板入口(模板中 7081 的登录项与触发器默认禁用即为这一差异的体现)。导入后按
pleskadmin实际监听端口决定启用 7081 还是 8443 的登录页检查。
小结
CustomApp Plesk模板以"TCP 端口存活 + 进程数监控 + HTTP 内容指纹"三层结构覆盖了 Plesk Obsidian 主机的关键健康面:15 个net.tcp.service项守住 Web、邮件、DNS 与数据库全端口,21 个proc.num项逐一确认 Nginx、Apache、Postfix、Dovecot、MySQL、PHP-FPM 各版本及 Plesk 面板守护进程的进程存活,5 个 HTTP agent 项配合find(...,"like",...)内容匹配把判定深入到默认欢迎页与登录页指纹层面,最终以 37 条 HIGH 触发器(含max(#3)抖动容忍)形成告警闭环。模板定义自包含、无外部依赖,导入 Zabbix 6.0 后按实际安装的组件与 PHP 版本做一轮裁剪,即可获得一套可直接用于生产巡检的 Plesk 主机监控基线。
【免费下载链接】community-templates
Zabbix Community Templates repository
相关推荐
Zabbix 监控 Plesk 主机实战:解析 community-templates 仓库中的 CustomApp Plesk 主动代理模板
Zabbix 监控 Plesk 主机实战:解析 community templates 仓库中的 CustomApp Plesk 主动代理模板 本篇围绕 Zab
Zabbix 监控 Eocortex (Macroscop) 视频监控服务器:community-templates 中 Eocortex 模板(6.0)实战详解
Zabbix 监控 Eocortex Macroscop 视频监控服务器:community templates 中 Eocortex 模板(6.0)实战详解
使用 Zabbix 6.0 模板监控 Oracle Linux 上的 Focco ERP:115 个监控项实战解析
使用 Zabbix 6.0 模板监控 Oracle Linux 上的 Focco ERP:115 个监控项实战解析 本文基于 Zabbix Community
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考