michalsternadel / mgs_zbxicons

Zabbix maps icon generator.
GNU General Public License v2.0
34 stars 10 forks source link

Zabbix 5.4.4 Unable to edit maps after applying icon set #6

Closed tuxpowered closed 2 years ago

tuxpowered commented 2 years ago

Your script works wonderful, and the files are all visible in the GUI under Admin>General>Images.

Existing maps open no problem. However, editing existing or creating a new map and editing it results in just a blank web page loading. (no background grid or anything). Any idea why?

I can provide you the new zabbix image table if it could help.

michalsternadel commented 2 years ago

Well, I've tested on a fresh 5.4.8 postgresql+nginx install and all is working fine: mappedit-5 4 8

Please provide detailed specs of your installation - I'll try to test with a docker containers with a closest configuration to yours. Look at error log of your web server. It's possible that PHP execution time is set to low.

tuxpowered commented 2 years ago

Thank you for the quick reply , I am running 5.4.4 on MySQL. using official Docker images https://www.zabbix.com/container_images.

I run my own Nginx server in front to handle SSL. I did peak at the nginx server log before restoring the original images table, and it returned a 500 error. Restoring the original image table and everything worked fine.

This is the docker-compose file used.

version: '3.5'
services:
 zabbix-server:
  image: zabbix/zabbix-server-mysql:latest
  ports:
   - "10051:10051"
  volumes:
   - /etc/localtime:/etc/localtime:ro
   - /etc/timezone:/etc/timezone:ro
   - ./zbx_env/usr/lib/zabbix/alertscripts:/usr/lib/zabbix/alertscripts:ro
   - ./zbx_env/usr/lib/zabbix/externalscripts:/usr/lib/zabbix/externalscripts:ro
   - ./zbx_env/var/lib/zabbix/export:/var/lib/zabbix/export:rw
   - ./zbx_env/var/lib/zabbix/modules:/var/lib/zabbix/modules:ro
   - ./zbx_env/var/lib/zabbix/enc:/var/lib/zabbix/enc:ro
   - ./zbx_env/var/lib/zabbix/ssh_keys:/var/lib/zabbix/ssh_keys:ro
   - ./zbx_env/var/lib/zabbix/mibs:/var/lib/zabbix/mibs:ro
   - ./zbx_env/var/lib/zabbix/snmptraps:/var/lib/zabbix/snmptraps:ro
#  links:
#   - mysql-server:mysql-server
#   - zabbix-java-gateway:zabbix-java-gateway
  ulimits:
   nproc: 65535
   nofile:
    soft: 20000
    hard: 40000
  deploy:
   resources:
    limits:
      cpus: '0.70'
      memory: 1G
    reservations:
      cpus: '0.5'
      memory: 512M
  env_file:
   - .env_db_mysql
   - .env_srv
#  secrets:
#   - MYSQL_USER
#   - MYSQL_PASSWORD
#   - MYSQL_ROOT_PASSWORD
#   - client-key.pem
#   - client-cert.pem
#   - root-ca.pem
## If not run as root you can not install curl.
  user: root
  depends_on:
#   - mysql-server
#   - zabbix-java-gateway
   - zabbix-snmptraps
  networks:
   zbx_net_backend:
     aliases:
      - zabbix-server
      - zabbix-server-mysql
      - zabbix-server-alpine-mysql
      - zabbix-server-mysql-alpine
   zbx_net_frontend:
