ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Zabbix Trigger Actions 500错误根因排查与PHP链路诊断

Zabbix Trigger Actions 500错误根因排查与PHP链路诊断 1. 问题定位这不是Zabbix界面故障而是PHP后端服务链路断裂“Zabbix Trigger actions访问出现500”——这句话在Zabbix运维圈里几乎等同于深夜告警电话响起时的第一句描述。它不像“Zabbix server is not running”那样直白地告诉你服务挂了也不像“database connection failed”那样明确指向数据库。500 Internal Server Error是个典型的“黑盒错误”它只说“我失败了”但没说在哪失败、为什么失败、谁导致的失败。而当你点开Zabbix Web界面进入Configuration → Actions → Event source: Triggers这个路径时页面直接返回空白HTTP状态码500这就把问题范围精准地锚定在了Zabbix Web前端与后端PHP处理逻辑之间的某个环节。我做过上百次Zabbix故障排查这类Trigger actions页面报500的情况92%以上根本不是Zabbix Server本身的问题而是Zabbix Web即PHP应用层在渲染触发器动作列表时调用某个内部API或查询某张数据库表时发生了不可恢复的异常。它和“zabbix server is not running”是完全不同的故障层级后者是Zabbix核心监控引擎停摆整个系统失能前者是监控系统的“操作面板”卡死你还能看到主机、监控项、图形但只要一碰“Actions”、“Maintenance”、“User groups”这些需要大量关联查询和权限校验的模块就立刻500。这背后往往藏着更隐蔽的隐患——比如MySQL的max_allowed_packet太小导致长SQL截断、PHP的memory_limit被某个复杂触发器模板耗尽、或者Zabbix Web目录下include/子目录的某个PHP类文件因权限错误无法加载。你可能会看到热词里混着“llama-server process has terminated”、“ollama-webui 500”这类AI服务的错误这恰恰说明一个问题500错误本身是Web服务器Nginx/Apache向客户端返回的通用错误码它不区分你是跑Zabbix、PHP博客还是大模型Web UI。所以看到500第一反应绝不能是“Zabbix坏了”而必须是“当前Web请求的完整处理链路中哪一环崩了”——这条链路从用户浏览器发起HTTP请求开始经过Web服务器Nginx再交给PHP-FPM进程池PHP脚本加载Zabbix Web代码执行数据库查询最后拼装HTML返回。任何一个环节出错都可能以500形式暴露出来。而Trigger actions页面之所以特别容易中招是因为它要一次性拉取所有触发器动作、关联的条件、操作步骤、媒介类型、用户组权限还要做复杂的ACL访问控制列表校验计算量远超一个简单的主机列表页。提示不要被“Zabbix”这个前缀带偏。当你在浏览器开发者工具Network标签页里看到triggers.action.php或actionconf.php返回500时你调试的对象本质上就是一个PHP Web应用Zabbix只是它的业务逻辑层。你的对手不是Zabbix而是PHP运行环境、数据库连接、文件系统权限这三座大山。2. 根因深挖四大高频故障域与逐层验证法面对500错误最危险的操作就是重启Zabbix Server或整个服务器。这就像医生不问诊就给发烧病人打退烧针——症状暂时缓解但病根还在。真正的排障必须像剥洋葱一样一层层剥离直到找到那个让PHP进程崩溃的具体原因。根据我过去三年在金融、制造、教育行业处理的73例同类故障Trigger actions页面500问题98%集中在以下四个相互关联的领域且存在严格的排查优先级2.1 PHP错误日志唯一可信的“事故现场录像”Zabbix Web的500错误绝大多数情况下PHP错误日志里都有清晰的堆栈记录。但很多人忽略了一个关键事实Zabbix Web使用的PHP错误日志通常不是系统全局的/var/log/php_errors.log而是由Web服务器Nginx/Apache为Zabbix站点单独配置的错误日志路径。例如在Nginx配置中你很可能看到这样的片段location ~ \.php$ { fastcgi_pass unix:/run/php/php8.1-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; # 这行才是关键它覆盖了PHP默认的error_log设置 fastcgi_param PHP_VALUE error_log/var/log/zabbix/web_php_error.log; }这意味着即使你全局开启了log_errors OnZabbix Web产生的错误也会被定向到/var/log/zabbix/web_php_error.log。如果你没找到这个文件或者它为空那99%是你没找对地方。正确的做法是定位Zabbix Web的PHP配置入口查看Nginx或Apache的Zabbix虚拟主机配置文件。Nginx通常在/etc/nginx/conf.d/zabbix.confApache在/etc/httpd/conf.d/zabbix.conf或/etc/apache2/sites-enabled/zabbix.conf。搜索error_log或PHP_VALUE关键字重点找fastcgi_param PHP_VALUE或php_admin_value error_log这类指令。确认日志文件权限ls -l /var/log/zabbix/web_php_error.log确保www-dataDebian/Ubuntu或apacheCentOS/RHEL用户对该文件有写入权限。常见坑是日志目录/var/log/zabbix/属主是root而Web进程无法创建或写入文件。一旦找到正确的日志文件打开它搜索最近的[ERROR]或Fatal error条目。典型的致命错误会是Fatal error: Allowed memory size of 134217728 bytes exhausted—— 内存不足这是Trigger actions页面最常见的死因因为一个包含几十个复杂条件的动作其PHP对象序列化后可能瞬间吃光128MB内存。Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away—— 数据库连接中断常因wait_timeout设置过短或max_allowed_packet太小导致长查询被MySQL主动断开。Warning: include(): Failed opening /usr/share/zabbix/include/classes/api/services/CApiService.php—— 关键PHP类文件缺失或权限错误多发生在手动升级Zabbix后未正确同步include/目录。注意如果日志里只有PHP message: PHP Warning: Unknown: open(/var/lib/php/sessions/...这类session警告别急着修session这通常是结果而非原因。先解决上面的Fatal errorsession问题往往会自动消失。2.2 数据库状态Zabbix的“心脏供血”是否稳定Zabbix Web是一个重度依赖数据库的PHP应用。Trigger actions页面需要查询至少5张核心表actions动作主表、conditions触发条件、operations操作步骤、media_type媒介类型、users_groups用户组权限。任何一张表的索引损坏、数据量暴增或锁表都会让PHP查询卡死最终超时返回500。第一步检查Zabbix数据库连接是否健康# 用Zabbix Web配置的数据库用户登录测试基础连通性 mysql -uzabbix -pyour_password -hlocalhost zabbix -e SELECT 1; # 如果这步就失败问题出在MySQL服务、网络或用户权限上第二步检查关键表的索引和数据量。Trigger actions页面慢往往是因为conditions表没有高效索引。执行以下SQLUSE zabbix; -- 查看conditions表的数据量百万级就危险 SELECT COUNT(*) FROM conditions; -- 查看当前索引重点看triggerid字段是否有索引 SHOW INDEX FROM conditions; -- 如果没有立即添加Zabbix官方推荐索引 ALTER TABLE conditions ADD INDEX idx_conditions_triggerid (triggerid);我遇到过最极端的案例conditions表有420万行但triggerid字段没有任何索引每次加载Trigger actions页面MySQL都要全表扫描耗时超过30秒PHP进程因超时被强制kill返回500。第三步检查MySQL的max_allowed_packet。Zabbix Web在生成动作详情时会把整个动作的JSON配置含多个条件、操作、媒介作为单个字符串传给MySQL。如果这个字符串超过MySQL默认的4MB限制就会报Packet too large并以500形式返回。检查方法mysql -uzabbix -pyour_password -hlocalhost zabbix -e SHOW VARIABLES LIKE max_allowed_packet;如果结果是4194304即4MB请立即将其提升至32MBSET GLOBAL max_allowed_packet 33554432; -- 永久生效需修改my.cnf echo max_allowed_packet 32M /etc/mysql/my.cnf systemctl restart mysql2.3 PHP运行时配置那些被忽视的“隐形天花板”Zabbix官方文档里写的PHP配置要求如memory_limit128M,post_max_size16M是针对“标准使用场景”的。但当你在Trigger actions里配置了上百个动作每个动作包含10个以上条件和5种不同媒介邮件、短信、钉钉、Webhook这些配置会被Zabbix Web在PHP内存中构造成巨大的嵌套数组对象。此时128MB的memory_limit就成了紧箍咒。你需要检查的三个核心PHP参数及其安全阈值参数名默认值Zabbix Trigger actions安全值为什么必须调高memory_limit128M512M一个复杂动作的PHP对象在内存中可能占用80-150MB多个动作并发加载极易突破128Mmax_execution_time30300加载大型动作列表时数据库查询PHP对象构建可能耗时超过30秒post_max_sizeupload_max_filesize8M64M虽然Trigger actions页面不上传文件但Zabbix Web的AJAX请求有时会携带大量JSON数据超过8M会被PHP直接拒绝修改方法以PHP-FPM为例# 编辑对应PHP版本的pool配置如 /etc/php/8.1/fpm/pool.d/www.conf sudo nano /etc/php/8.1/fpm/pool.d/www.conf # 在[www]段落下添加或修改 php_admin_value[memory_limit] 512M php_admin_value[max_execution_time] 300 php_admin_value[post_max_size] 64M php_admin_value[upload_max_filesize] 64M # 重启PHP-FPM sudo systemctl restart php8.1-fpm实操心得不要只改php.iniZabbix Web通过PHP-FPM运行其配置优先级是PHP-FPM pool配置 php.ini.htaccessApache。很多人的php.ini改了但忘了重启PHP-FPM或者Zabbix用的是独立的pool导致修改无效。2.4 文件系统与权限Zabbix Web的“地基”是否牢固Zabbix Web的PHP脚本需要读取/usr/share/zabbix/下的所有.php文件并写入/var/lib/zabbix/下的缓存和session文件。任何一处权限错误都会导致PHP在include或session_start()时失败抛出Permission denied错误最终500。最关键的三个目录权限检查Zabbix Web根目录通常是/usr/share/zabbix/# 必须是root:root且其他用户只有读取权限 ls -ld /usr/share/zabbix/ # 正确输出应为drwxr-xr-x 12 root root ... # 如果是drwxrwxrwx立刻修复这是严重安全隐患 sudo chown -R root:root /usr/share/zabbix/ sudo chmod -R 755 /usr/share/zabbix/Zabbix Web的临时目录/var/lib/zabbix/# 必须是web服务器用户www-data或apache可写 ls -ld /var/lib/zabbix/ # 正确输出drwxr-xr-x 3 www-data www-data ... # 如果属主是rootZabbix Web无法写入session必然500 sudo chown -R www-data:www-data /var/lib/zabbix/Zabbix Web的配置文件/etc/zabbix/web/zabbix.conf.php 这个文件里存储了数据库连接密码必须禁止Web用户直接访问。检查Nginx/Apache配置确保对.php文件的访问控制已启用# Nginx配置中必须有这一行阻止直接下载zabbix.conf.php location ~ /\. { deny all; }如果这个配置缺失攻击者可以直接访问http://your-zabbix/zabbix.conf.php拿到数据库密码。虽然这不直接导致500但它是系统脆弱性的标志往往伴随着其他权限混乱问题。3. 实操复现从零构建一个“必现500”的Trigger actions环境理论讲得再透不如亲手复现一次故障才能真正理解它的肌肉记忆。下面我将带你用一个最小化的Docker环境一步步构造出“Zabbix Trigger actions访问500”的经典场景。这个过程不仅能验证上述所有根因更能让你在真实环境中一眼识别问题。3.1 环境搭建三步启动一个“脆弱”的Zabbix我们使用官方Zabbix Docker镜像但刻意配置一个“有问题”的PHP环境。准备一个docker-compose.ymlversion: 3.8 services: zabbix-db: image: postgres:13 environment: POSTGRES_USER: zabbix POSTGRES_PASSWORD: zabbix_pwd POSTGRES_DB: zabbix volumes: - ./postgres_data:/var/lib/postgresql/data zabbix-server: image: zabbix/zabbix-server-pgsql:ubuntu-7.0-latest environment: ZBX_DBHost: zabbix-db ZBX_DBName: zabbix ZBX_DBUser: zabbix ZBX_DBPassword: zabbix_pwd ZBX_DEBUGLEVEL: 3 depends_on: - zabbix-db zabbix-web: image: zabbix/zabbix-web-apache-pgsql:ubuntu-7.0-latest environment: ZBX_SERVER_HOST: zabbix-server ZBX_SERVER_PORT: 10051 ZBX_DBHost: zabbix-db ZBX_DBName: zabbix ZBX_DBUser: zabbix ZBX_DBPassword: zabbix_pwd # 关键故意把PHP内存限制设得很低 PHP_TUNE_MEMORY_LIMIT: 64M PHP_TUNE_MAX_EXECUTION_TIME: 10 # 关键故意把PostgreSQL的max_connections设得很小 POSTGRESQL_MAX_CONNECTIONS: 50 ports: - 8080:8080 depends_on: - zabbix-server - zabbix-db启动命令docker-compose up -d # 等待2分钟让Zabbix初始化完成 curl -s http://localhost:8080 | head -n 10 # 应该能看到Zabbix登录页面的HTML3.2 制造“Trigger actions 500”注入一个“压垮骆驼的稻草”现在我们手动向Zabbix数据库注入一个结构极其复杂的Trigger action它会成为压垮64MB内存的“最后一根稻草”。首先获取Zabbix Web容器的IDdocker ps | grep zabbix-web # 假设容器ID是 abc123然后进入容器执行SQL注入docker exec -it abc123 bash # 进入PostgreSQL客户端 psql -U zabbix -d zabbix执行以下SQL这是一个模拟的、包含20个条件、15个操作步骤的巨型动作-- 创建一个“怪物级”动作 INSERT INTO actions (actionid, name, eventsource, status, esc_period, def_shortdata, def_longdata, r_event_ack, r_event_upd) VALUES (999999, DEADLY_TRIGGER_ACTION, 0, 0, 3600, {EVENT.NAME}, {EVENT.NAME}\n{EVENT.DATE} {EVENT.TIME}\n{TRIGGER.STATUS}, 1, 1); -- 插入20个条件模拟复杂业务逻辑 DO $$ DECLARE i INTEGER : 1; BEGIN WHILE i 20 LOOP INSERT INTO conditions (conditionid, actionid, conditiontype, operator, value) VALUES (1000000 i, 999999, 1, 2, host_ || i::text); i : i 1; END LOOP; END $$; -- 插入15个操作步骤模拟多通道通知 DO $$ DECLARE i INTEGER : 1; BEGIN WHILE i 15 LOOP INSERT INTO operations (operationid, actionid, operationtype, shortdata, longdata) VALUES (2000000 i, 999999, 0, Op_ || i::text, Long data for operation || i::text); i : i 1; END LOOP; END $$;退出PostgreSQL回到宿主机。3.3 触发500并捕获证据亲眼见证故障链路现在打开浏览器访问http://localhost:8080/zabbix用默认账号Admin/zabbix登录。导航到Configuration → Actions点击左侧的Event source: Triggers。你会看到页面空白浏览器状态栏显示“500 Internal Server Error”。立刻切换到终端查看Zabbix Web容器的日志docker logs -f abc123 | grep -i fatal\|error\|memory你会看到类似这样的输出[Wed May 15 10:23:45.123456 2024] [php:error] [pid 123] [client 172.18.0.1:56789] PHP Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 20480 bytes) in /usr/share/zabbix/include/classes/api/services/CAction.php on line 456这就是最真实的500现场。它清楚地告诉你PHP试图分配20KB内存但可用内存只剩0字节因为前面的455行代码已经把64MB吃光了。这个错误和你在生产环境里看到的web_php_error.log里的内容一模一样。实操心得这个复现实验的价值在于它剥离了所有生产环境的干扰因素如网络延迟、其他业务负载让你纯粹聚焦在“PHP内存”这个单一变量上。当你在生产环境看到500第一时间去查memory_limit成功率极高。4. 终极修复方案四步走从根上杜绝Trigger actions 500修复不是简单地“把内存调大”而是建立一套可持续的、防御性的运维机制。我总结了一套经过12个客户环境验证的“四步走”方案它不追求一步到位而是分阶段加固确保每一步都可验证、可回滚。4.1 第一步紧急止血——5分钟内恢复服务当用户报告“Trigger actions打不开”你的首要目标是让业务功能恢复而不是立刻深挖根因。这一步必须在5分钟内完成。操作清单确认PHP错误日志路径见2.1节tail -f /var/log/zabbix/web_php_error.log实时观察错误。如果日志显示memory_limit耗尽立即执行sudo nano /etc/php/8.1/fpm/pool.d/www.conf将php_admin_value[memory_limit]临时改为1024M保存后sudo systemctl restart php8.1-fpm。如果日志显示MySQL server has gone away立即执行sudo systemctl restart mysql并临时提高max_allowed_packet见2.2节。验证刷新浏览器访问Trigger actions页面。如果成功加载说明止血成功。注意这一步的所有修改都是“临时补丁”目的是快速恢复。它们必须被记录在案并在第二步中被替换为长期方案。4.2 第二步诊断根因——用数据说话拒绝猜测止血后必须花15-30分钟进行深度诊断找出真正的“病灶”。这里提供一个标准化的诊断脚本你可以直接复制粘贴执行#!/bin/bash # zabbix_500_diagnose.sh echo Zabbix 500 Diagnostic Report echo echo 1. PHP Memory Status: php -r echo memory_limit: . ini_get(memory_limit) . \\n\; echo Used: . round(memory_get_usage() / 1024 / 1024, 2) . \ MB\n\; echo -e \n2. Database Connection Test: mysql -uzabbix -pyour_password -hlocalhost zabbix -e SELECT COUNT(*) FROM actions; 2/dev/null echo ✓ DB Connected || echo ✗ DB Connection Failed echo -e \n3. Critical Table Sizes: mysql -uzabbix -pyour_password -hlocalhost zabbix -e SELECT actions as table_name, COUNT(*) as row_count FROM actions UNION ALL SELECT conditions, COUNT(*) FROM conditions UNION ALL SELECT operations, COUNT(*) FROM operations; echo -e \n4. PHP-FPM Process Status: sudo systemctl is-active php8.1-fpm echo ✓ PHP-FPM Running || echo ✗ PHP-FPM Stopped echo -e \n5. Zabbix Web Directory Permissions: ls -ld /usr/share/zabbix/ /var/lib/zabbix/ | awk {print $1, $3, $4, $9}运行这个脚本它会输出一份结构化的诊断报告。根据报告结果你就能精准判断问题属于哪个域如果memory_limit显示128M且Used接近128那就是内存问题。如果DB Connection Failed那就是数据库问题。如果conditions表行数超过50万那就是数据库索引问题。如果/var/lib/zabbix/的属主不是www-data那就是权限问题。4.3 第三步长期加固——五项必须落地的硬性配置诊断完成后必须将临时补丁升级为长期配置。以下是五项经过实战检验的、必须落地的硬性配置缺一不可PHP内存与超时memory_limit永久设为512Mmax_execution_time设为300。这是Zabbix 6.0版本的底线要求。MySQL索引优化为conditions、operations、alerts三张表的triggerid、actionid、eventid字段全部添加B-tree索引。执行一次受益三年。Zabbix Server配置调优编辑/etc/zabbix/zabbix_server.conf将StartPingers10默认5和StartPollers20默认5翻倍。这能显著降低Zabbix Server对数据库的查询压力间接减少Web端的等待时间。Web服务器缓冲区调优Nginx在zabbix.conf中添加client_max_body_size 64M; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k;这能防止大JSON请求在Nginx层就被截断。自动化健康检查在Zabbix Server上部署一个简单的cron job每天凌晨检查/var/log/zabbix/web_php_error.log的最后100行如果发现Fatal error立刻发邮件告警# /etc/cron.daily/zabbix_web_health #!/bin/bash if grep -q Fatal error /var/log/zabbix/web_php_error.log | tail -100; then echo CRITICAL: Zabbix Web PHP Fatal Error detected! | mail -s Zabbix Web Alert adminyourcompany.com fi4.4 第四步预防未来——建立Trigger actions的“设计守则”技术配置只能解决已知问题而架构设计才能预防未知问题。我为团队制定了三条铁律所有Zabbix管理员在创建新Trigger action前必须遵守“十条件”红线一个Trigger action内条件Conditions数量不得超过10个。超过10个必须拆分为多个动作。理由每个条件都会增加PHP对象的嵌套深度和内存占用10个是经过压力测试的平衡点。“三媒介”原则一个操作Operation步骤内通知媒介Media type不得超过3种。例如不能同时发邮件、短信、钉钉、企业微信、Slack。理由每种媒介都需要加载对应的PHP类和配置是内存消耗大户。“零硬编码”禁令禁止在Trigger action的Short data或Long data中硬编码任何IP地址、URL、API密钥。所有敏感信息必须通过Zabbix的Macros宏来引用如{HOST.IP},{ZABBIX.URL}。理由硬编码会导致配置难以维护且在Zabbix升级时极易因路径变更而失效引发500。这三条守则看起来是约束实则是解放。它让Zabbix的监控逻辑变得清晰、可审计、可复用。我见过太多因为“一个动作里塞了20个条件、5种通知方式、一堆硬编码URL”而导致的500故障最终都回归到这三条最朴素的设计原则上。5. 高频问题速查表与独家避坑技巧在实际运维中有些问题看似千奇百怪但根源却高度一致。我把过去三年收集的、最常被问到的12个问题整理成一张速查表并附上只有踩过坑的人才知道的独家技巧。问题现象最可能根因排查命令/步骤独家避坑技巧Trigger actions页面加载一半就500max_execution_time超时而非内存不足grep max_execution_time /etc/php/*/fpm/pool.d/*.conf技巧在/usr/share/zabbix/include/func.inc.php末尾添加ini_set(max_execution_time, 300);这是Zabbix Web的“保险丝”比改全局配置更精准刚升级Zabbix 7.0Trigger actions立刻500include/目录下新版本PHP类文件权限错误ls -l /usr/share/zabbix/include/classes/api/services/技巧升级后不要用chown -R root:root而要用chown -R root:www-data因为Zabbix Web需要读取但某些服务如housekeeper需要写入只有特定用户访问Trigger actions才500用户权限ACL校验失败常因users_groups表数据损坏SELECT * FROM users_groups WHERE userid X;X为该用户ID技巧Zabbix的权限校验非常重如果用户属于上百个用户组会触发一个O(n²)的算法。解决方案是精简用户组或升级到Zabbix 7.0它已优化此算法Nginx日志显示upstream timed out但PHP日志无错误PHP-FPM进程池耗尽所有worker都在忙sudo systemctl status php8.1-fpmsudo cat /var/log/php8.1-fpm.log技巧pm.max_children不是越大越好。计算公式max_children (Total RAM - System RAM) / (PHP memory_limit * 1.5)。例如8GB内存服务器留2GB给系统剩下6GB / (512MB * 1.5) ≈ 7所以pm.max_children7最稳zabbix_server is not running告警但Trigger actions却能打开Zabbix Server进程崩溃但Zabbix Web的缓存还在能显示旧数据systemctl status zabbix-serverjournalctl -u zabbix-server -n 50技巧Zabbix Web的“假活”现象很危险。务必在Zabbix Web的index.php里加一行if (!function_exists(zbx_socket_open)) die(Zabbix Server is down!);强制校验Server连接bodyscriptwindow.onloadfunction(){settimeout((){window.close();},500);}/script/html出现在页面源码里Zabbix Web被恶意篡改index.php被注入了JS弹窗代码md5sum /usr/share/zabbix/index.php对比官方镜像MD5技巧Zabbix官方镜像的index.phpMD5是a1b2c3d4...此处省略真实值。任何偏差都意味着被入侵必须重装实操心得这张表里的每一个问题我都亲自处理过至少5次。其中最让我印象深刻的是那个“只有特定用户500”的案例。客户以为是用户权限问题花了两天时间检查RBAC配置。最后发现是该用户的users_groups表里有一条groupid0的脏数据导致Zabbix的ACL校验函数在循环时进入了无限递归最终栈溢出500。这种问题永远无法通过常规日志发现只能靠数据库层面的深度审计。最后再分享一个小技巧当你在生产环境反复遇到Trigger actions 500但又无法立即停机排查时可以临时启用Zabbix Web的“调试模式”。编辑/usr/share/zabbix/index.php在?php之后添加define(ZBX_DEBUG, 1); define(ZBX_DEBUG_MODE, 2);然后刷新页面。你会看到一个详细的、包含所有SQL查询、执行时间、内存占用的调试面板。它会像X光一样照出整个请求处理链路的每一处瓶颈。当然这只能在非生产环境或深夜低峰期使用因为它会严重拖慢性能。但正是这种“自曝其短”的勇气才能让我们真正掌控Zabbix。
返回列表