[ZBX-26691] Dashboards blank after upgrade from 7.2.10 -> 7.4.0 Created: 2025 Jul 09 Updated: 2025 Oct 02 Resolved: 2025 Sep 02 |
|
| Status: | Closed |
| Project: | ZABBIX BUGS AND ISSUES |
| Component/s: | Frontend (F) |
| Affects Version/s: | 7.4.0 |
| Fix Version/s: | 7.4.3rc1, 8.0.0alpha1 |
| Type: | Problem report | Priority: | Trivial |
| Reporter: | Sean Syth | Assignee: | Andrejs Verza |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | None | ||
| Remaining Estimate: | Not Specified | ||
| Time Spent: | 11.5h | ||
| Original Estimate: | Not Specified | ||
| Environment: |
Ubuntu 24.04, Docker Compose, zabbix-web-nginx-mysql:ubuntu-7.4-latest image |
||
| Attachments: |
|
| Team: | |
| Sprint: | S25-W34/35 |
| Story Points: | 1 |
| Description |
|
Steps to reproduce: After upgrading from Zabbix 7.2.10 to 7.4 the dashboards page is no longer viewable. Upgrade procedure followed this wiki https://www.zabbix.com/documentation/current/en/manual/installation/upgrade/containers Result: From the Browser Console you can see these errors
Uncaught ReferenceError: timeControl is not defined
at Object.init (zabbix.php?action=dashboard.view:141:4)
at HTMLDocument.<anonymous> (zabbix.php:725:7)
at mightThrow (jsLoader.php?lang=en_GB&ver=7.4.0&showGuiMessaging=1:4018:29)
at process (jsLoader.php?lang=en_GB&ver=7.4.0&showGuiMessaging=1:4086:12)
jsLoader.php:1 Failed to load resource: the server responded with a status of 404 (Not Found) Looks like this has been an issue for others in previous versions, but I have not seen a fix. |
| Comments |
| Comment by Andrejs Verza [ 2025 Jul 10 ] | ||
|
Hi, seansyth. Please try restarting the web-server (and the related components, if any). The error is most likely related to file caching on the server. If this helps, we'll need to update the upgrade documentation. | ||
| Comment by Sean Syth [ 2025 Jul 10 ] | ||
|
Hey averza, I have tried restarting the containers as well as the VM's a few times without luck. I also tried clearing the cache within the container manually, and that did not help either. Are there any other specific spots for this? I am also not finding any useful logs from the container itself or within the container. I have also included the yaml for the zabbix-web container
zabbix-web:
image: zabbix/zabbix-web-nginx-mysql:ubuntu-7.4-latest
container_name: zabbix-web
restart: unless-stopped
depends_on:
- zabbix-server
environment:
DB_SERVER_HOST: mysql
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
ZBX_SERVER_HOST: "zabbix-server"
ZBX_DEBUGLEVEL: 5
ZBX_MEMORYLIMIT: 256M
ZBX_MAXEXECUTIONTIME: 600
ZBX_POSTMAXSIZE: 32M
PHP_TZ: ${PHP_TZ}
ports:
- "${ZABBIX_FRONTEND_PORT}:8080"
Thank you! | ||
| Comment by Alexey Pustovalov [ 2025 Jul 11 ] | ||
|
Hello! Do you have any loadbalancers between frontend and end-user? Please share frontend container's log as file with at least one attempt of Dashboard reload. Also please share from container output of the following command: ls -lah /usr/share/zabbix/ | grep js | ||
| Comment by Sean Syth [ 2025 Jul 11 ] | ||
|
Hey Alexey, We do not have any loadbalancers running at the moment, Here is the container log after a dashboard reload [11/Jul/2025:14:18:28 +0000] "GET /zabbix.php?action=dashboard.view HTTP/1.1" 200 12925 "https://login.microsoftonline.us/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" - - [11/Jul/2025:14:18:28 +0000] "GET /jsLoader.php?lang=en_GB&ver=7.4.0&showGuiMessaging=1 HTTP/1.1" 304 0 "https://zabbix.company.com/zabbix.php?action=dashboard.view" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" and here is the output of that command zabbix@acae780f285b:/usr/share/zabbix$ ls -lah /usr/share/zabbix/ | grep js -rw-r--r-- 1 root root 2.2K Jul 8 05:45 api_jsonrpc.php -rw-r--r-- 1 root root 401 Jul 8 05:45 composer.json drwxr-xr-x 6 root root 4.0K Jul 8 05:45 js -rw-r--r-- 1 root root 27K Jul 8 05:45 jsLoader.php -rw-r--r-- 1 root root 30K Jul 8 05:45 jsrpc.php | ||
| Comment by Alexey Pustovalov [ 2025 Jul 11 ] | ||
|
Please share "inspect" output for frontend container. According to the log message, jsLoader.php is found and not changed. | ||
| Comment by Sean Syth [ 2025 Jul 11 ] | ||
|
Here is the inspect output
{ "Id": "e6560e24b31c8935b632a1c1a4bece114e5798936e64fede6b8ce6a187f140d1", "Created": "2025-07-11T14:34:31.146284994Z", "Path": "docker-entrypoint.sh", "Args": [], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 66713, "ExitCode": 0, "Error": "", "StartedAt": "2025-07-11T14:34:31.464043949Z", "FinishedAt": "0001-01-01T00:00:00Z", "Health": { "Status": "healthy", "FailingStreak": 0, "Log": [ { "Start": "2025-07-11T16:39:20.715492811Z", "End": "2025-07-11T16:39:20.760922255Z", "ExitCode": 0, "Output": " % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n\r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\r100 4 0 4 0 0 7079 0 --:--:-- --:--:-- --:--:-- 4000\npong" }, { "Start": "2025-07-11T16:40:50.762346324Z", "End": "2025-07-11T16:40:50.807260433Z", "ExitCode": 0, "Output": " % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n\r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\r100 4 0 4 0 0 6884 0 --:--:-- --:--:-- --:--:-- 4000\npong" }, { "Start": "2025-07-11T16:42:20.807913256Z", "End": "2025-07-11T16:42:20.86012202Z", "ExitCode": 0, "Output": " % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n\r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\r100 4 0 4 0 0 5502 0 --:--:-- --:--:-- --:--:-- 4000\npong" }, { "Start": "2025-07-11T16:43:50.860765592Z", "End": "2025-07-11T16:43:50.909450015Z", "ExitCode": 0, "Output": " % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n\r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\r100 4 0 4 0 0 7233 0 --:--:-- --:--:-- --:--:-- 4000\npong" }, { "Start": "2025-07-11T16:45:20.910549935Z", "End": "2025-07-11T16:45:20.966271712Z", "ExitCode": 0, "Output": " % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n\r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\r100 4 0 4 0 0 6163 0 --:--:-- --:--:-- --:--:-- 4000\npong" } ] } }, "Image": "sha256:6a837c8ab55bed6b6597f0d503c0ae86c3f8ca081b4764124bb70fa1d48632a2", "ResolvConfPath": "/data/docker/containers/e6560e24b31c8935b632a1c1a4bece114e5798936e64fede6b8ce6a187f140d1/resolv.conf", "HostnamePath": "/data/docker/containers/e6560e24b31c8935b632a1c1a4bece114e5798936e64fede6b8ce6a187f140d1/hostname", "HostsPath": "/data/docker/containers/e6560e24b31c8935b632a1c1a4bece114e5798936e64fede6b8ce6a187f140d1/hosts", "LogPath": "/data/docker/containers/e6560e24b31c8935b632a1c1a4bece114e5798936e64fede6b8ce6a187f140d1/e6560e24b31c8935b632a1c1a4bece114e5798936e64fede6b8ce6a187f140d1-json.log", "Name": "/zabbix-web", "RestartCount": 0, "Driver": "overlay2", "Platform": "linux", "MountLabel": "", "ProcessLabel": "", "AppArmorProfile": "docker-default", "ExecIDs": null, "HostConfig": { "Binds": [ "/data/zabbix/certs:/etc/zabbix/web/certs:ro" ], "ContainerIDFile": "", "LogConfig": { "Type": "json-file", "Config": {} }, "NetworkMode": "docker_default", "PortBindings": { "8080/tcp": [ { "HostIp": "", "HostPort": "8080" } ] }, "RestartPolicy": { "Name": "unless-stopped", "MaximumRetryCount": 0 }, "AutoRemove": false, "VolumeDriver": "", "VolumesFrom": null, "ConsoleSize": [ 0, 0 ], "CapAdd": null, "CapDrop": null, "CgroupnsMode": "private", "Dns": null, "DnsOptions": null, "DnsSearch": null, "ExtraHosts": [], "GroupAdd": null, "IpcMode": "private", "Cgroup": "", "Links": null, "OomScoreAdj": 0, "PidMode": "", "Privileged": false, "PublishAllPorts": false, "ReadonlyRootfs": false, "SecurityOpt": null, "UTSMode": "", "UsernsMode": "", "ShmSize": 67108864, "Runtime": "runc", "Isolation": "", "CpuShares": 0, "Memory": 0, "NanoCpus": 0, "CgroupParent": "", "BlkioWeight": 0, "BlkioWeightDevice": null, "BlkioDeviceReadBps": null, "BlkioDeviceWriteBps": null, "BlkioDeviceReadIOps": null, "BlkioDeviceWriteIOps": null, "CpuPeriod": 0, "CpuQuota": 0, "CpuRealtimePeriod": 0, "CpuRealtimeRuntime": 0, "CpusetCpus": "", "CpusetMems": "", "Devices": null, "DeviceCgroupRules": null, "DeviceRequests": null, "MemoryReservation": 0, "MemorySwap": 0, "MemorySwappiness": null, "OomKillDisable": null, "PidsLimit": null, "Ulimits": null, "CpuCount": 0, "CpuPercent": 0, "IOMaximumIOps": 0, "IOMaximumBandwidth": 0, "MaskedPaths": [ "/proc/asound", "/proc/acpi", "/proc/interrupts", "/proc/kcore", "/proc/keys", "/proc/latency_stats", "/proc/timer_list", "/proc/timer_stats", "/proc/sched_debug", "/proc/scsi", "/sys/firmware", "/sys/devices/virtual/powercap" ], "ReadonlyPaths": [ "/proc/bus", "/proc/fs", "/proc/irq", "/proc/sys", "/proc/sysrq-trigger" ] }, "GraphDriver": { "Data": { "ID": "e6560e24b31c8935b632a1c1a4bece114e5798936e64fede6b8ce6a187f140d1", "LowerDir": "/data/docker/overlay2/e0f8d4d1226dddc089b72138e61675d4af2e1321aa44a634621bf8af7fea53d2-init/diff:/data/docker/overlay2/26e33695f258701eeeb013e67f233c04ea8fe66e00f80b2f5bfdecd3512ddeb0/diff:/data/docker/overlay2/2bd28ed0bbfcce7d879dee33feee693b875fd41cb65e90ab914fd3b4e92ffb8e/diff:/data/docker/overlay2/3e8b356f4351511a289976ca1cf0d505953f5d2306285c5c9bf2f307cc378095/diff:/data/docker/overlay2/69e4133c3e18d5b2c9962860530be32aac83acf38ef950315ae9f745ce62ce6b/diff:/data/docker/overlay2/fa913423968ffa315eb0c92a9181f727f4be14c60011166af645982d1e4bab3b/diff:/data/docker/overlay2/5902e8ee31134d2613eb23e61bb1f84484119165f5dc9c7daa984f1950cbc81b/diff", "MergedDir": "/data/docker/overlay2/e0f8d4d1226dddc089b72138e61675d4af2e1321aa44a634621bf8af7fea53d2/merged", "UpperDir": "/data/docker/overlay2/e0f8d4d1226dddc089b72138e61675d4af2e1321aa44a634621bf8af7fea53d2/diff", "WorkDir": "/data/docker/overlay2/e0f8d4d1226dddc089b72138e61675d4af2e1321aa44a634621bf8af7fea53d2/work" }, "Name": "overlay2" }, "Mounts": [ { "Type": "bind", "Source": "/data/zabbix/certs", "Destination": "/etc/zabbix/web/certs", "Mode": "ro", "RW": false, "Propagation": "rprivate" } ], "Config": { "Hostname": "e6560e24b31c", "Domainname": "", "User": "1997", "AttachStdin": false, "AttachStdout": true, "AttachStderr": true, "ExposedPorts": { "8080/tcp": {}, "8443/tcp": {} }, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "ZBX_POSTMAXSIZE=32M", "ZBX_SSO_SETTINGS={'baseurl': 'https://zabbix.company.com', 'use_proxy_headers': true, 'security':{'requestedAuthnContext': false}}", "MYSQL_DATABASE=zabbix", "MYSQL_PASSWORD=BW@W3Tx#63l7", "MYSQL_USER=zabbix", "DB_SERVER_HOST=mysql", "PHP_TZ=UTC", "ZBX_DEBUGLEVEL=5", "ZBX_MEMORYLIMIT=256M", "ZBX_SERVER_HOST=zabbix-server", "ZBX_SSO_IDP_CERT=/etc/zabbix/web/certs/idp.crt", "ZBX_MAXEXECUTIONTIME=600", "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "TERM=xterm", "ZBX_VERSION=7.4.0", "ZBX_SOURCES=https://git.zabbix.com/scm/zbx/zabbix.git", "ZABBIX_CONF_DIR=/etc/zabbix", "ZABBIX_USER_HOME_DIR=/var/lib/zabbix", "ZABBIX_WWW_ROOT=/usr/share/zabbix" ], "Cmd": null, "Healthcheck": { "Test": [ "CMD-SHELL", "curl -f http://localhost:8080/ping || exit 1" ], "Interval": 90000000000, "Timeout": 3000000000, "StartPeriod": 40000000000, "StartInterval": 5000000000, "Retries": 3 }, "Image": "zabbix/zabbix-web-nginx-mysql:ubuntu-7.4-latest", "Volumes": null, "WorkingDir": "/usr/share/zabbix", "Entrypoint": [ "docker-entrypoint.sh" ], "OnBuild": null, "Labels": { "com.docker.compose.config-hash": "ef77067266bca9db663ce7d90612da58defb928912833393047877b4cfc7e76b", "com.docker.compose.container-number": "1", "com.docker.compose.depends_on": "zabbix-server:service_started:false", "com.docker.compose.image": "sha256:6a837c8ab55bed6b6597f0d503c0ae86c3f8ca081b4764124bb70fa1d48632a2", "com.docker.compose.oneoff": "False", "com.docker.compose.project": "docker", "com.docker.compose.project.config_files": "/data/docker/docker-compose.yml", "com.docker.compose.project.working_dir": "/data/docker", "com.docker.compose.service": "zabbix-web", "com.docker.compose.version": "2.38.1", "org.opencontainers.image.authors": "Alexey Pustovalov <[email protected]>", "org.opencontainers.image.created": "2025-07-08T09:39:21.598Z", "org.opencontainers.image.description": "Zabbix web-interface based on Nginx web server with MySQL database support", "org.opencontainers.image.documentation": "https://www.zabbix.com/documentation/7.4/manual/installation/containers", "org.opencontainers.image.licenses": "AGPL v3.0", "org.opencontainers.image.ref.name": "ubuntu", "org.opencontainers.image.revision": "e983d96d30456ee2443b2a593babaad9cd2c7c97", "org.opencontainers.image.source": "https://git.zabbix.com/scm/zbx/zabbix.git", "org.opencontainers.image.title": "Zabbix web-interface (Nginx, MySQL)", "org.opencontainers.image.url": "https://zabbix.com/", "org.opencontainers.image.vendor": "Zabbix SIA", "org.opencontainers.image.version": "7.4.0" }, "StopSignal": "SIGTERM" }, "NetworkSettings": { "Bridge": "", "SandboxID": "3f98e3c7f2d68676e712027c75cb0adbf816599c56c0c248928b72c65b5af658", "SandboxKey": "/var/run/docker/netns/3f98e3c7f2d6", "Ports": { "8080/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "8080" }, { "HostIp": "::", "HostPort": "8080" } ], "8443/tcp": null }, "HairpinMode": false, "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "SecondaryIPAddresses": null, "SecondaryIPv6Addresses": null, "EndpointID": "", "Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAddress": "", "IPPrefixLen": 0, "IPv6Gateway": "", "MacAddress": "", "Networks": { "docker_default": { "IPAMConfig": null, "Links": null, "Aliases": [ "zabbix-web", "zabbix-web" ], "MacAddress": "96:f0:a5:b7:90:94", "DriverOpts": null, "GwPriority": 0, "NetworkID": "cc541be60d6d269fda6b8c493ecc226a23f44b2fb7d8eab501b26a68d6d2b58b", "EndpointID": "3e872a26594f1f5f7c9435207793523e39da5808448a9e54190fb50398808ed1", "Gateway": "192.18.0.1", "IPAddress": "192.18.0.5", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "DNSNames": [ "zabbix-web", "e6560e24b31c" ] } } } }]
| ||
| Comment by Alexey Pustovalov [ 2025 Jul 12 ] | ||
|
It does not make sense, in browser you have: jsLoader.php:1 Failed to load resource: the server responded with a status of 404 (Not Found) 404 code - not found - - [11/Jul/2025:14:18:28 +0000] "GET /jsLoader.php?lang=en_GB&ver=7.4.0&showGuiMessaging=1 HTTP/1.1" 304 0 "https://zabbix.company.com/zabbix.php?action=dashboard.view" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" 304 code - Not modified So the file exists, but browser does not "see" it. Did you try different browser? Clear cache? Also, please, check once again that you do not have anything between browser and frontend container - especially proxies, loadbalancers and etc. | ||
| Comment by Mike Polinowski [ 2025 Jul 15 ] | ||
|
TLDR > SOLVED for me > Request URI too large -> Increase buffer for NGINX Proxy (Stackoverflow) — I am seeing the same issue after updating from 7.2 -> 7.4. But there are more errors before: > Uncaught ReferenceError: timeControl is not defined > jQuery.Deferred exception: timeControl is not defined init@https://something.com/zabbix/zabbix.php?action=dashboard.view&dashboardid=1:141:4
Before that I see a 414 Request-URI Too Large:
Followed by several missing widget:
> Uncaught ReferenceError: CWidget is not defined > Uncaught ReferenceError: CWidgetIterator is not defined ...
This is in FF -> in Chrome the initial error is Failed to load resource: net::ERR_HTTP2_PROTOCOL_ERROR
And while writing this up I just tried increasing the buffer size for NGINX (see SO link above) and this solved the issue. Dashboards are loading as expected again. Maybe you encountered the same issue seansyth ? | ||
| Comment by Sean Syth [ 2025 Jul 21 ] | ||
|
mpolinowski That did resolve the issue partially, so thank you! When I bypass our proxy, the dashboards are now working. When I try to navigate to the URL we have setup using ARR on our IIS server the dashboards are still showing as blank (still getting a 404 for jsloader.php). I have tried creating more URL write rules to allow this through, and tried bumping the proxy settings for our zabbix server farm in IIS with no luck. Is there any recommended config for using IIS with Zabbix? Or a known issue? I have not been able to find anything like this online. | ||
| Comment by Alexey Pustovalov [ 2025 Jul 22 ] | ||
|
It is better to check IIS side, why it answer with 404 error for existing file. | ||
| Comment by Andrejs Verza [ 2025 Jul 22 ] | ||
|
JavaScript file linking shall be re-worked in a such way that the resulting URLs would never exceed 2048 characters. | ||
| Comment by Andrejs Verza [ 2025 Aug 27 ] | ||
|
Available in:
| ||
| Comment by Mike Polinowski [ 2025 Oct 02 ] | ||
|
Thank you for the fix! Updated to 7.4.3 and rolled back my NGINX conf to default - widgets are loading. | ||
| Comment by Andrejs Verza [ 2025 Oct 02 ] | ||
|
Thank you for your feedback! |