#  devices:
#   - "/dev/ttyUSB0:/dev/ttyUSB0"
  stop_grace_period: 30s
  sysctls:
   - net.ipv4.ip_local_port_range=1024 65000
   - net.ipv4.conf.all.accept_redirects=0
   - net.ipv4.conf.all.secure_redirects=0
   - net.ipv4.conf.all.send_redirects=0
  labels:
   com.zabbix.description: "Zabbix server with MySQL database support"
   com.zabbix.company: "Zabbix LLC"
   com.zabbix.component: "zabbix-server"
   com.zabbix.dbtype: "mysql"
   com.zabbix.os: "alpine"

 #zabbix-proxy-sqlite3:
 # image: zabbix/zabbix-proxy-sqlite3:alpine-5.0-latest
 # ports:
 #  - "10061:10051"
 # volumes:
 #  - /etc/localtime:/etc/localtime:ro
 #  - /etc/timezone:/etc/timezone:ro
 #  - ./zbx_env/usr/lib/zabbix/externalscripts:/usr/lib/zabbix/externalscripts:ro
 #  - ./zbx_env/var/lib/zabbix/modules:/var/lib/zabbix/modules:ro
 #  - ./zbx_env/var/lib/zabbix/enc:/var/lib/zabbix/enc:ro
 #  - ./zbx_env/var/lib/zabbix/ssh_keys:/var/lib/zabbix/ssh_keys:ro
 #  - ./zbx_env/var/lib/zabbix/mibs:/var/lib/zabbix/mibs:ro
 #  - ./zbx_env/var/lib/zabbix/snmptraps:/var/lib/zabbix/snmptraps:ro
 # links:
 #  - zabbix-server:zabbix-server
#   - zabbix-java-gateway:zabbix-java-gateway
 # ulimits:
 #  nproc: 65535
 #  nofile:
 #   soft: 20000
 #   hard: 40000
 # deploy:
 #  resources:
 #   limits:
 #     cpus: '0.70'
 #     memory: 512M
 #   reservations:
 #     cpus: '0.3'
 #     memory: 256M
 # env_file:
 #  - .env_prx
 #  - .env_prx_sqlite3
# user: root
 # depends_on:
#   - zabbix-java-gateway
 #  - zabbix-snmptraps
 # networks:
 #  zbx_net_backend:
 #   aliases:
 #    - zabbix-proxy-sqlite3
 #    - zabbix-proxy-alpine-sqlite3
 #    - zabbix-proxy-sqlite3-alpine
 #  zbx_net_frontend:
 # stop_grace_period: 30s
 # labels:
 #  com.zabbix.description: "Zabbix proxy with SQLite3 database support"
 #  com.zabbix.company: "Zabbix LLC"
 #  com.zabbix.component: "zabbix-proxy"
 #  com.zabbix.dbtype: "sqlite3"
 #  com.zabbix.os: "alpine"

# zabbix-proxy-mysql:
#  image: zabbix/zabbix-proxy-mysql:alpine-5.0-latest
#  ports:
#   - "10071:10051"
#  volumes:
#   - /etc/localtime:/etc/localtime:ro
#   - /etc/timezone:/etc/timezone:ro
#   - ./zbx_env/usr/lib/zabbix/externalscripts:/usr/lib/zabbix/externalscripts:ro
#   - ./zbx_env/var/lib/zabbix/modules:/var/lib/zabbix/modules:ro
#   - ./zbx_env/var/lib/zabbix/enc:/var/lib/zabbix/enc:ro
#   - ./zbx_env/var/lib/zabbix/ssh_keys:/var/lib/zabbix/ssh_keys:ro
#   - ./zbx_env/var/lib/zabbix/mibs:/var/lib/zabbix/mibs:ro
#   - ./zbx_env/var/lib/zabbix/snmptraps:/var/lib/zabbix/snmptraps:ro
#  links:
#   - zabbix-server:zabbix-server
#   - zabbix-java-gateway:zabbix-java-gateway
#  ulimits:
#   nproc: 65535
#   nofile:
#    soft: 20000
#    hard: 40000
#  deploy:
#   resources:
#    limits:
#      cpus: '0.70'
#      memory: 512M
#    reservations:
#      cpus: '0.3'
#      memory: 256M
#  env_file:
#   - .env_db_mysql_proxy
#   - .env_prx
#   - .env_prx_mysql
#  depends_on:
#   - mysql-server
#   - zabbix-java-gateway
#   - zabbix-snmptraps
#  secrets:
#   - MYSQL_USER
#   - MYSQL_PASSWORD
#   - MYSQL_ROOT_PASSWORD
#   - client-key.pem
#   - client-cert.pem
#   - root-ca.pem
#  networks:
#   zbx_net_backend:
#    aliases:
#     - zabbix-proxy-mysql
#     - zabbix-proxy-alpine-mysql
#     - zabbix-proxy-mysql-alpine
#   zbx_net_frontend:
#  stop_grace_period: 30s
#  labels:
#   com.zabbix.description: "Zabbix proxy with MySQL database support"
#   com.zabbix.company: "Zabbix LLC"
#   com.zabbix.component: "zabbix-proxy"
#   com.zabbix.dbtype: "mysql"
#   com.zabbix.os: "alpine"

