☰
Plesk Obsidian 全栈监控实战:CustomApp Plesk 模板(Zabbix 6.0)端口、进程与 Web 可达性检查详解
2026/10/16 5:44:32 网站建设 项目流程

【免费下载链接】community-templates

Zabbix Community Templates repository

项目地址:https://gitcode.com/gh_mirrors/co/community-templates
点击查看免费下载

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).xmlZabbix 5.0
5.4/5.4/template_plesk_obsidian_(active).yaml)template_plesk_obsidian_(active).yamlZabbix 5.4
6.0/6.0/template_plesk_obsidian_(active).yaml)template_plesk_obsidian_(active).yamlZabbix 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 条触发器构成,按数据获取方式分为三层:

  1. TCP 端口存活层:15 个Simple check(SIMPLE 类型)项,由 Zabbix 服务端直接发起 TCP 连接,验证 FTP、SMTP、DNS、HTTP、HTTPS、邮件、数据库及 Plesk 管理端口可达;
  2. 进程存活层: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 等)在运行;
  3. 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]21Xinetd
SMTP service is running (tcp check)net.tcp.service[tcp,,25]25Postfix
DNS service is running (tcp check)net.tcp.service[tcp,,53]53Bind
HTTP service is running (tcp check)net.tcp.service[tcp,,80]80Nginx
POP3 service is running (tcp check)net.tcp.service[tcp,,110]110Dovecot
IMAP service is running (tcp check)net.tcp.service[tcp,,143]143Dovecot
HTTPS service is running (tcp check)net.tcp.service[tcp,,443]443Nginx
SMTPS service is running (tcp check)net.tcp.service[tcp,,465]465Postfix
IMAPS service is running (tcp check)net.tcp.service[tcp,,993]993Dovecot
POP3S service is running (tcp check)net.tcp.service[tcp,,995]995Dovecot
MySQL service is running (tcp check)net.tcp.service[tcp,,3306]3306MySQL
HTTP 7080 service is running (tcp check)net.tcp.service[tcp,,7080]7080Apache
HTTPS 7081 service is running (tcp check)net.tcp.service[tcp,,7081]7081Apache
Plesk service is running (tcp check)net.tcp.service[tcp,,8443]8443Plesk

端口选型体现了对 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)),将原始数值翻译为可读状态:

原始值映射值
0Down
1Up

每个 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 availableplesk_default_80_keyhttp://{HOST.IP}/index.html启用
Plesk default page on 443 is availableplesk_default_443_keyhttps://{HOST.IP}/index.html启用
Plesk default page on 7080 is availableplesk_default_7080_keyhttp://{HOST.IP}:7080/index.html启用
Plesk login on 7081 is availableplesk_login_7081_keyhttps://{HOST.IP}:7081/login_up.php禁用
Plesk login on 8443 is availableplesk_login_8443_keyhttps://{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 processproc.num[dovecot]Dovecot
Number of Fail2ban processproc.num[fail2ban-server]Fail2ban
Number of Apache processproc.num[httpd,apache]Apache
Number of Postfix processproc.num[master]Postfix
Number of MySQL processproc.num[mysqld,mysql]MySQL
Number of Bind processproc.num[named,named]Bind
Number of Nginx processproc.num[nginx,nginx]Nginx
Number of PHP-FPM 5.4 processproc.num[php-fpm,root,,5.4]PHP-FPM 5.4
Number of PHP-FPM 5.5 processproc.num[php-fpm,root,,5.5]PHP-FPM 5.5
Number of PHP-FPM 5.6 processproc.num[php-fpm,root,,5.6]PHP-FPM 5.6
Number of PHP-FPM 7.0 processproc.num[php-fpm,root,,7.0]PHP-FPM 7.0
Number of PHP-FPM 7.1 processproc.num[php-fpm,root,,7.1]PHP-FPM 7.1
Number of PHP-FPM 7.2 processproc.num[php-fpm,root,,7.2]PHP-FPM 7.2
Number of PHP-FPM 7.3 processproc.num[php-fpm,root,,7.3]PHP-FPM 7.3
Number of PHP-FPM 7.4 processproc.num[php-fpm,root,,7.4]PHP-FPM 7.4
Number of PHP-FPM 8.0 processproc.num[php-fpm,root,,8.0]PHP-FPM 8.0
Number of Spamd processproc.num[spamd child,popuser]Spamassassin / Xinetd
Number of SwCollectd processproc.num[sw-collectd]Plesk
Number of SwCpServer processproc.num[sw-cp-serverd]Plesk
Number of PleskWebSocket processproc.num[sw-engine,psaadm]Plesk
Number of SwEngineFpm processproc.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: HIGH

2. 模板级触发(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 仅可作为采集项清单的速览参考。

部署与调优建议

  1. 导入方式:在 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 文件)。模板无宏、无模板链接,导入后无需额外配置依赖。
  2. 前置条件:进程层 21 个项为 Zabbix Agent 主动项,被管主机必须部署 Agent 且服务端允许主动连接;TCP 层与 HTTP 层由 Zabbix 服务端发起,需保证服务端到主机的相应端口网络可达。若服务器位于内网且端口经防火墙严格管控,HTTP/登录页检查可能被拦截,应预先放行或改用被动 Agent 方案自行调整。
  3. 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确认实际安装的版本,将未安装版本对应的采集项与触发器禁用。
  4. 按需启停的检查项:Xinetd/SpamAssassin、Fail2ban、Bind、FTP 等组件并非每台 Plesk 主机都启用(例如邮件或 DNS 托管在别处),应结合systemctl实际启停情况裁剪对应项,避免对未部署组件的进程/端口检查产生无效告警。
  5. 面板端口差异: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

项目地址:https://gitcode.com/gh_mirrors/co/community-templates
点击查看免费下载
上一篇:3步解析Vite模块黑盒:从依赖迷宫到构建提速40%的可视化方案
下一篇:Rust 无限循环与流程控制:深入解析 `loop`、`break`/`continue`、循环标签与循环返回值

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询