Installation, configuration et désinstallation de l'agent Zabbix sous Windows

De Wiki de Romain RUDIGER
Aller à : navigation, rechercher

Participant : Romain RÜDIGER.

Période : 03/09.

Installation de l'agent Zabbix sous Windows

Ce manuel a été testé sous Windows XP pro (FR) et 2003 (US). Il s'agit d'installer l'agent en utilisant un script d'auto configuration permettant de superviser les interfaces réseau ainsi que certains services et processus.

Les fichiers d'installation nécessaires sont dans le tableau ci-dessous et dans cette archive Media:Zabbix install script utils.zip.

Fichiers d'installation Media:Zabbix install script utils.zip
Nom du fichier Fonction
zabbix_install.bat Script d'installation
zabbix_agentd64.exe Binaire de l'agent pour une architecture 64 bits
zabbix_agentd32.exe Binaire de l'agent pour une architecture 32 bits
get_counter_value.bat Script renvoyant la valeur d'un compteur numérique de type typeperf qui se base sur WMI[1].
get_bandwith_usage.bat Script se basant sur get_counter_value.bat qui permet de renvoyer l'utilisation en pourcentage d'une interface réseau.
csv.xsl Ce fichier est utilisé par le script d'installation pour formater la sortie de WMIC[2].
hy.exe Hypatia est un logiciel de calcul écrit par Robert Schächter et utilisé par le script get_bandwith_usage.bat.
  1. Windows Management Instrumentation (WMI) est une interface qui permet d'obtenir des compteurs sur tous les éléments de Windows. Pour plus d'information, voir l'article de Wikipédia : [fr.wikipedia.org/wiki/Windows_Management_Instrumentation]
  2. Windows Management Instrumentation Command (WMIC) est l'utilitaire d'interrogation de l'outil WMI.

Installation par défaut de l'agent

Il suffit alors de lancer avec les droits administrateur la commande suivante :

zabbix_install.bat 192.168.136.98

L'adresse IP 192.168.136.98 correspond à l'adresse du serveur de supervision.

L'agent sera alors installé à la racine du disque système dans le dossier zabbix. Un service Windows nommé "ZABBIX Agent" sera créé et lancé.

Installation personnalisée de l'agent

Pour personnaliser l'installation, il est possible de spécifier le dossier d'installation de l'agent, par exemple avec :

zabbix_install.bat 192.168.136.98 "C:\Program Files\zabbix\"

Il est également possible de spécifier le dossier qui contiendra le fichier de configuration avec :

zabbix_install.bat 192.168.136.98 "C:\Program Files\zabbix\" "C:\zabbix_config_dir\"

Pour pouvoir modifier la configuration par défaut, il faut modifier le script d'installation, en particulier les lignes suivantes :

SET serverport=10051
SET listenport=10050
SET startagents=10
SET debuglevel=3
SET timeout=3

Désinstallation de l'agent Zabbix sous Windows

Pour désinstaller l'agent Zabbix d'un système Windows, il faut utiliser le script zabbix_uninstall.bat. Ce script permet de supprimer le service Windows nommé "ZABBIX Agent" ainsi que les binaires et les scripts. Il ne supprime ni les fichiers de logs ni le fichier de configuration.

Si vous avez installé l'agent avec une configuration par défaut, il suffit d'exécuter ce script sans paramètres :

zabbix_uninstall.bat

Par contre si l'agent n'est pas installé dans le dossier par défaut (la racine du disque système dans le dossier zabbix), il faut passer le dossier en argument de la commande :

zabbix_uninstall.bat "C:\Program Files\zabbix\"


Script d'installation

Le script d'installation permet de déployer de façon automatique un agent Zabbix sous Windows, mais également de superviser les interfaces réseau ainsi que certains services et processus.

Script originalement écrit par Eugene Grigorjev puis modifié par moi même pour :

  • gérer la version 32 et 64 bits des agents ;
  • détecter les interfaces réseau pour les superviser automatiquement ;
  • détecter les services et processus "cobalt" pour les superviser automatiquement.

Les dépendances sont :

  • Dans le même dossier :
    • zabbix_agentd64.exe
    • zabbix_agentd32.exe
    • get_counter_value.bat
    • get_bandwith_usage.bat
    • csv.xsl
    • hy.exe
  • Dans le PATH :
    • typeperf.exe
    • wmic.exe
    • les commandes find et findstr