# zabbix-web-apache-mysql:
#  image: zabbix/zabbix-web-apache-mysql:alpine-5.0-latest
#  ports:
#   - "80:8080"
#   - "443:8443"
#  links:
#   - mysql-server:mysql-server
#   - zabbix-server:zabbix-server
#  volumes:
#   - /etc/localtime:/etc/localtime:ro
#   - /etc/timezone:/etc/timezone:ro
#   - ./zbx_env/etc/ssl/apache2:/etc/ssl/apache2:ro
#   - ./zbx_env/usr/share/zabbix/modules/:/usr/share/zabbix/modules/:ro
#  deploy:
#   resources:
#    limits:
#      cpus: '0.70'
#      memory: 512M
#    reservations:
#      cpus: '0.5'
#      memory: 256M
#  env_file:
#   - .env_db_mysql
#   - .env_web
#  secrets:
#   - MYSQL_USER
#   - MYSQL_PASSWORD
#   - client-key.pem
#   - client-cert.pem
#   - root-ca.pem
#  depends_on:
#   - mysql-server
#   - zabbix-server
#  healthcheck:
#   test: ["CMD", "curl", "-f", "http://localhost:8080/"]
#   interval: 10s
#   timeout: 5s
#   retries: 3
#   start_period: 30s
#  networks:
#   zbx_net_backend:
#    aliases:
#     - zabbix-web-apache-mysql
#     - zabbix-web-apache-alpine-mysql
#     - zabbix-web-apache-mysql-alpine
#   zbx_net_frontend:
#  stop_grace_period: 10s
#  sysctls:
#   - net.core.somaxconn=65535
#  labels:
#   com.zabbix.description: "Zabbix frontend on Apache web-server with MySQL database support"
#   com.zabbix.company: "Zabbix LLC"
#   com.zabbix.component: "zabbix-frontend"
#   com.zabbix.webserver: "apache2"
#   com.zabbix.dbtype: "mysql"
#   com.zabbix.os: "alpine"

 zabbix-web-nginx-mysql:
  image: zabbix/zabbix-web-nginx-mysql:latest
  ports:
   - "8081:8080"
   - "8443:8443"
  links:
#   - mysql-server:mysql-server
   - zabbix-server:zabbix-server
  volumes:
   - /etc/localtime:/etc/localtime:ro
   - /etc/timezone:/etc/timezone:ro
   - ./zbx_env/etc/ssl/nginx:/etc/ssl/nginx:ro
   - ./zbx_env/usr/share/zabbix/modules/:/usr/share/zabbix/modules/:ro
  deploy:
   resources:
    limits:
      cpus: '0.70'
      memory: 512M
    reservations:
      cpus: '0.5'
      memory: 256M
  env_file:
   - .env_db_mysql
   - .env_web
#  secrets:
#   - MYSQL_USER
#   - MYSQL_PASSWORD
#   - client-key.pem
#   - client-cert.pem
#   - root-ca.pem
# user: root
  depends_on:
