Contexte : étendre l'agent Zabbix avec des scripts personnalisés (UserParameter) et gérer les agents d'un parc Windows · Testé sur : postes Windows avec Zabbix Agent 2 · Dernière vérification : contenu de 2023 non revérifié
Un UserParameter associe une clé Zabbix à une commande : quand le serveur demande cette clé, l'agent exécute la commande et renvoie sa sortie. Cette page montre :
Ouvrez le fichier de configuration de l'agent, C:\Program Files\Zabbix Agent 2\zabbix_agent2.conf, et vérifiez ou ajoutez les lignes suivantes :
Server=<IP_SERVEUR_ZABBIX>,127.0.0.1
UnsafeUserParameters=1
Timeout=25
Pour un élément de type Agent Zabbix (actif), comme celui de l'étape 4, l'agent doit aussi connaître le serveur dans
ServerActive=<IP_SERVEUR_ZABBIX>, et son paramètreHostnamedoit correspondre exactement au nom de l'hôte dans Zabbix.
Créez un dossier pour les scripts :
New-Item -ItemType Directory -Path "C:\Program Files\Zabbix Agent 2\Scripts" -Force
Ajoutez cette ligne au fichier de configuration de l'agent :
UserParameter=GetWindowsUpdatesByDate,powershell -NoProfile -ExecutionPolicy bypass -File "C:\Program Files\Zabbix Agent 2\Scripts\GetWindowsUpdatesByDate.ps1"
Redémarrez l'agent pour prendre en compte la configuration :
Restart-Service -DisplayName "Zabbix Agent 2"
Enregistrez le script suivant sous C:\Program Files\Zabbix Agent 2\Scripts\GetWindowsUpdatesByDate.ps1 :
# Nombre de mises à jour Windows installées, regroupées par date
$updates = Get-HotFix | Where-Object { $_.InstalledOn -ne $null } | Sort-Object -Property InstalledOn -Descending
$groupedUpdates = $updates | Group-Object -Property { $_.InstalledOn.ToString('dd/MM/yyyy') }
$output = ""
foreach ($group in $groupedUpdates) {
$date = $group.Name
$count = $group.Count
$output += "${date}: $count maj; "
}
Write-Host $output.TrimEnd("; ")
Testez la clé localement, depuis une console PowerShell lancée en administrateur :
& "C:\Program Files\Zabbix Agent 2\zabbix_agent2.exe" -c "C:\Program Files\Zabbix Agent 2\zabbix_agent2.conf" -t GetWindowsUpdatesByDate
La sortie attendue a la forme JJ/MM/AAAA: N maj; JJ/MM/AAAA: N maj.
Dans l'interface de Zabbix, ouvrez le modèle de supervision voulu (Collecte de données > Modèles) ou directement l'hôte, puis Éléments > Créer un élément :
| Champ | Valeur |
|---|---|
| Nom | Windows Updates by Date |
| Type | Agent Zabbix (actif) |
| Clé | GetWindowsUpdatesByDate |
| Type d'information | Journal |
| Intervalle de mise à jour | 1m |
Un intervalle d'une minute sert surtout aux tests. En exploitation, une valeur plus longue (par exemple
1h) suffit pour ce type d'information.
Ce script recherche dans le registre tous les programmes dont le nom commence par « Zabbix Agent » (versions 32 et 64 bits), puis les désinstalle en mode silencieux avec MsiExec. Exécutez-le dans une console PowerShell lancée en administrateur.
# Récupérer les informations des programmes installés
$installedPrograms = Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, UninstallString
$installedPrograms += Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, UninstallString
# Nom de base à rechercher
$zabbixBaseName = "Zabbix Agent"
# Filtrer les programmes Zabbix Agent et les désinstaller
$zabbixAgents = $installedPrograms | Where-Object { $_.DisplayName -like "$zabbixBaseName*" }
foreach ($agent in $zabbixAgents) {
if ($agent.UninstallString) {
Write-Host "Désinstallation de: $($agent.DisplayName)"
# Modifier la chaîne de désinstallation pour une désinstallation silencieuse
$silentUninstallString = $agent.UninstallString -replace 'MsiExec.exe', '' -replace '/I', '/X' -replace '/i', '/x'
$silentUninstallString += ' /quiet /norestart'
# Exécuter la chaîne de désinstallation
Start-Process "MsiExec.exe" -ArgumentList $silentUninstallString -Wait -NoNewWindow
} else {
Write-Host "Chaîne de désinstallation manquante pour: $($agent.DisplayName)"
}
}
Write-Host "Script terminé."
Sur un agent Linux, le mécanisme est identique. Le script Bash doit être exécutable et lisible par l'utilisateur zabbix, et l'UserParameter se déclare dans un fichier .conf du dossier inclus par l'agent : /etc/zabbix/zabbix_agentd.d/ pour l'agent classique, /etc/zabbix/zabbix_agent2.d/ pour l'agent 2.
UserParameter=ma.cle,/usr/local/bin/mon-script.sh
Redémarrez l'agent, puis testez la clé (exemple avec l'agent 2) :
sudo systemctl restart zabbix-agent2
zabbix_agent2 -t ma.cle
Windows Updates by Date de l'hôte reçoit des valeurs.Get-Service *zabbix* ne renvoie rien.ServerActive et Hostname dans la configuration de l'agent, puis le journal de l'agent.-ExecutionPolicy bypass, et augmentez Timeout si le script est lent.