Comment configurer l’agent Zabbix pour extraire des données à partir de scripts PowerShell
Configurer Zabbix pour surveiller les systèmes Windows via PowerShell n’est pas si simple, surtout si vous êtes habitué aux configurations par défaut. En effet, il arrive qu’on ait besoin de métriques personnalisées, comme le nombre de sessions RDP actives ou le nombre de jours écoulés depuis la dernière mise à jour Windows, et les scripts PowerShell sont parfaits pour cela. Mais il ne suffit pas d’exécuter un script ; il faut configurer correctement l’agent Zabbix. Ce guide pratique vous permettra de configurer vos scripts pour qu’ils envoient des données à Zabbix sans problème, en vous mettant en garde contre quelques pièges. Vous y découvrirez des opérations de base comme la modification des fichiers de configuration, le redémarrage des services et l’exécution de commandes de test. L’objectif principal ? S’assurer que l’agent peut exécuter vos scripts, collecter les données et les renvoyer sans erreur ni délai d’attente. C’est un peu délicat : il faut un peu de pratique, notamment pour les stratégies d’exécution et les délais d’attente, mais une fois que tout fonctionne, vous vous demanderez pourquoi vous n’y avez pas pensé plus tôt.
Comment résoudre les problèmes de surveillance PowerShell sous Windows avec l’agent Zabbix ?
Méthode 1 : Utilisation de UserParameter pour exécuter un script PowerShell
Voici la méthode classique. Vous créez un script qui génère une valeur (comme le nombre de sessions RDP), vous le stockez dans un emplacement sécurisé et vous configurez Zabbix pour qu’il l’exécute. Son utilité ? Elle vous permet d’écrire des extraits de code PowerShell personnalisés et de les exécuter à la demande. Une fois correctement configuré, Zabbix récupère les données à intervalles réguliers et vous obtenez un graphique clair ou une alerte en cas d’anomalie.– Commencez par créer votre script. Par exemple, un script qui compte les sessions RDP actives : `powershell $RDSsessions = qwinsta | ForEach-Object { $_ -replace « \s{2, 18} », « , » } | ConvertFrom-Csv $activeSessions = $RDSsessions | Where-Object { $_. State -eq ‘Active’ } | Measure-Object |` Sélectionnez l’objet et développez la propriété Count.Écrivez la valeur de $activeSessions. Enregistrez le script dans `C:\Program Files\Zabbix Agent 2\Script\GetActiveRDPSessionCount.ps1`.Modifiez ensuite votre fichier `zabbix_agent2.conf` (qui se trouve généralement dans `
Méthode 2 : Utilisation de system.run pour l’exécution instantanée des commandes
Si vous souhaitez plus de flexibilité (ou si une configuration moins sécurisée vous convient), vous pouvez exécuter des commandes directement depuis Zabbix via `system.run`.Cela simplifie les choses, mais attention : vous exécutez des commandes arbitraires, la sécurité est donc relativement faible.- Commencez par l’activer dans `zabbix_agent2.conf` : `ini AllowKey=system.run[*]` – Ajoutez ensuite un élément : – Nom : Jours depuis la dernière mise à jour Windows – Type : Agent Zabbix – Clé : `system.run[powershell.exe -NoProfile -ExecutionPolicy Bypass -Command « (New-Timespan -Start ((Get-HotFix | Sort-Object -Property InstalledOn | Select-Object -Last 1).InstalledOn) -End (Get-Date)).Days »]` – Type de données : Numérique (non signé) – Intervalle de mise à jour : 1 jour – Les périodes d’historique et de tendance sont définies en conséquence. Cette commande récupère la date du dernier correctif Windows et calcule le nombre de jours écoulés depuis. Ce n’est pas parfait, car l’exécution peut prendre une seconde ou deux, mais ça dépanne.Remarque : Sur certaines configurations, vous pourriez rencontrer des erreurs telles que « Délai d’attente dépassé » ou « Connexion réinitialisée ».Pour les résoudre, assurez-vous que `Timeout=20` est défini et que l’agent peut accepter les connexions locales. Enfin, une fois la configuration terminée, accédez à `
Honnêtement, configurer la surveillance PowerShell n’est pas toujours chose aisée ; il arrive de rencontrer des erreurs incompréhensibles jusqu’à ce qu’on ajuste légèrement la configuration. Mais une fois la configuration maîtrisée, on obtient une grande quantité de données flexibles importées dans Zabbix depuis nos serveurs Windows.
Résumé
- Créez le script PowerShell et placez-le dans un dossier dédié.
- Modifiez `zabbix_agent2.conf` pour ajouter des paramètres utilisateur ou activer `system.run`.
- Redémarrez l’agent Zabbix et testez avec `zabbix_get`.
- Ajustez les paramètres de délai d’expiration si nécessaire.
- Configurez vos éléments Zabbix pour qu’ils extraient ces données régulièrement.
Conclure
Intégrer des scripts PowerShell personnalisés dans Zabbix demande un peu de patience, mais rien de bien compliqué : il suffit de modifier la configuration, de créer des scripts et de faire des tests. Sur certaines configurations, plusieurs essais peuvent être nécessaires, notamment pour gérer les délais d’attente et les permissions, mais une fois la configuration maîtrisée, c’est bon. J’espère que cela vous fera gagner du temps. Bon courage pour la mise au point de vos scripts et la surveillance !