#   - mysql-server
   - zabbix-server
  healthcheck:
   test: ["CMD", "curl", "-f", "http://localhost:8080/"]
   interval: 10s
   timeout: 5s
   retries: 3
   start_period: 30s
  networks:
   zbx_net_backend:
    aliases:
     - zabbix-web-nginx-mysql
     - zabbix-web-nginx-alpine-mysql
     - zabbix-web-nginx-mysql-alpine
   zbx_net_frontend:
  stop_grace_period: 10s
  sysctls:
   - net.core.somaxconn=65535
  labels:
   com.zabbix.description: "Zabbix frontend on Nginx web-server with MySQL database support"
   com.zabbix.company: "Zabbix LLC"
   com.zabbix.component: "zabbix-frontend"
   com.zabbix.webserver: "nginx"
   com.zabbix.dbtype: "mysql"
   com.zabbix.os: "alpine"

 zabbix-agent:
  image: zabbix/zabbix-agent:latest
  ports:
   - "10050:10050"
  volumes:
   - /etc/localtime:/etc/localtime:ro
   - /etc/timezone:/etc/timezone:ro
   # Configure zabbix_agent.conf by modifying the .env_agent and reloading
   - ./zbx_env/etc/zabbix/zabbix_agentd.d:/etc/zabbix/zabbix_agentd.d:ro
   - ./zbx_env/var/lib/zabbix/modules:/var/lib/zabbix/modules:ro
   - ./zbx_env/var/lib/zabbix/enc:/var/lib/zabbix/enc:ro
   - ./zbx_env/var/lib/zabbix/ssh_keys:/var/lib/zabbix/ssh_keys:ro
  links:
   - zabbix-server:zabbix-server
  deploy:
   resources:
    limits:
      cpus: '0.2'
      memory: 128M
    reservations:
      cpus: '0.1'
      memory: 64M
   mode: global
  env_file:
   - .env_agent
  privileged: true
  pid: "host"
  networks:
   zbx_net_backend:
    aliases:
     - zabbix-agent
     - zabbix-agent-passive
     - zabbix-agent-alpine
  stop_grace_period: 5s
  labels:
   com.zabbix.description: "Zabbix agent"
   com.zabbix.company: "Zabbix LLC"
   com.zabbix.component: "zabbix-agentd"
   com.zabbix.os: "alpine"

# zabbix-java-gateway:
#  image: zabbix/zabbix-java-gateway:alpine-5.0-latest
#  ports:
#   - "10052:10052"
#  deploy:
#   resources:
#    limits:
#      cpus: '0.5'
#      memory: 512M
#    reservations:
#      cpus: '0.25'
#      memory: 256M
#  env_file:
#   - .env_java
#  networks:
#   zbx_net_backend:
#    aliases:
#     - zabbix-java-gateway
#     - zabbix-java-gateway-alpine
#  stop_grace_period: 5s
#  labels:
#   com.zabbix.description: "Zabbix Java Gateway"
#   com.zabbix.company: "Zabbix LLC"
#   com.zabbix.component: "java-gateway"
#   com.zabbix.os: "alpine"

 zabbix-snmptraps:
  image: zabbix/zabbix-snmptraps:latest
  ports:
   - "162:1162/udp"
  volumes:
   - ./zbx_env/var/lib/zabbix/snmptraps:/var/lib/zabbix/snmptraps:rw
  deploy:
   resources:
    limits:
      cpus: '0.5'
      memory: 256M
    reservations:
      cpus: '0.25'
      memory: 128M
  networks:
   zbx_net_frontend:
    aliases:
     - zabbix-snmptraps
   zbx_net_backend:
  stop_grace_period: 5s
  labels:
   com.zabbix.description: "Zabbix snmptraps"
   com.zabbix.company: "Zabbix LLC"
   com.zabbix.component: "snmptraps"
   com.zabbix.os: "alpine"

# mysql-server:
#  image: mysql:8.0
#  command:
#   - mysqld
#   - --character-set-server=utf8
#   - --collation-server=utf8_bin
#   - --default-authentication-plugin=mysql_native_password
#   - --require-secure-transport
#   - --ssl-ca=/run/secrets/root-ca.pem
#   - --ssl-cert=/run/secrets/server-cert.pem
#   - --ssl-key=/run/secrets/server-key.pem
#  volumes:
#   - ./zbx_env/var/lib/mysql:/var/lib/mysql:rw
#  env_file:
#   - .env_db_mysql
#  secrets:
#   - MYSQL_USER
#   - MYSQL_PASSWORD
#   - MYSQL_ROOT_PASSWORD
#   - server-key.pem
#   - server-cert.pem
#   - root-ca.pem
#  stop_grace_period: 1m
#  networks:
#   zbx_net_backend:
#    aliases:
#     - mysql-server
#     - zabbix-database
#     - mysql-database

# db_data_mysql:
#  image: busybox
#  volumes:
#   - ./zbx_env/var/lib/mysql:/var/lib/mysql:rw

