diff --git a/monitoring/README.md b/monitoring/README.md index 3073846..b7bcb40 100644 --- a/monitoring/README.md +++ b/monitoring/README.md @@ -1,6 +1,7 @@ -# Installing the Zabbix server +# Installing the Zabbix server Change default passwords, ports and set listen IP (ports `8080/tcp` and `10051/tcp` will be open on all interfaces, use a firewall or specify the address of the required interface), then run: + ```bash wget https://github.com/tornadocash/tornado-relayer/raw/master/monitoring/zabbix.tar.gz mkdir $HOME/monitoring/ @@ -12,18 +13,21 @@ docker-compose up -d # Installing the Zabbix agent Download package from repository [https://repo.zabbix.com/zabbix/5.2/ubuntu/pool/main/z/zabbix/](https://repo.zabbix.com/zabbix/5.2/ubuntu/pool/main/z/zabbix/) and run: + ```bash sudo dpkg -i zabbix-agent_5.2.*.deb sudo usermod -aG docker zabbix ``` + Change default values in `/etc/zabbix/zabbix_agent2.conf`: -* `Hostname` the same as in the zabbix-server web interface; -* `Server` and `ServerActive` set zabbix server IP or DNS name; -* `ListenIP` to local network IP available from zabbix server or set firewall rules to restrict access to port `10050`; -* uncomment `Plugins.Docker.Endpoint=unix:///var/run/docker.sock`. +- `Hostname` the same as in the zabbix-server web interface; +- `Server` and `ServerActive` set zabbix server IP or DNS name; +- `ListenIP` to local network IP available from zabbix server or set firewall rules to restrict access to port `10050`; +- uncomment `Plugins.Docker.Endpoint=unix:///var/run/docker.sock`. Then run: + ```bash sudo systemctl enable zabbix-agent2.service sudo systemctl restart zabbix-agent2.service @@ -35,15 +39,17 @@ Log into your Zabbix server (defaul login and passord: `Admin` - `zabbix`) and c # Import templates -Import templates using the WebUI: -* [Docker-template.yaml](/monitoring/templates/Docker-template.yaml); -* [Tornado-relayer-template.yaml](/monitoring/templates/Tornado-relayer-template.yaml). +Import templates using the WebUI: -Link templates with added host. It is also recommended to link `Linux CPU by Zabbix agent`, `Linux filesystems by Zabbix agent` and `Linux memory by Zabbix agent` templates to the host. +- [Docker-template.yaml](/monitoring/templates/Docker-template.yaml); +- [Tornado-relayer-template.yaml](/monitoring/templates/Tornado-relayer-template.yaml). + +Link templates with added host. It is also recommended to link `Linux CPU by Zabbix agent`, `Linux filesystems by Zabbix agent` and `Linux memory by Zabbix agent` templates to the host. # Alerts In WebUI - Administration -> Media types -> Telegram: + ``` https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/telegram @@ -58,4 +64,4 @@ https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/telegram 4.2. Send "/getgroupid@myidbot" in your group 4.3. Copy returned group id save it in the "Telegram Webhook" media for the user you created for group notifications 4.4. Send "/start@your_bot_name_here" in your group (Telegram bot won't send anything to the group without it) -``` \ No newline at end of file +``` diff --git a/monitoring/docker-compose.yml b/monitoring/docker-compose.yml index 5bbd46e..c722fca 100644 --- a/monitoring/docker-compose.yml +++ b/monitoring/docker-compose.yml @@ -2,179 +2,179 @@ version: '3.5' services: - zabbix-server: - image: zabbix/zabbix-server-pgsql:alpine-5.2-latest - restart: always - 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 - 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_pgsql - - .env_srv - secrets: - - POSTGRES_USER - - POSTGRES_PASSWORD - depends_on: - - postgres-server - networks: - zbx_net_backend: - aliases: + zabbix-server: + image: zabbix/zabbix-server-pgsql:alpine-5.2-latest + restart: always + 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 + 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_pgsql + - .env_srv + secrets: + - POSTGRES_USER + - POSTGRES_PASSWORD + depends_on: + - postgres-server + networks: + zbx_net_backend: + aliases: + - zabbix-server + - zabbix-server-pgsql + - zabbix-server-alpine-pgsql + - zabbix-server-pgsql-alpine + zbx_net_frontend: + 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 PostgreSQL database support' + com.zabbix.company: 'Zabbix LLC' + com.zabbix.component: 'zabbix-server' + com.zabbix.dbtype: 'pgsql' + com.zabbix.os: 'alpine' + + zabbix-web: + image: zabbix/zabbix-web-nginx-pgsql:alpine-5.2-latest + restart: always + ports: + - '8080:8080' + 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_pgsql + - .env_web + secrets: + - POSTGRES_USER + - POSTGRES_PASSWORD + depends_on: + - postgres-server - zabbix-server - - zabbix-server-pgsql - - zabbix-server-alpine-pgsql - - zabbix-server-pgsql-alpine - zbx_net_frontend: - 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 PostgreSQL database support" - com.zabbix.company: "Zabbix LLC" - com.zabbix.component: "zabbix-server" - com.zabbix.dbtype: "pgsql" - com.zabbix.os: "alpine" + healthcheck: + test: ['CMD', 'curl', '-f', 'http://localhost:8080/'] + interval: 10s + timeout: 5s + retries: 3 + networks: + zbx_net_backend: + aliases: + - zabbix-web-nginx-pgsql + - zabbix-web-nginx-alpine-pgsql + - zabbix-web-nginx-pgsql-alpine + zbx_net_frontend: + stop_grace_period: 10s + sysctls: + - net.core.somaxconn=65535 + labels: + com.zabbix.description: 'Zabbix frontend on Nginx web-server with PostgreSQL database support' + com.zabbix.company: 'Zabbix LLC' + com.zabbix.component: 'zabbix-frontend' + com.zabbix.webserver: 'nginx' + com.zabbix.dbtype: 'pgsql' + com.zabbix.os: 'alpine' - zabbix-web: - image: zabbix/zabbix-web-nginx-pgsql:alpine-5.2-latest - restart: always - ports: - - "8080:8080" - 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_pgsql - - .env_web - secrets: - - POSTGRES_USER - - POSTGRES_PASSWORD - depends_on: - - postgres-server - - zabbix-server - healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:8080/"] - interval: 10s - timeout: 5s - retries: 3 - networks: - zbx_net_backend: - aliases: - - zabbix-web-nginx-pgsql - - zabbix-web-nginx-alpine-pgsql - - zabbix-web-nginx-pgsql-alpine - zbx_net_frontend: - stop_grace_period: 10s - sysctls: - - net.core.somaxconn=65535 - labels: - com.zabbix.description: "Zabbix frontend on Nginx web-server with PostgreSQL database support" - com.zabbix.company: "Zabbix LLC" - com.zabbix.component: "zabbix-frontend" - com.zabbix.webserver: "nginx" - com.zabbix.dbtype: "pgsql" - com.zabbix.os: "alpine" + zabbix-agent: + image: zabbix/zabbix-agent2:alpine-5.2-latest + restart: always + volumes: + - /etc/localtime:/etc/localtime:ro + - /etc/timezone:/etc/timezone:ro + - /var/run/docker.sock:/var/run/docker.sock + env_file: + - .env_agent + privileged: true + user: root + pid: 'host' + networks: + zbx_net_backend: + aliases: + - zabbix-agent + - zabbix-agent-passive + - zabbix-agent-alpine + stop_grace_period: 5s - zabbix-agent: - image: zabbix/zabbix-agent2:alpine-5.2-latest - restart: always - volumes: - - /etc/localtime:/etc/localtime:ro - - /etc/timezone:/etc/timezone:ro - - /var/run/docker.sock:/var/run/docker.sock - env_file: - - .env_agent - privileged: true - user: root - pid: "host" - networks: - zbx_net_backend: - aliases: - - zabbix-agent - - zabbix-agent-passive - - zabbix-agent-alpine - stop_grace_period: 5s + postgres-server: + image: postgres:alpine + restart: always + volumes: + - ./zbx_env/var/lib/postgresql/data:/var/lib/postgresql/data:rw + env_file: + - .env_db_pgsql + secrets: + - POSTGRES_USER + - POSTGRES_PASSWORD + stop_grace_period: 1m + networks: + zbx_net_backend: + aliases: + - postgres-server + - pgsql-server + - pgsql-database - postgres-server: - image: postgres:alpine - restart: always - volumes: - - ./zbx_env/var/lib/postgresql/data:/var/lib/postgresql/data:rw - env_file: - - .env_db_pgsql - secrets: - - POSTGRES_USER - - POSTGRES_PASSWORD - stop_grace_period: 1m - networks: - zbx_net_backend: - aliases: - - postgres-server - - pgsql-server - - pgsql-database - - portainer: - image: portainer/portainer:latest - restart: always - ports: - - "9000:9000" - volumes: - - /var/run/docker.sock:/var/run/docker.sock - - portainer-data:/data + portainer: + image: portainer/portainer:latest + restart: always + ports: + - '9000:9000' + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - portainer-data:/data networks: zbx_net_frontend: driver: bridge driver_opts: - com.docker.network.enable_ipv6: "false" + com.docker.network.enable_ipv6: 'false' ipam: driver: default config: - - subnet: 172.16.238.0/24 + - subnet: 172.16.238.0/24 zbx_net_backend: driver: bridge driver_opts: - com.docker.network.enable_ipv6: "false" + com.docker.network.enable_ipv6: 'false' internal: true ipam: driver: default config: - - subnet: 172.16.239.0/24 + - subnet: 172.16.239.0/24 secrets: POSTGRES_USER: diff --git a/monitoring/templates/Docker-template.yaml b/monitoring/templates/Docker-template.yaml index eca4ffe..39172e8 100644 --- a/monitoring/templates/Docker-template.yaml +++ b/monitoring/templates/Docker-template.yaml @@ -2,130 +2,105 @@ zabbix_export: version: '5.2' date: '2021-11-29T12:29:17Z' groups: - - - name: Docker + - name: Docker templates: - - - template: Docker + - template: Docker name: Docker description: | Get Docker engine metrics from plugin for the New Zabbix Agent (zabbix-agent2). - + You can discuss this template or leave feedback on our forum - + Template tooling version used: 0.38 groups: - - - name: Docker + - name: Docker applications: - - - name: Docker - - - name: 'Zabbix raw items' + - name: Docker + - name: 'Zabbix raw items' items: - - - name: 'Docker: Get containers' + - name: 'Docker: Get containers' key: docker.containers history: '0' trends: '0' value_type: TEXT applications: - - - name: 'Zabbix raw items' - - - name: 'Docker: Containers paused' + - name: 'Zabbix raw items' + - name: 'Docker: Containers paused' type: DEPENDENT key: docker.containers.paused delay: '0' history: 7d description: 'Total number of containers paused on this host' applications: - - - name: Docker + - name: Docker preprocessing: - - - type: JSONPATH + - type: JSONPATH parameters: - $.ContainersPaused master_item: key: docker.info - - - name: 'Docker: Containers running' + - name: 'Docker: Containers running' type: DEPENDENT key: docker.containers.running delay: '0' history: 7d description: 'Total number of containers running on this host' applications: - - - name: Docker + - name: Docker preprocessing: - - - type: JSONPATH + - type: JSONPATH parameters: - $.ContainersRunning master_item: key: docker.info - - - name: 'Docker: Containers stopped' + - name: 'Docker: Containers stopped' type: DEPENDENT key: docker.containers.stopped delay: '0' history: 7d description: 'Total number of containers stopped on this host' applications: - - - name: Docker + - name: Docker preprocessing: - - - type: JSONPATH + - type: JSONPATH parameters: - $.ContainersStopped master_item: key: docker.info triggers: - - - expression: '{avg(5m)}>=1' + - expression: '{avg(5m)}>=1' name: 'Docker: containers is stopped' priority: HIGH - - - name: 'Docker: Containers total' + - name: 'Docker: Containers total' type: DEPENDENT key: docker.containers.total delay: '0' history: 7d description: 'Total number of containers on this host' applications: - - - name: Docker + - name: Docker preprocessing: - - - type: JSONPATH + - type: JSONPATH parameters: - $.Containers master_item: key: docker.info - - - name: 'Docker: Get images' + - name: 'Docker: Get images' key: docker.images history: '0' trends: '0' status: DISABLED value_type: TEXT applications: - - - name: 'Zabbix raw items' - - - name: 'Docker: Get info' + - name: 'Zabbix raw items' + - name: 'Docker: Get info' key: docker.info history: '0' trends: '0' value_type: TEXT applications: - - - name: 'Zabbix raw items' - - - name: 'Docker: Memory total' + - name: 'Zabbix raw items' + - name: 'Docker: Memory total' type: DEPENDENT key: docker.mem.total delay: '0' @@ -133,61 +108,51 @@ zabbix_export: status: DISABLED units: B applications: - - - name: Docker + - name: Docker preprocessing: - - - type: JSONPATH + - type: JSONPATH parameters: - $.MemTotal master_item: key: docker.info - - - name: 'Docker: Ping' + - name: 'Docker: Ping' key: docker.ping history: 7h applications: - - - name: Docker + - name: Docker valuemap: name: 'Service state' preprocessing: - - - type: DISCARD_UNCHANGED_HEARTBEAT + - type: DISCARD_UNCHANGED_HEARTBEAT parameters: - 10m triggers: - - - expression: '{last()}=0' + - expression: '{last()}=0' name: 'Docker: Service is down' priority: AVERAGE manual_close: 'YES' discovery_rules: - - - name: 'Containers discovery' + - name: 'Containers discovery' key: 'docker.containers.discovery[true]' delay: 15m filter: evaltype: AND conditions: - - - macro: '{#NAME}' + - macro: '{#NAME}' value: '{$DOCKER.LLD.FILTER.CONTAINER.MATCHES}' formulaid: A - - - macro: '{#NAME}' + - macro: '{#NAME}' value: '{$DOCKER.LLD.FILTER.CONTAINER.NOT_MATCHES}' operator: NOT_MATCHES_REGEX formulaid: B description: | Discovery for containers metrics - + Parameter: true - Returns all containers false - Returns only running containers item_prototypes: - - - name: 'Container {#NAME}: Finished at' + - name: 'Container {#NAME}: Finished at' type: DEPENDENT key: 'docker.container_info.finished["{#NAME}"]' delay: '0' @@ -195,43 +160,35 @@ zabbix_export: value_type: FLOAT units: unixtime application_prototypes: - - - name: 'Docker: Container {#NAME}' + - name: 'Docker: Container {#NAME}' preprocessing: - - - type: JSONPATH + - type: JSONPATH parameters: - $.State.FinishedAt - - - type: DISCARD_UNCHANGED_HEARTBEAT + - type: DISCARD_UNCHANGED_HEARTBEAT parameters: - 1d master_item: key: 'docker.container_info["{#NAME}"]' - - - name: 'Container {#NAME}: Restart count' + - name: 'Container {#NAME}: Restart count' type: DEPENDENT key: 'docker.container_info.restart_count["{#NAME}"]' delay: '0' history: 7d application_prototypes: - - - name: 'Docker: Container {#NAME}' + - name: 'Docker: Container {#NAME}' preprocessing: - - - type: JSONPATH + - type: JSONPATH parameters: - $.RestartCount master_item: key: 'docker.container_info["{#NAME}"]' trigger_prototypes: - - - expression: '{last()}>5' + - expression: '{last()}>5' name: 'Container {#NAME}: restarting constantly' opdata: '{ITEM.VALUE}' priority: HIGH - - - name: 'Container {#NAME}: Started at' + - name: 'Container {#NAME}: Started at' type: DEPENDENT key: 'docker.container_info.started["{#NAME}"]' delay: '0' @@ -239,21 +196,17 @@ zabbix_export: value_type: FLOAT units: unixtime application_prototypes: - - - name: 'Docker: Container {#NAME}' + - name: 'Docker: Container {#NAME}' preprocessing: - - - type: JSONPATH + - type: JSONPATH parameters: - $.State.StartedAt - - - type: DISCARD_UNCHANGED_HEARTBEAT + - type: DISCARD_UNCHANGED_HEARTBEAT parameters: - 1d master_item: key: 'docker.container_info["{#NAME}"]' - - - name: 'Container {#NAME}: Error' + - name: 'Container {#NAME}: Error' type: DEPENDENT key: 'docker.container_info.state.error["{#NAME}"]' delay: '0' @@ -261,114 +214,93 @@ zabbix_export: trends: '0' value_type: CHAR application_prototypes: - - - name: 'Docker: Container {#NAME}' + - name: 'Docker: Container {#NAME}' preprocessing: - - - type: JSONPATH + - type: JSONPATH parameters: - $.State.Error - - - type: DISCARD_UNCHANGED_HEARTBEAT + - type: DISCARD_UNCHANGED_HEARTBEAT parameters: - 1d master_item: key: 'docker.container_info["{#NAME}"]' trigger_prototypes: - - - expression: '{diff()}=1 and {strlen()}>0' + - expression: '{diff()}=1 and {strlen()}>0' name: 'Container {#NAME}: An error has occurred in the container' priority: WARNING description: 'Container {#NAME} has an error. Ack to close.' manual_close: 'YES' - - - name: 'Container {#NAME}: Exit code' + - name: 'Container {#NAME}: Exit code' type: DEPENDENT key: 'docker.container_info.state.exitcode["{#NAME}"]' delay: '0' history: 7d application_prototypes: - - - name: 'Docker: Container {#NAME}' + - name: 'Docker: Container {#NAME}' preprocessing: - - - type: JSONPATH + - type: JSONPATH parameters: - $.State.ExitCode - - - type: DISCARD_UNCHANGED_HEARTBEAT + - type: DISCARD_UNCHANGED_HEARTBEAT parameters: - 1d master_item: key: 'docker.container_info["{#NAME}"]' - - - name: 'Container {#NAME}: Paused' + - name: 'Container {#NAME}: Paused' type: DEPENDENT key: 'docker.container_info.state.paused["{#NAME}"]' delay: '0' history: 7d application_prototypes: - - - name: 'Docker: Container {#NAME}' + - name: 'Docker: Container {#NAME}' valuemap: name: 'Docker flag' preprocessing: - - - type: JSONPATH + - type: JSONPATH parameters: - $.State.Paused - - - type: BOOL_TO_DECIMAL + - type: BOOL_TO_DECIMAL parameters: - '' master_item: key: 'docker.container_info["{#NAME}"]' - - - name: 'Container {#NAME}: Restarting' + - name: 'Container {#NAME}: Restarting' type: DEPENDENT key: 'docker.container_info.state.restarting["{#NAME}"]' delay: '0' history: 7d application_prototypes: - - - name: 'Docker: Container {#NAME}' + - name: 'Docker: Container {#NAME}' valuemap: name: 'Docker flag' preprocessing: - - - type: JSONPATH + - type: JSONPATH parameters: - $.State.Restarting - - - type: BOOL_TO_DECIMAL + - type: BOOL_TO_DECIMAL parameters: - '' master_item: key: 'docker.container_info["{#NAME}"]' - - - name: 'Container {#NAME}: Running' + - name: 'Container {#NAME}: Running' type: DEPENDENT key: 'docker.container_info.state.running["{#NAME}"]' delay: '0' history: 7d application_prototypes: - - - name: 'Docker: Container {#NAME}' + - name: 'Docker: Container {#NAME}' valuemap: name: 'Docker flag' preprocessing: - - - type: JSONPATH + - type: JSONPATH parameters: - $.State.Running - - - type: BOOL_TO_DECIMAL + - type: BOOL_TO_DECIMAL parameters: - '' master_item: key: 'docker.container_info["{#NAME}"]' - - - name: 'Container {#NAME}: Status' + - name: 'Container {#NAME}: Status' type: DEPENDENT key: 'docker.container_info.state.status["{#NAME}"]' delay: '0' @@ -376,109 +308,86 @@ zabbix_export: trends: '0' value_type: CHAR application_prototypes: - - - name: 'Docker: Container {#NAME}' + - name: 'Docker: Container {#NAME}' preprocessing: - - - type: JSONPATH + - type: JSONPATH parameters: - $.State.Status - - - type: DISCARD_UNCHANGED_HEARTBEAT + - type: DISCARD_UNCHANGED_HEARTBEAT parameters: - 1h master_item: key: 'docker.container_info["{#NAME}"]' - - - name: 'Container {#NAME}: Get info' + - name: 'Container {#NAME}: Get info' key: 'docker.container_info["{#NAME}"]' history: '0' trends: '0' value_type: CHAR description: 'Return low-level information about a container' application_prototypes: - - - name: 'Docker: Container {#NAME}' + - name: 'Docker: Container {#NAME}' trigger_prototypes: - - - expression: '{Docker:docker.container_info.state.exitcode["{#NAME}"].last()}>0 and {Docker:docker.container_info.state.running["{#NAME}"].last()}=0' + - expression: '{Docker:docker.container_info.state.exitcode["{#NAME}"].last()}>0 and {Docker:docker.container_info.state.running["{#NAME}"].last()}=0' name: 'Container {#NAME}: Container has been stopped with error code' opdata: 'Exit code: {ITEM.LASTVALUE1}' priority: AVERAGE manual_close: 'YES' macros: - - - macro: '{$DOCKER.LLD.FILTER.CONTAINER.MATCHES}' + - macro: '{$DOCKER.LLD.FILTER.CONTAINER.MATCHES}' value: '.*' description: 'Filter of discoverable containers' - - - macro: '{$DOCKER.LLD.FILTER.CONTAINER.NOT_MATCHES}' + - macro: '{$DOCKER.LLD.FILTER.CONTAINER.NOT_MATCHES}' value: CHANGE_IF_NEEDED description: 'Filter to exclude discovered containers' - - - macro: '{$DOCKER.LLD.FILTER.IMAGE.MATCHES}' + - macro: '{$DOCKER.LLD.FILTER.IMAGE.MATCHES}' value: '.*' description: 'Filter of discoverable images' - - - macro: '{$DOCKER.LLD.FILTER.IMAGE.NOT_MATCHES}' + - macro: '{$DOCKER.LLD.FILTER.IMAGE.NOT_MATCHES}' value: CHANGE_IF_NEEDED description: 'Filter to exclude discovered images' graphs: - - - name: 'Docker: Containers' + - name: 'Docker: Containers' graph_items: - - - drawtype: GRADIENT_LINE + - drawtype: GRADIENT_LINE color: 1A7C11 item: host: Docker key: docker.containers.running - - - sortorder: '1' + - sortorder: '1' drawtype: BOLD_LINE color: 2774A4 item: host: Docker key: docker.containers.paused - - - sortorder: '2' + - sortorder: '2' drawtype: BOLD_LINE color: F63100 item: host: Docker key: docker.containers.stopped - - - sortorder: '3' + - sortorder: '3' drawtype: BOLD_LINE color: A54F10 item: host: Docker key: docker.containers.total - - - name: 'Docker: Memory total' + - name: 'Docker: Memory total' graph_items: - - - drawtype: BOLD_LINE + - drawtype: BOLD_LINE color: 1A7C11 item: host: Docker key: docker.mem.total value_maps: - - - name: 'Docker flag' + - name: 'Docker flag' mappings: - - - value: '0' + - value: '0' newvalue: 'False' - - - value: '1' + - value: '1' newvalue: 'True' - - - name: 'Service state' + - name: 'Service state' mappings: - - - value: '0' + - value: '0' newvalue: Down - - - value: '1' + - value: '1' newvalue: Up diff --git a/monitoring/templates/Tornado-relayer-template.yaml b/monitoring/templates/Tornado-relayer-template.yaml index 1a082b4..2644e36 100644 --- a/monitoring/templates/Tornado-relayer-template.yaml +++ b/monitoring/templates/Tornado-relayer-template.yaml @@ -2,84 +2,69 @@ zabbix_export: version: '5.2' date: '2021-12-01T13:26:59Z' groups: - - - name: Templates/Applications + - name: Templates/Applications templates: - - - template: Tornado-relayer + - template: Tornado-relayer name: Tornado-relayer groups: - - - name: Templates/Applications + - name: Templates/Applications items: - - - name: 'tornado-relayer: health.error' + - name: 'tornado-relayer: health.error' type: DEPENDENT key: tornado-relayer.health.error delay: '0' trends: '0' value_type: TEXT preprocessing: - - - type: JSONPATH + - type: JSONPATH parameters: - $.health.error master_item: key: 'web.page.get[{$URL}]' triggers: - - - expression: '{last()}<>""' + - expression: '{last()}<>""' name: 'tornado-relayer: health error' priority: AVERAGE - - - name: 'tornado-relayer: health.status' + - name: 'tornado-relayer: health.status' type: DEPENDENT key: tornado-relayer.health.status delay: '0' trends: '0' value_type: TEXT preprocessing: - - - type: JSONPATH + - type: JSONPATH parameters: - $.health.status master_item: key: 'web.page.get[{$URL}]' triggers: - - - expression: '{last(#3)}<>"true"' + - expression: '{last(#3)}<>"true"' name: 'tornado-relayer: health status <> true' priority: HIGH - - - name: 'tornado-relayer: data' + - name: 'tornado-relayer: data' type: ZABBIX_ACTIVE key: 'web.page.get[{$URL}]' history: '0' trends: '0' value_type: TEXT preprocessing: - - - type: REGEX + - type: REGEX parameters: - '\n\s?\n([\s\S]*)' - \1 httptests: - - - name: 'tornado-relayer: status page' + - name: 'tornado-relayer: status page' agent: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/80.0.3987.87 Chrome/80.0.3987.87 Safari/537.36' steps: - - - name: 'status page' + - name: 'status page' url: '{$URL}' follow_redirects: 'NO' required: status status_codes: '200' triggers: - - - expression: '{Tornado-relayer:web.test.fail[tornado-relayer: status page].last()}>0' + - expression: '{Tornado-relayer:web.test.fail[tornado-relayer: status page].last()}>0' name: 'tornado-relayer: status page failed' priority: AVERAGE - - - expression: '{Tornado-relayer:web.test.rspcode[tornado-relayer: status page,status page].last(#3)}<>200' + - expression: '{Tornado-relayer:web.test.rspcode[tornado-relayer: status page,status page].last(#3)}<>200' name: 'tornado-relayer: status page rspcode <>200' priority: HIGH