Voir l'archive Media:Zabbix install script utils.zip.

Le script doit être lancé avec au moins un paramètre : l'adresse IP du serveur de supervision.

Voici le script zabbix_install.bat testé sous Windows XP pro (FR) et Windows 2003 Serveur (US) :

@echo off
REM Installation script for Windows ZABBIX Agent
REM Version 1
REM
REM Written by Eugene Grigorjev, Nov 2005
REM email: eugene.grigorjev@zabbix.com
REM
REM Modified by Romain Rudiger, Mar 2009
REM email: romain.rudiger@novalan.fr

ECHO Installation script for Windows ZABBIX Agent [ http://www.zabbix.com ]
ECHO.
ECHO Welcome to ZABBIX Agent installation!
ECHO.

SET srcbindir=.
SET config_name=zabbix_agentd.conf
SET log_name=zabbix_agentd.log
SET pid_name=zabbix_agentd.pid
SET get_counter=get_counter_value.bat
SET get_bandwith_usage=get_bandwith_usage.bat
SET hy=hy.exe
SET zabbix_agent=zabbix_agentd.exe
SET wmit_format=csv.xsl
REM 32 or 64 bit processor architecture ?
IF "%PROCESSOR_ARCHITECTURE%"=="x86" (
	SET zabbix_agent_src=zabbix_agentd32.exe
) ELSE (
	SET zabbix_agent_src=zabbix_agentd64.exe
)

SET def_install_dir=%SystemDrive%\zabbix
SET def_config_dir=%def_install_dir%
SET service="ZABBIX Agent"

SET Configfile=%def_config_dir%\%config_name%

if "%1"=="" GOTO Err_param

:Install

REM default active parameters

SET Hostname=%COMPUTERNAME%.%USERDNSDOMAIN%
SET serverip=%1
SET serverport=10051
SET listenport=10050
SET startagents=10
SET debuglevel=3
SET timeout=3

REM default hidden parameters, to enable this parameters
REM You can remove '#' symbol from line with this
REM parameters to enable it.

SET listenip=127.0.0.1
SET refAC=120
SET disableAC=1
SET notimewait=1

REM Check parameters and create needed direcoryes.

IF NOT "%3"=="" SET install_dir=%2
IF "%3"=="" SET install_dir=%def_install_dir%
IF NOT EXIST "%install_dir%" MKDIR "%install_dir%"
IF NOT EXIST "%install_dir%" GOTO Err_install_dir

IF NOT "%4"=="" SET config_dir=%3
IF "%4"=="" SET config_dir=%def_config_dir%
IF NOT EXIST "%config_dir%" MKDIR "%config_dir%"
IF NOT EXIST "%config_dir%" GOTO Err_config_dir

SET logfile=%install_dir%\%log_name%
SET pidfile=%install_dir%\%pid_name%

SET Configfile=%config_dir%\%config_name%

ECHO Creating ZABBIX Agent configuration file "%Configfile%"

REM =============================================================================
REM =================== START OF CONFIGURATION FILE =============================
REM =============================================================================
ECHO # This is config file for zabbix_agentd > "%Configfile%"
ECHO # To get more information about ZABBIX, go http://www.zabbix.com >> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO ############ GENERAL PARAMETERS ################# >> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO # List of comma delimited IP addresses (or hostnames) of ZABBIX Servers.  >> "%Configfile%"
ECHO # No spaces allowed. First entry is used for sending active checks. >> "%Configfile%"
ECHO # Note that hostnames must resolve hostname - IP address and >> "%Configfile%"
ECHO # IP address - hostname. >> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO Server=%serverip% >> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO # Server port for sending active checks >> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO ServerPort=%serverport% >> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO # Unique hostname. Required for active checks. >> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO Hostname=%Hostname% >> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO # Listen port. Default is 10050 >> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO ListenPort=%listenport%>> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO # IP address to bind agent >> "%Configfile%"
ECHO # If missing, bind to all available IPs >> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO #ListenIP=%listenip%>> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO # Number of pre-forked instances of zabbix_agentd. >> "%Configfile%"
ECHO # Default value is 5 >> "%Configfile%"
ECHO # This parameter must be between 1 and 16 >> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO StartAgents=%startagents% >> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO # How often refresh list of active checks. 2 minutes by default. >> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO #RefreshActiveChecks=%refAC% >> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO # Disable active checks. The agent will work in passive mode listening server. >> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO #DisableActive=%disableAC% >> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO # Specifies debug level >> "%Configfile%"
ECHO # 0 - debug is not created >> "%Configfile%"
ECHO # 1 - critical information >> "%Configfile%"
ECHO # 2 - error information >> "%Configfile%"
ECHO # 3 - warnings (default) >> "%Configfile%"
ECHO # 4 - for debugging (produces lots of information) >> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO DebugLevel=%debuglevel% >> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO # Name of PID file >> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO #PidFile=%pidfile%>> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO # Name of log file. >> "%Configfile%"
ECHO # If not set, syslog will be used >> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO LogFile=%logfile% >> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO # Spend no more than Timeout seconds on processing >> "%Configfile%"
ECHO # Must be between 1 and 30 >> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO Timeout=%timeout% >> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO ##### Experimental options. Use with care ! ##### >> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO # Get rid of sockets in TIME_WAIT state >> "%Configfile%"
ECHO # This will set socket option SO_LINGER >> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO # NoTimeWait=%notimewait% >> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO ##### End of experimental options >> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO ####### USER-DEFINED MONITORED PARAMETERS ####### >> "%Configfile%"
ECHO # Format: "UserParameter='key','shell command'" >> "%Configfile%"
ECHO # Note that shell command must not return empty string or EOL only >> "%Configfile%"
ECHO. >> "%Configfile%"
ECHO # UserParameter=mysql.version,mysql -V >> "%Configfile%"
echo Creation of the custom UserParameter
echo Network interface...
REM create userparameters for all interfaces
SETLOCAL ENABLEDELAYEDEXPANSION
SET /A int=0
FOR /f "delims=&" %%a IN ('typeperf -qx ^| findstr /R /C:"^\\Network Interface(.*)\\Bytes Received/sec$"') DO (
	FOR /f "tokens=2 delims=()" %%b IN ("%%~a") DO (
		echo "%%b" | find "Loopback" > NUL
		IF ERRORLEVEL 1 (
			ECHO adding the interface %%b
			ECHO -keys are : interface.!int!.sent.Bps/received.Bps/sent.percent/received.percent
			ECHO UserParameter=interface.!int!.sent.Bps,"%install_dir%\%get_counter%" "\Network Interface(%%b)\Bytes Sent/sec" >> "%Configfile%"
			ECHO UserParameter=interface.!int!.received.Bps,"%install_dir%\%get_counter%" "\Network Interface(%%b)\Bytes Received/sec" >> "%Configfile%"
			ECHO UserParameter=interface.!int!.usage.sent.percent,"%install_dir%\%get_bandwith_usage%" "%%b" "Sent" >> "%Configfile%"
			ECHO UserParameter=interface.!int!.usage.received.percent,"%install_dir%\%get_bandwith_usage%" "%%b" "Received" >> "%Configfile%"
			SET /A int=int+1
		)
	)
)
REM create userparameters for all Cobalt process
SET /A int=0
FOR /f "delims=&" %%a IN ('typeperf -qx ^| findstr /R /C:"^\\Process(Cobalt.*)\\ID Process$"') DO (
	FOR /f "tokens=2 delims=()" %%b IN ("%%~a") DO (
		ECHO adding the process %%b
		ECHO -keys are : process.Cobalt.!int!.name/thread.physical.count/thread.count/processor.time/read.Bps/write.Bps
		ECHO UserParameter=process.Cobalt.!int!.name,call echo %%b >> "%Configfile%"
		ECHO UserParameter=process.Cobalt.!int!.thread.physical.count,"%install_dir%\%get_counter%" "\.NET CLR LocksAndThreads(%%b)\# of current physical Threads" >> "%Configfile%"
		ECHO UserParameter=process.Cobalt.!int!.thread.count,"%install_dir%\%get_counter%" "\Process(%%b)\Thread Count" >> "%Configfile%"
		ECHO UserParameter=process.Cobalt.!int!.processor.time,"%install_dir%\%get_counter%" "\Process(%%b)\%% Processor Time" >> "%Configfile%"
		ECHO UserParameter=process.Cobalt.!int!.read.Bps,"%install_dir%\%get_counter%" "\Process(%%b)\IO Read Bytes/sec" >> "%Configfile%"
		ECHO UserParameter=process.Cobalt.!int!.write.Bps,"%install_dir%\%get_counter%" "\Process(%%b)\IO Write Bytes/sec" >> "%Configfile%"
		SET /A int=int+1
	)
)
REM create userparameters for all Cobalt services
WMIC.EXE /OUTPUT:WINSERVICE.txt SERVICE WHERE "name like "Cobalt%%"" GET name /FORMAT:"%srcbindir%\%wmit_format%"
SET /A int=0
FOR /f "usebackq tokens=*" %%a IN (`type WINSERVICE.txt`) DO (
	set name=%%a
	ECHO adding the service %%a
	ECHO -keys are : service.Cobalt.!int!.name/status
	ECHO UserParameter=service.Cobalt.!int!.name,call echo %%a >> "%Configfile%"
	ECHO UserParameter=service.Cobalt.!int!.status,FOR /f "delims=|] tokens=3" %%x IN ('%install_dir%\%zabbix_agent% --config "%Configfile%"  -t service_state["%%a"]'^) DO @echo %%x >> "%Configfile%"
	SET /A int=int+1
)
ENDLOCAL
REM =============================================================================
REM ==================== END OF CONFIGURATION FILE ==============================
REM =============================================================================

ECHO Installing ZABBIX Agent files...

COPY "%srcbindir%\%zabbix_agent_src%" "%install_dir%\%zabbix_agent%"
IF ERRORLEVEL 1 GOTO Err_copy

COPY "%srcbindir%\%get_counter%" "%install_dir%\%get_counter%"
IF ERRORLEVEL 1 GOTO Err_copy_get_counter

COPY "%srcbindir%\%get_bandwith_usage%" "%install_dir%\%get_bandwith_usage%"
IF ERRORLEVEL 1 GOTO Err_copy_get_bandwith_usage

COPY "%srcbindir%\%hy%" "%install_dir%\%hy%"
IF ERRORLEVEL 1 GOTO Err_copy_hy

ECHO Creating ZABBIX Agent service...

CALL "%install_dir%\%zabbix_agent%" --config "%Configfile%" --install
IF ERRORLEVEL 1 GOTO Err_install

ECHO Starting %service% service...

net start %service%
IF ERRORLEVEL 1 GOTO Err_start

ECHO.
ECHO #############################################################
ECHO                     Congratulations!
ECHO   ZABBIX agent for Windows successfuly instaled on Your PC!
ECHO.
ECHO     Installation directory: %install_dir%
ECHO     Configureation file: %Configfile%
ECHO.
ECHO   ZABBIX agent have next configuration:
ECHO     Agent hostname for ZABBIX Server: %Hostname%
ECHO     ZABBIX Server IP: %serverip%
ECHO     ZABBIX Server port: %serverport%
ECHO     ZABBIX Agent listen port: %listenport%
ECHO     Connection timeout: %timeout%
ECHO     Start Agent count: %startagents%
ECHO     Debug level: %debuglevel%
ECHO     Log file: %logfile%
ECHO.
ECHO   IF You want change configurations or more detailed configure
ECHO ZABBIX Agent, you can manualy change configureation file and
ECHO restart ZABBIX Agent service.
ECHO.
ECHO   Now You can configure ZABBIX Server to monitore this PC.
ECHO.
ECHO            Thank You for using ZABBIX software.
ECHO                  http://www.zabbix.com
ECHO #############################################################
ECHO.

GOTO End

:Err_param
ECHO INSTALL ERROR: Please use script with required parameters!
GOTO Syntax

:Err_start
ECHO INSTALL ERROR: Can't start ZABBIX Agent service!
GOTO Syntax

:Err_install
ECHO INSTALL ERROR: Can't install ZABBIX Agent as service!
GOTO Syntax

:Err_copy
ECHO INSTALL ERROR: Can't copy file "%srcbindir%.%zabbix_agent_src%" in to "%install_dir%"!
GOTO Syntax

:Err_copy_get_counter
ECHO INSTALL ERROR: Can't copy file "%srcbindir%.%get_counter%" in to "%install_dir%"!
GOTO Syntax

:Err_copy_get_bandwith_usage
ECHO INSTALL ERROR: Can't copy file "%srcbindir%.%get_bandwith_usage%" in to "%install_dir%"!
GOTO Syntax

:Err_copy_hy
ECHO INSTALL ERROR: Can't copy file "%srcbindir%.%hy%" in to "%install_dir%"!
GOTO Syntax

:Err_install_dir
ECHO INSTALL ERROR: Can't create installation directory "%install_dir%"!
GOTO Syntax

:Err_config_dir
ECHO INSTALL ERROR: Can't create directory "%config_dir%" for configuretion file!
GOTO Syntax

:Syntax
ECHO.
ECHO -------------------------------------------------------------
ECHO Usage:
ECHO    %0 "server ip" ["install path]" ["config file dir"]
ECHO.
ECHO    Default installation path is "%def_install_dir%"
ECHO    Default configureation file is "%Configfile%"
ECHO -------------------------------------------------------------

:End
@echo on

Script de désinstallation

Le script de désinstallation permet de supprimer l'agent Zabbix d'un système d'exploitation Windows.

Script originalement écrit par Eugene Grigorjev puis modifié par moi même pour supprimer également les scripts :

  • get_counter_value.bat
  • get_bandwith_usage.bat

Voici le script zabbix_uninstall.bat testé sous Windows XP pro (FR) et Windows 2003 Serveur (US) :

@echo off
REM Uninstallation script for Windows ZABBIX Agent
REM Version 1
REM
REM Written by Eugene Grigorjev, Nov 2005
REM email: eugene.grigorjev@zabbix.com
REM
REM Modified by Romain Rudiger, Mar 2009
REM email: romain.rudiger@novalan.fr

ECHO Uninstallation script for Windows ZABBIX Agent [ http://www.zabbix.com ]
ECHO.
ECHO Welcome to ZABBIX Agent uninstallation!
ECHO.

SET def_install_dir=%SystemDrive%\zabbix

IF "%1"=="help" GOTO Syntax
IF "%1"=="/help" GOTO Syntax
IF "%1"=="--help" GOTO Syntax
IF "%1"=="-help" GOTO Syntax
IF "%1"=="-h" GOTO Syntax
IF "%1"=="/h" GOTO Syntax

IF NOT "%1"=="" SET install_dir=%1
IF "%1"=="" SET install_dir=%def_install_dir%
ECHO install_dir=%install_dir%
IF NOT EXIST "%install_dir%" GOTO Err_path

REM set and check agentd
SET zabbix_agent=%install_dir%\zabbix_agentd.exe
IF NOT EXIST "%zabbix_agent%" GOTO Err_agent

REM set and check config file
SET config_name=zabbix_agentd.conf
SET Configfile=%install_dir%\%config_name%
IF NOT EXIST "%Configfile%" GOTO Err_config

SET service="ZABBIX Agent"
net start | find %service%
IF ERRORLEVEL 1 (
	ECHO The service %service% is not start
	GOTO Remove
)

ECHO Stopping %service% service...
net stop "ZABBIX Agent"
IF ERRORLEVEL 1 ECHO Can't stop %service% service!

:Remove
ECHO Removing %service% service...
CALL "%zabbix_agent%" --config "%Configfile%" --uninstall
IF ERRORLEVEL 1 GOTO Err_remove

ECHO Removing files
del /Q "%install_dir%\*.exe"
del /Q "%install_dir%\*.bat"

ECHO.
ECHO #############################################################
ECHO.
ECHO ZABBIX agent for Windows successfuly uninstaled from Your PC.
ECHO.
ECHO   Now you can remove:
ECHO           ZABBIX Agent binary file
ECHO           ZABBIX Agent log file (see config file)
ECHO           ZABBIX Agent config file
ECHO.
ECHO                  http://www.zabbix.com
ECHO.
ECHO #############################################################
ECHO.

GOTO End

:Err_agent
ECHO UNINSTAL ERROR: Can't find ZABBIX Agent binary file '%zabbix_agent%'!
GOTO Syntax

:Err_config
ECHO UNINSTAL ERROR: Can't find ZABBIX Agent configuration file '%Configfile%'!
GOTO Syntax

:Err_path
ECHO UNINSTAL ERROR: Please set the correct installation directory!
GOTO Syntax

:Err_remove
ECHO UNINSTALL ERROR: Can't remove ZABBIX Agent service"!
GOTO Syntax

:Syntax
ECHO.
ECHO -------------------------------------------------------------
ECHO Usage:
ECHO    %0 ["install path"]
ECHO.
ECHO    Default installation path is "%def_install_dir%"
ECHO -------------------------------------------------------------

:End
@echo on