# elasticsearch:
#  image: elasticsearch
#  environment:
#   - transport.host=0.0.0.0
#   - discovery.zen.minimum_master_nodes=1
#  networks:
#   zbx_net_backend:
#    aliases:
#     - elasticsearch

networks:
  zbx_net_frontend:
    driver: bridge
    driver_opts:
      com.docker.network.enable_ipv6: "false"
    ipam:
      driver: default
      config:
      - subnet: 172.16.238.0/24
  zbx_net_backend:
    driver: bridge
    driver_opts:
      com.docker.network.enable_ipv6: "false"
    internal: true
    ipam:
      driver: default
      config:
      - subnet: 172.16.239.0/24

secrets:
  MYSQL_USER:
    file: ./.MYSQL_USER
  MYSQL_PASSWORD:
    file: ./.MYSQL_PASSWORD
  MYSQL_ROOT_PASSWORD:
    file: ./.MYSQL_ROOT_PASSWORD
#  client-key.pem:
#    file: ./.ZBX_DB_KEY_FILE
#  client-cert.pem:
#    file: ./.ZBX_DB_CERT_FILE
#  root-ca.pem:
#    file: ./.ZBX_DB_CA_FILE
#  server-cert.pem:
#    file: ./.DB_CERT_FILE
#  server-key.pem:
#    file: ./.DB_KEY_FILE

Your PHP comment is interesting, though I do not think the docker for the web lets you modify it, here is my .env_web

ZBX_SERVER_HOST=zabbix-server
ZBX_SERVER_PORT=10051
ZBX_SERVER_NAME=Composed installation
ZBX_MAXEXECUTIONTIME=600
ZBX_MEMORYLIMIT=128M
ZBX_POSTMAXSIZE=16M
ZBX_UPLOADMAXFILESIZE=2M
ZBX_MAXINPUTTIME=300
# Timezone one of: http://php.net/manual/en/timezones.php
PHP_TZ=America/Los_Angeles
michalsternadel commented 2 years ago

Hello,

I can't deploy 100% of yours environment but I can reproduce your issue on a docker installation based on https://www.zabbix.com/documentation/current/en/manual/installation/containers documentation.

The problem is PHP memory limit which is default set to 128M, after I imported a bunch of icons and open map for edition, bang: 2021/12/20 22:34:34 [error] 20#20: *284 FastCGI sent in stderr: "PHP message: PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 16384 bytes) in /usr/share/zabbix/include/classes/api/services/CImage.php on line 162PHP message: PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 16384 bytes) in Unknown on line 0PHP message: PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 12288 bytes) in /usr/share/zabbix/include/classes/core/CCookieSession.php on line 123PHP message: PHP Warning: Unknown: Cannot call session save handler in a recursive manner in Unknown on line 0" while reading response header from upstream, client: 192.168.54.1, server: zabbix, request: "GET /sysmap.php?sysmapid=2 HTTP/1.1", upstream: "fastcgi://unix:/tmp/php-fpm.sock:", host: "localhost", referrer: "http://localhost/zabbix.php?action=map.view&sysmapid=2" So yeah, php_mysql is likely using more memory than php_psql. After I started docker container with "-e ZBX_MEMORYLIMIT=256M" option - maps edition works like a charm. Please try change ZBX_MEMORYLIMIT to 256M or more in your env file and let me know if the problem persists.

Have a nice day!

tuxpowered commented 2 years ago

Thank you! That proved to be the underlining issue. Bumping it to 256 worked added a bit more and it improved still. I have always been hesitant to use postgres (mostly because I am comfortable w/ MySQL/MariaDB but I might have to dig into memory usage between the two with php.

On a slightly different question, your script that generates the resulting files, Is it free to use? I want to create some icon sets for Ubiquiti devices and your script would be awesome to include with it. (actually my search for icons was for Ubiquiti set when I found yours :) )

michalsternadel commented 2 years ago

Hello. That's great the issue is solved. I've been using always mysql with zabbix but always with tweaked configuration for php so I didn't noticed such problems in production.

Well script is not a rocket science and I'm using GPL so yeah -- if it feets your needs elsewhere feel free to use it. Have a nice day.