Comment récupérer des données à partir de scripts PowerShell à l’aide de Zabbix

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 `Ajoutez la ligne suivante à votre fichier `zabbix_agent2.conf` : `ini UserParameter=ActiveRDSSessions, powershell -NoProfile -ExecutionPolicy bypass -File « C:\Program Files\Zabbix Agent 2\Script\GetActiveRDPSessionCount.ps1″`.Redémarrez ensuite le service de l’agent Zabbix. Vous pouvez le faire via PowerShell : `powershell Get-Service ‘Zabbix Agent 2’ | Restart-Service -Force`.Pour vérifier le bon fonctionnement, exécutez la commande suivante : `bash zabbix_get -s 127.0.0.1 -p 10050 -k ActiveRDSSessions`.Si elle renvoie un nombre, tout est en ordre.À noter : les scripts PowerShell peuvent être lents. Si votre script est complexe, envisagez d’augmenter le délai d’expiration dans `zabbix_agent2.conf` : `ini Timeout=20`.La valeur par défaut est de 3 secondes, ce qui est souvent insuffisant. Vous pourriez également rencontrer des erreurs de connexion telles que « connexion fermée de force ».Pour éviter cela, assurez-vous que` autorise les connexions depuis localhost : serveur ini=192.168.10.100, 127.0.0.1 Une fois la commande fonctionnelle, accédez à votre interface Zabbix, créez un nouvel élément : – Nom : Nombre de sessions RDS actives – Type : Agent Zabbix (actif) – Clé : ActiveRDSSessions – Type de données : Numérique (non signé) – Intervalle de mise à jour : 1 min (oui, toutes les minutes) – Et définissez les périodes d’historique et de tendance appropriées. Vérifiez dans `->` si les données apparaissent.

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 à `->` et vérifiez si votre nouvel élément renvoie des valeurs correctes.

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 !