This is a translation of the original English documentation page. Help us make it better.

2 Remote opdrachten

Overzicht

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:

  • Automatisch een bepaalde toepassing (webserver, middleware, CRM) opnieuw op te starten als er geen reactie is.
  • Het IPMI 'reboot' commando te gebruiken om een externe server opnieuw op te starten als er geen reactie is op verzoeken.
  • Automatisch schijfruimte vrij te maken (oudere bestanden verwijderen, /tmp opschonen) als er bijna geen schijfruimte meer is.
  • Een virtuele machine van de ene fysieke server naar de andere te migreren op basis van de CPU-belasting.
  • Nieuwe knooppunten aan een cloudomgeving toe te voegen als er onvoldoende CPU (schijf, geheugen, wat dan ook) bronnen zijn.

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:

  • het toevoegen van een AllowKey=system.run[*] parameter in de agentconfiguratie;
  • het instellen van de parameter EnableRemoteCommands op '1' in de proxyconfiguratie.

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.

Limiet voor externe opdrachten

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

Configuratie

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:

  • Definieer de juiste voorwaarden. Stel in dit voorbeeld in dat de actie wordt geactiveerd bij elk rampenprobleem met een van de Apache-toepassingen:

  • Op het tabblad Operaties, klik op Toevoegen in het blok Operaties/Hersteloperaties/Updateoperaties.
  • Selecteer in het vervolgkeuzemenu Operatie een van de vooraf gedefinieerde scripts.

  • Selecteer de doelwitlijst voor het script.

Vooraf gedefinieerde scripts

Alle scripts (webhook, script, SSH, Telnet, IPMI) die beschikbaar zijn voor actieoperaties zijn gedefinieerd in globale scripts.

Bijvoorbeeld:

sudo /etc/init.d/apache restart 

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.

Toegangsrechten

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:

visudo

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.

Externe opdrachten met meerdere interfaces

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:

  • Standaardinterface van Zabbix-agent
  • Standaardinterface van SNMP
  • Standaardinterface van JMX
  • Standaardinterface van IPMI

IPMI externe opdrachten

Voor IPMI externe opdrachten moet de volgende syntaxis worden gebruikt:

<commando> [<waarde>]

waarbij

  • <commando> - een van de IPMI-commando's zonder spaties
  • <waarde> - 'on', 'off' of elk positief geheel getal. <waarde> is een optionele parameter.

Voorbeelden

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