Qué vas a conseguir
Que el móvil de la guardia suene antes que el teléfono del encargado: Zabbix vigilando internet, el servidor del TPV y su base de datos, las impresoras de cocina, los terminales, la red y el SAI del local. Con avisos que llegan solo cuando importan, y silencio mientras el local está cerrado.
Antes de empezar
- La versión: Zabbix 7.0 LTS (junio de 2024, soporte completo hasta junio de 2027). La 8.0 LTS está en release candidate a finales de octubre de 2026: para producción, 7.0 hasta su primera versión de correcciones. La 6.0 LTS ya solo tiene soporte limitado: planifica la actualización.
- Dónde va cada pieza: un servidor central y un Zabbix proxy en cada local, en un equipo pequeño siempre encendido, que sigue recogiendo datos aunque se caiga internet. Con el servidor dentro del local, sus avisos dependen de la misma línea que vigila.
- El inventario del local con IP fijas o reservas de DHCP (guía de ICG y HIOPOS).
- SNMP de solo lectura, mejor SNMPv3; con v2c, nunca la comunidad
public. - Puertos: 10050/TCP del proxy al agente y 10051/TCP hacia el servidor. Con el proxy en modo activo, el local solo necesita salida.
- El horario de servicio (comidas, cenas, desayunos del hotel) y quién está de guardia cada día.
1. Servidor, proxy y agentes
El servidor central, en Ubuntu 24.04 con PostgreSQL y Nginx, desde el repositorio oficial:
wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu24.04_all.debsudo dpkg -i zabbix-release_latest_7.0+ubuntu24.04_all.deb && sudo apt updatesudo apt install zabbix-server-pgsql zabbix-frontend-php php8.3-pgsql zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2sudo -u postgres createuser --pwprompt zabbixsudo -u postgres createdb -O zabbix zabbixzcat /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz | sudo -u zabbix psql zabbix# DBPassword en /etc/zabbix/zabbix_server.conf; listen y server_name en /etc/nginx/conf.d/zabbix.confsudo systemctl restart zabbix-server zabbix-agent2 nginx php8.3-fpmsudo systemctl enable zabbix-server zabbix-agent2 nginx php8.3-fpmEn el local, el paquete zabbix-proxy-sqlite3 y tres líneas que deciden casi todo en /etc/zabbix/zabbix_proxy.conf:
ProxyMode=0Server=zabbix.corp.exampleHostname=PRX-BRISADBName=/var/lib/zabbix/zabbix_proxy.dbProxyOfflineBuffer=24ProxyMode=0es activo: el proxy llama al servidor, no al revés. ElHostnametiene que coincidir con el nombre dado en Administration › Proxies.ProxyOfflineBufferson las horas que el proxy guarda datos sin conexión. Por defecto es 1: un corte de internet de una tarde se pierde. Con 24 horas cubres una noche entera.- En el servidor del TPV (Windows), Zabbix Agent 2 con el MSI:
ServeryServerActiveapuntan al proxy, y el 10050 abierto solo desde él.
2. Plantillas: qué vigilar en cada equipo
| Equipo | Cómo | Plantilla |
|---|---|---|
| Servidor del TPV (Windows) | Agente 2 | Windows by Zabbix agent, más el servicio de la base de datos |
| Servidor Linux del local, si lo hay | Agente 2 | Linux by Zabbix agent |
| Terminales TPV, comanderos, pantallas de cocina | ICMP | ICMP Ping |
| Impresoras de cocina y de tickets | ICMP y puerto 9100 | ICMP Ping más una comprobación TCP |
| Switches HP y TP-Link | SNMP | HP Enterprise Switch by SNMP, TP-LINK by SNMP o Network Generic Device by SNMP |
| Router MikroTik | SNMP | Las plantillas de MikroTik por SNMP (una por familia de modelo) |
| SAI | SNMP | APC UPS by SNMP o la del fabricante |
- ICMP Ping necesita
fpingen el proxy. Da tres elementos (icmpping,icmppingloss,icmppingsec) y el trigger Unavailable by ICMP ping. - Una impresora puede responder al ping con la tapa abierta o sin papel. El elemento que de verdad dice si acepta comandas es el puerto de impresión: comprobación simple
net.tcp.service[tcp,,9100]cada minuto, no más a menudo. - Los datáfonos van en su red de pagos. Solo se vigilan si la segmentación lo permite y está documentado en el alcance de PCI DSS; si no, se quedan fuera.
- Un grupo de hosts por local (
Locales/Brisa) y etiquetas (servicio:tpv,servicio:sala).
3. Los triggers que importan antes del servicio
Cinco problemas paran un servicio. Cada uno con un trigger claro y la severidad que le corresponde:
- Internet se mide desde el local contra dos destinos a la vez: uno solo da falsas alarmas. El del proxy sin contacto salta en el servidor central cuando el local entero desaparece.
- Con 4G de respaldo, la caída de la fibra no corta el servicio, pero hay que saberlo: el trigger de enlace caído de la WAN en la plantilla del router, como Warning.
service.info[...,state]devuelve 0 con el servicio en marcha (6 es detenido, 255 que no existe). El nombre, comoMSSQL$TPV, sale deservices.msc.
4. Avisos a la guardia: correo y Telegram
Primero los tipos de medio, en Alerts › Media types:
- Email: servidor SMTP, puerto 587 con STARTTLS y una cuenta propia para Zabbix.
- Telegram: el tipo de medio viene incluido. Crea un bot con @BotFather, pega el token en el parámetro
api_tokeny prueba con Test. En cada usuario, en Users › Users › Media, el tipo Telegram con el chat ID en Send to.
En el medio de cada usuario, When active limita las horas (1-7,11:00-24:00) y las severidades que le llegan. Después la acción, en Alerts › Actions › Trigger actions:
- Reconocer (acknowledge) el problema corta el paso 2.
- El mensaje lleva
{HOST.NAME},{TRIGGER.NAME}y{EVENT.SEVERITY}: local y equipo sin abrir el portátil.
5. Mantenimientos: cierre, descanso semanal y cambios
Un local cerrado no es una incidencia. Los mantenimientos, en Data collection › Maintenance:
- With data collection sigue guardando datos: el martes ves qué pasó el lunes. Los problemas se marcan como suprimidos y, con Pause operations for suppressed problems, no avisan.
Un mantenimiento sin fecha de fin, o que abarca todo el local, esconde también la caída de verdad. Limítalo por etiquetas y ponle siempre final.
6. El ticket: "una tormenta de alertas a las 13:05"
Sábado, 13:05. A la guardia le llegan 47 mensajes de Telegram en dos minutos: todos los TPV, los comanderos, las impresoras y la pantalla de cocina de un mismo local, sin respuesta. La sala está llena.
- El primero de la lista: en Monitoring › Problems, filtrado por el local y ordenado por hora, el primero es
SW-BRISA-01: Unavailable by ICMP pinga las 13:04:40. Lo demás es consecuencia: un problema real y 46 copias. - Confirmar en el local: el switch está apagado; alguien ha desenchufado la regleta de la barra para una cafetera. A las 13:08 todo responde.
- Reconocer el problema con lo ocurrido: se para la escalada.
- Dependencias de triggers: cada trigger de TPV, impresora y pantalla del local depende del ping de
SW-BRISA-01, y el switch depende de Proxy del local sin contacto. En los triggers que vienen de plantilla, la dependencia se añade en el host, en la pestaña Dependencies. Con eso, la próxima vez llega un único aviso: el del switch. - El ruido de los comanderos: se apagan al cargarse cada noche y algunos se duermen a media tarde. Severidad Warning, sin aviso, y un trigger con recuperación separada: problema con
max(/CMD-01/icmpping,#5)=0y recuperación conmin(/CMD-01/icmpping,#3)=1, para que no abra y cierre cada minuto. - El cierre: causa (regleta compartida), acción (switch al SAI) y mejora (dependencias en los demás locales).
Siguientes pasos
- La guía de ICG y HIOPOS tiene el inventario de terminales e impresoras que alimenta a Zabbix.
- La red que vigilas aquí, con sus VLAN y el 4G de respaldo, está en la guía de MikroTik y TP-Link: red y WiFi de un restaurante u hotel.
- La revisión de cada mañana antes del servicio (terminales, comanderos, impresoras de cocina y la línea de respaldo) es la idea del repositorio 34-venue-service-readiness de mi GitHub.
¿Falta algo o en tu entorno es distinto? Escríbeme y lo corrijo.
What you'll get
The on-call phone rings before the manager's does: Zabbix watching the internet, the POS server and its database, the kitchen printers, the tills, the network and the venue's UPS. With alerts that arrive only when they matter, and silence while the venue is closed.
Before you start
- The version: Zabbix 7.0 LTS (June 2024, full support until June 2027). 8.0 LTS is at release candidate at the end of October 2026: for production, 7.0 until its first bug-fix release. 6.0 LTS now only has limited support: plan the upgrade.
- Where each piece goes: a central server and a Zabbix proxy in each venue, on a small box that is always on, which keeps collecting data when internet drops. With the server inside the venue, its alerts depend on the same line it is watching.
- The venue's inventory with fixed IPs or DHCP reservations (ICG and HIOPOS guide).
- Read-only SNMP, preferably SNMPv3; with v2c, never the
publiccommunity. - Ports: 10050/TCP from the proxy to the agent and 10051/TCP towards the server. With the proxy in active mode, the venue only needs outbound access.
- The service hours (lunch, dinner, hotel breakfast) and who is on call each day.
1. Server, proxy and agents
The central server, on Ubuntu 24.04 with PostgreSQL and Nginx, from the official repository:
wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu24.04_all.debsudo dpkg -i zabbix-release_latest_7.0+ubuntu24.04_all.deb && sudo apt updatesudo apt install zabbix-server-pgsql zabbix-frontend-php php8.3-pgsql zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2sudo -u postgres createuser --pwprompt zabbixsudo -u postgres createdb -O zabbix zabbixzcat /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz | sudo -u zabbix psql zabbix# DBPassword in /etc/zabbix/zabbix_server.conf; listen and server_name in /etc/nginx/conf.d/zabbix.confsudo systemctl restart zabbix-server zabbix-agent2 nginx php8.3-fpmsudo systemctl enable zabbix-server zabbix-agent2 nginx php8.3-fpmIn the venue, the zabbix-proxy-sqlite3 package and a few lines in /etc/zabbix/zabbix_proxy.conf that decide almost everything:
ProxyMode=0Server=zabbix.corp.exampleHostname=PRX-BRISADBName=/var/lib/zabbix/zabbix_proxy.dbProxyOfflineBuffer=24ProxyMode=0is active: the proxy calls the server, not the other way round. TheHostnamemust match the name given in Administration › Proxies.ProxyOfflineBufferis how many hours the proxy keeps data without a connection. The default is 1: an afternoon internet outage is lost. With 24 hours you cover a whole night.- On the POS server (Windows), Zabbix Agent 2 from the MSI:
ServerandServerActivepoint to the proxy, and 10050 open only from it.
2. Templates: what to watch on each device
| Device | How | Template |
|---|---|---|
| POS server (Windows) | Agent 2 | Windows by Zabbix agent, plus the database service |
| The venue's Linux server, if any | Agent 2 | Linux by Zabbix agent |
| POS tills, handhelds, kitchen screens | ICMP | ICMP Ping |
| Kitchen and receipt printers | ICMP and port 9100 | ICMP Ping plus a TCP check |
| HP and TP-Link switches | SNMP | HP Enterprise Switch by SNMP, TP-LINK by SNMP or Network Generic Device by SNMP |
| MikroTik router | SNMP | The MikroTik SNMP templates (one per model family) |
| UPS | SNMP | APC UPS by SNMP or the vendor's own |
- ICMP Ping needs
fpingon the proxy. It provides three items (icmpping,icmppingloss,icmppingsec) and the Unavailable by ICMP ping trigger. - A printer can answer ping with its lid open or out of paper. The item that really tells you whether it accepts orders is the print port: a simple check
net.tcp.service[tcp,,9100]every minute, not more often. - Card terminals live on their payments network. They are only monitored if the segmentation allows it and it is documented in the PCI DSS scope; otherwise they stay out.
- One host group per venue (
Venues/Brisa) and tags (service:pos,service:floor).
3. The triggers that matter before service
Five problems stop a service. Each one with a clear trigger and the severity it deserves:
- Internet is measured from the venue against two targets at once: a single one gives false alarms. The proxy-not-in-contact one fires on the central server when the whole venue disappears.
- With 4G backup, losing the fibre does not stop service, but you need to know: the WAN link-down trigger in the router template, as Warning.
service.info[...,state]returns 0 with the service running (6 is stopped, 255 that it does not exist). The name, such asMSSQL$TPV, comes fromservices.msc.
4. Alerting the on-call: email and Telegram
First the media types, in Alerts › Media types:
- Email: SMTP server, port 587 with STARTTLS and a dedicated account for Zabbix.
- Telegram: the media type is built in. Create a bot with @BotFather, paste the token into the
api_tokenparameter and try it with Test. On each user, in Users › Users › Media, the Telegram type with the chat ID in Send to.
On each user's media, When active limits the hours (1-7,11:00-24:00) and the severities they receive. Then the action, in Alerts › Actions › Trigger actions:
- Acknowledging the problem stops step 2.
- The message carries
{HOST.NAME},{TRIGGER.NAME}and{EVENT.SEVERITY}: venue and device without opening a laptop.
5. Maintenance periods: closing time, the weekly day off and changes
A closed venue is not an incident. Maintenance periods, in Data collection › Maintenance:
- With data collection keeps storing data: on Tuesday you can see what happened on Monday. Problems are marked as suppressed and, with Pause operations for suppressed problems, they do not alert.
A maintenance period with no end date, or one that covers the whole venue, also hides the real outage. Limit it by tags and always give it an end.
6. The ticket: "an alert storm at 13:05"
Saturday, 13:05. The on-call gets 47 Telegram messages in two minutes: every till, handheld, printer and the kitchen screen of the same venue, not responding. The dining room is full.
- The first one on the list: in Monitoring › Problems, filtered by the venue and sorted by time, the first is
SW-BRISA-01: Unavailable by ICMP pingat 13:04:40. The rest are consequences: one real problem and 46 copies. - Confirm in the venue: the switch is off; someone unplugged the bar's power strip for a coffee machine. By 13:08 everything responds.
- Acknowledge the problem with what happened: the escalation stops.
- Trigger dependencies: every till, printer and screen trigger in the venue depends on
SW-BRISA-01's ping, and the switch depends on Venue proxy not in contact. For triggers that come from a template, the dependency is added on the host, in the Dependencies tab. With that, next time a single alert arrives: the switch's. - The handheld noise: they switch off while charging every night and some go to sleep mid-afternoon. Warning severity, no notification, and a trigger with a separate recovery: problem with
max(/CMD-01/icmpping,#5)=0and recovery withmin(/CMD-01/icmpping,#3)=1, so it does not open and close every minute. - Closing: cause (shared power strip), action (switch on the UPS) and improvement (dependencies in the other venues).
Next steps
- The ICG and HIOPOS guide has the inventory of tills and printers that feeds Zabbix.
- The network you are watching here, with its VLANs and 4G backup, is in the MikroTik and TP-Link: network and WiFi for a restaurant or hotel guide.
- The morning check before service (tills, handhelds, kitchen printers and the backup line) is the idea behind the 34-venue-service-readiness repository on my GitHub.
Is something missing, or different in your environment? Get in touch and I'll fix it.
Tech Career Lab · newsletter
¿Te ha servido? Cada dos semanas envío una idea práctica para perfiles IT: LinkedIn, proyectos, networking y procesos de selección.Found this useful? Every two weeks I send one practical idea for IT professionals: LinkedIn, projects, networking and hiring processes.
Apúntate y llévate las 33 ideasSign up and get the 33 ideas →