Met externe commando's kunt u bepalen dat een bepaald vooraf gedefinieerd commando automatisch wordt uitgevoerd op de gemonitorde host op basis van een bepaalde voorwaarde.
Externe commando's vormen dus een krachtig mechanisme voor intelligente proactieve monitoring.
In de meest voor de hand liggende toepassingen van deze functie kunt u het volgende proberen:
Het configureren van een actie voor externe commando's is vergelijkbaar met het configureren van een bericht, het enige verschil is dat Zabbix een commando zal uitvoeren in plaats van een bericht te verzenden.
Externe commando's kunnen worden uitgevoerd door de Zabbix-server, proxy of agent. Externe commando's op de Zabbix-agent kunnen rechtstreeks worden uitgevoerd door de Zabbix-server of via een Zabbix-proxy. Zowel op de Zabbix-agent als op de Zabbix-proxy zijn externe commando's standaard uitgeschakeld. Ze kunnen worden ingeschakeld door:
AllowKey=system.run[*]
parameter in de agentconfiguratie.Externe commando's die worden uitgevoerd door de Zabbix-server worden uitgevoerd zoals beschreven in Command execution, inclusief het controleren van de exit code.
Externe commando's worden uitgevoerd, zelfs als de doelhost in onderhoud is.
Het limiet voor externe opdrachten na het oplossen van alle macro's is afhankelijk van het type database en de tekenset (niet-ASCII-tekens 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 commando's die worden uitgevoerd op de Zabbix-agent (aangepaste scripts) moeten eerst worden ingeschakeld in de agentconfiguratie. Zorg ervoor dat de AllowKey=system.run[<command>,*] parameter is toegevoegd voor elk toegestaan commando in de agentconfiguratie om het specifieke commando toe te staan met de nowait-modus. Start de agentdaemon opnieuw op als u deze parameter wijzigt.
Externe commando's werken niet met actieve Zabbix-agents.
Vervolgens, bij het configureren van een nieuwe actie in Alerts → Actions → Trigger actions:
Scripts die beschikbaar zijn voor actiebewerkingen (webhook, script, SSH, Telnet, IPMI) worden gedefinieerd in algemene scripts.
Bijvoorbeeld:
In dit geval zal Zabbix proberen een Apache-proces te herstarten. 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 toestemming om systeemdiensten te herstarten. Zie hieronder voor hints over hoe u 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 commando's op de Zabbix-agent worden zonder time-out uitgevoerd met de systeem.run[,nowait] sleutel en worden niet gecontroleerd op uitvoeringsresultaten. Op de Zabbix-server en de Zabbix-proxy worden externe commando's uitgevoerd met een time-out zoals ingesteld in de TrapperTimeout-parameter van het zabbix_server.conf- of zabbix_proxy.conf-bestand en worden gecontroleerd op uitvoeringsresultaten.
Zorg ervoor dat de 'zabbix'-gebruiker uitvoerrechten heeft voor geconfigureerde commando's. Het kan interessant zijn om sudo te gebruiken om toegang te geven tot bevoorrechte commando's. Om toegang te configureren, voert u uit als root:
Voorbeeldregels die in het sudoers-bestand kunnen worden gebruikt:
# Hiermee kan de 'zabbix'-gebruiker alle opdrachten uitvoeren zonder wachtwoord.
zabbix ALL=NOPASSWD: ALL
# Hiermee kan de 'zabbix'-gebruiker Apache herstarten zonder wachtwoord.
zabbix ALL=NOPASSWD: /etc/init.d/apache restart
Op sommige systemen voorkomt het sudoers-bestand dat niet-lokale gebruikers opdrachten kunnen uitvoeren. Om dit te wijzigen, kunt u de requiretty-optie in /etc/sudoers uitcommentariëren.
Als het doelsysteem meerdere interfaces heeft van het geselecteerde type (Zabbix-agent of IPMI), worden externe commando's uitgevoerd op de standaard interface.
Het is mogelijk om externe commando's via SSH en Telnet uit te voeren met een andere interface dan die van de Zabbix-agent. De beschikbare interface om te gebruiken wordt geselecteerd in de volgende volgorde:
Voor IPMI externe commando's moet de volgende syntaxis worden gebruikt:
waarbij
Voorbeelden van globale scripts die als externe opdrachten kunnen worden gebruikt in actie-operaties.
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 |