Met externe opdrachten kun je bepalen dat een bepaalde vooraf gedefinieerde opdracht automatisch wordt uitgevoerd op de gemonitorde host bij een bepaalde voorwaarde.
Hierdoor zijn externe opdrachten een krachtig mechanisme voor slimme proactieve monitoring.
In de meest voor de hand liggende toepassingen van deze functie kun je proberen om:
Het configureren van een actie voor externe opdrachten is vergelijkbaar met het configureren voor het verzenden van een bericht, het enige verschil is dat Zabbix een opdracht zal uitvoeren in plaats van een bericht te verzenden.
Externe opdrachten kunnen worden uitgevoerd door Zabbix-server, proxy of agent. Externe opdrachten op de Zabbix-agent kunnen rechtstreeks door de Zabbix-server worden uitgevoerd of via een Zabbix-proxy. Zowel op de Zabbix-agent als op de Zabbix-proxy zijn externe opdrachten standaard uitgeschakeld. Ze kunnen worden ingeschakeld door:
AllowKey=system.run[*]
parameter in de agentconfiguratie;Externe opdrachten die worden uitgevoerd door de Zabbix-server worden uitgevoerd zoals beschreven in Uitvoering van opdrachten, inclusief controle op de exitcode.
Externe opdrachten worden uitgevoerd, zelfs als het doelwit van de host in onderhoudsmodus staat.
Het limiet voor externe opdrachten na het oplossen van alle macro's is afhankelijk van het type database en het karakterset (niet-ASCII-karakters vereisen meer dan één byte om te worden opgeslagen):
Database | Limiet in tekens | Limiet in bytes |
---|---|---|
MySQL | 65535 | 65535 |
Oracle Database | 2048 | 4000 |
PostgreSQL | 65535 | niet beperkt |
SQLite (alleen Zabbix-proxy) | 65535 | niet beperkt |
Die externe opdrachten die worden uitgevoerd op de Zabbix-agent (aangepaste scripts) moeten eerst worden ingeschakeld in de agent configuratie.
Zorg ervoor dat de parameter AllowKey=system.run[<commando>,*] is toegevoegd voor elk toegestaan commando in de agentconfiguratie om een specifiek commando met de nowait-modus toe te staan. Herstart de agentdienst als je deze parameter wijzigt.
Externe opdrachten werken niet met actieve Zabbix-agents.
Vervolgens, bij het configureren van een nieuwe actie in Configuratie → Acties:
Alle scripts (webhook, script, SSH, Telnet, IPMI) die beschikbaar zijn voor actieoperaties zijn gedefinieerd in globale scripts.
Bijvoorbeeld:
In dit geval zal Zabbix proberen een Apache-proces opnieuw op te starten. Zorg ervoor dat het commando wordt uitgevoerd op de Zabbix-agent (klik op de knop Zabbix-agent bij Uitvoeren op).
Let op het gebruik van sudo - de Zabbix-gebruiker heeft standaard geen rechten om systeemdiensten opnieuw op te starten. Zie hieronder voor tips over hoe je sudo kunt configureren.
De Zabbix-agent moet worden uitgevoerd op de externe host en inkomende verbindingen accepteren. De Zabbix-agent voert commando's uit op de achtergrond.
Externe opdrachten op de Zabbix-agent worden uitgevoerd zonder time-out via de sleutel system.run[,nowait] en worden niet gecontroleerd op uitvoeringsresultaten. Op de Zabbix-server en Zabbix-proxy worden externe opdrachten uitgevoerd met time-out zoals ingesteld in de parameter TrapperTimeout van het bestand zabbix_server.conf of zabbix_proxy.conf en worden gecontroleerd op uitvoeringsresultaten.
Zorg ervoor dat de 'zabbix'-gebruiker uitvoeringsrechten heeft voor geconfigureerde commando's. Het kan handig zijn om sudo te gebruiken om toegang te verlenen tot bevoorrechte commando's. Om toegang te configureren, voer je als root het volgende uit:
Voorbeeldregels die in het bestand sudoers kunnen worden gebruikt:
# Staat de gebruiker 'zabbix' toe om alle commando's uit te voeren zonder wachtwoord.
zabbix ALL=NOPASSWD: ALL
# Staat de gebruiker 'zabbix' toe om Apache opnieuw op te starten zonder wachtwoord.
zabbix ALL=NOPASSWD: /etc/init.d/apache restart
Op sommige systemen zal het bestand sudoers voorkomen dat niet-lokale gebruikers commando's kunnen uitvoeren. Om dit te wijzigen, reageer je de optie requiretty uit in het bestand /etc/sudoers.
Als het doelsysteem meerdere interfaces heeft van het geselecteerde type (Zabbix-agent of IPMI), worden externe opdrachten uitgevoerd op de standaardinterface.
Het is mogelijk om externe opdrachten uit te voeren via SSH en Telnet met een andere interface dan die van de Zabbix-agent. De beschikbare interface om te gebruiken wordt in de volgende volgorde geselecteerd:
Voor IPMI externe opdrachten moet de volgende syntaxis worden gebruikt:
waarbij
Voorbeelden van globale scripts die als externe opdrachten in actieoperaties kunnen worden gebruikt.
Voorbeeld 1
Herstart van Windows onder bepaalde voorwaarden.
Om Windows automatisch opnieuw op te starten bij een probleem dat wordt gedetecteerd door Zabbix, definieer het volgende script:
Scriptparameter | Waarde |
---|---|
Bereik | 'Actiebewerking' |
Type | 'Script' |
Opdracht | c:\windows\system32\shutdown.exe -r -f |
Voorbeeld 2
Herstart de host met behulp van IPMI-besturing.
Scriptparameter | Waarde |
---|---|
Bereik | 'Actiebewerking' |
Type | 'IPMI' |
Opdracht | reset |
Voorbeeld 3
Schakel de host uit met behulp van IPMI-besturing.
Scriptparameter | Waarde |
---|---|
Bereik | 'Actiebewerking' |
Type | 'IPMI' |
Opdracht | power off |