Sonde Centreon : Check si une IP est en cours d’utilisation et l’afficher dans la supervision

Principe / cas pratique :

Lorsqu’un intervenant/prestataire vient chez nous (mon client) faire une maintenance/intervention, il peut arriver qu’on lui fournisse une IP pré définie « bypassant » le proxy/firewall. Il est important de savoir quant elle est utilisée. Il faut donc la superviser.
Grosso Modo, c’est un check_ping avec un code de retour inversé en fonction du résultat.

Si l’IP est en cours d’utilisation, alors la sonde est « Critical » et remonte dans la supervision. Si ce n’est pas le cas, la sonde est « OK »

NB: Il existe surement une autre solution mais, pourquoi faire simple quand on peut faire compliqué ? non ?

Lets Go :

Connectez vous en SSH sur votre serveur Centreon et aller dans le répertoire des plugins (en fonction de votre supervision):
cd /usr/lib/nagios/plugins
ou
cd /usr/lib/centreon/plugins
ou
cd /usr/lib64/nagios/plugins
Puis, on va créer le fichier:
vi check_ping_down.sh
collez le code ci dessous :
#!/bin/bash
# Xavier BIANCHI - janvier 2019

[ -z $1 ] && echo -e "Retourne une erreur si host en vie"


if ping $1 -w 2 -n -c 2 -q > /dev/null
then
    echo "CRITICAL, IP en cours d'utilisation"
        exit 2
else
    echo "OK , IP non utilisée"
        exit 0
fi

echo $exit

Fermez le fchier (sur VI c’est la commande :wq! ) et donnez les droits d’exécution du script avec :

chmod +x check_ping_down.sh

Vous retrouverez votre script SH dans la liste des plugin de votre centreon lorsque vous allez créer la « Command »

Configuration de la « Command » :

La commande est relativement simple puisque la seule variable qu’il y a lorsque vous allez créer le « service » et l’associer à un « host » ou « hostgroup » est la variable $HOSTADDRESS$ qui correspond à l’adresse IP de l’HOST.

Exemple de résultat lors que l’IP est utilisée :

Superviser l’utilisation de la bande passante d’une Machine Virtuelle

Objectif :

Avoir une alarme du vCenter (via Email ou Notification) lorsqu’une machine virtuelle devient un peu trop bavarde sur le réseau. La sonde va « regarder » l’utilisation réseau de la carte virtuelle que se soit en sortie ou en entrée et lancer une alarme en fonction d’un seuil qu’on aura définie.

Pré requis :

  • Accès au vCenter (version flash)
  • Une machine virtuelle

Lets go !

1) Connectez vous au vCenter, puis allez dans la vue « VM et modèle » sélectionnez une Machine virtuelle. Dans mon cas j’ai sélectionné notre serveur WSUS.

2) Allez dans l’onglet « Gérer » puis « Définitions des Alarmes »

3) Cliquez sur le petit « + » vert 4) Renseignez un nom d’alarme, une description. Laissez les autres options sélectionnées puis cliquez sur « suivant ».

5) Cliquez sur le « + » vert pour ajouter une condition.

6) Sélectionnez la condition « Utilisation du réseau VM » puis définissez un seuil d’alarme pour l’avertissement puis pour la condition critique. ATTENTION : C’est un seul en Ko/s ! Personnellement, j’ai définie un seuil à 7000Ko/s et 12000Ko/s sur une durée de 5 minutes, mais c’est en fonction de votre besoin.

7) Cliquez sur le « + » vert pour ajouter une action

8) Sélectionnez l’action « Envoyer un e-mail de notification », puis renseignez l’email dans la colonne « configuration » .
Vous pourriez très bien en choisir une autre comme « Eteindre la VM » etc… Vous pouvez aussi ajouter plusieurs actions… etc.

9) Cliquez sur « Terminer » . Votre Alarme est prête !

Sachez que vous pouvez créer ce genre d’alarme sur un répertoire de machine virtuelle pour superviser l’ensemble des VM de ce dossier.
Exemple ci dessous avec le répertoire « Database »

Chiffrer le Mot de Passe pour la connexion au VCenter via Powercli (Powershell)

Pourquoi ?

La question ne se pose même pas, un mot de passe en clair dans un script, c’est dégueulasse.
Attention : Je ne propose pas non plus la solution ultime en matière de sécurité mais cela restera plus « propre » qu’un mot de passe visible dans le script.

Pré requis :

Le Script :

#Variables
$vcenter = "LE FQDN DE VOTRE VCENTER"
$credfile = ".\credfile2.xml"
$user = Read-Host -Prompt "Nom d'utilisateur, exemple CONSO.ORG\Admin"
$Pass = Read-Host -Prompt "le mot de passe" -AsSecureString
#Génération du fichier
Add-PSSnapIn VMware.VimAutomation.Core
New-VICredentialStoreItem -host $vcenter -user $user -password $Pass -file $credfile

Le principe :

Le script en Powershell va générer un fichier de configuration en XML contenant le login en clair 🙁 mais le mot de passe chiffré.
Le fichier XML se trouvera à l’emplacement du script.

Lors de l’exécution du script, il faudra rentrer le login et mot de passe

Le Fichier XML peut être utilisé lors de votre script nécessitant une connexion au vcenter via la commande
Get-VICredentialStoreItem -file "chemin vers le fichier XML généré"

!!!! Attention, ce fichier XML ne doit être accessible que par vous, ou un compte ayant besoin de lire le fichier, ne négligez pas son stockage !!!!

Lister les Machines Virtuelles comportant des snapshots

Pourquoi ?

Mais Xavier ! Qu’elle est l’intérêt de faire un script qui liste les VM ayant des snapshots, sachant qu’il existe des outils comme RVTOOLS ou des solutions « packagés » comme VeeamONE ?!!!
Réponse :
– Ca coute rien (ou juste du temps)
– On peut planifier le script pour avoir un rapport Hebdo (contrairement à RVTOOL)
– Le PowerShell c’est bien

Pré requis :

Le Script :

#Variables
$vcenter = "LE FQDN DU VCENTER"
#le credfile correspond au fichier XML généré lors du précédent tuto (voir prérequis)
$credfile = ".\credfile.xml"
$creds = Get-VICredentialStoreItem -file $credfile
$smtp = "adresse du SMTP"
$to = "adresse du destinataire"
$from = "vcenter@votredomain.fr"
$subject = "Rapport Hebdo : Liste des serveurs avec snapshots"
$file = ".\snapshot.htm"
$date = Get-Date

#Chargement du module VMWARE
Add-PSSnapin VMware.VimAutomation.Core

#Connexion au vcenter
$creds = Get-VICredentialStoreItem -file $credfile
Connect-VIServer -Server $vcenter -User $creds.User -Password $creds.Password
#Lister les VM et les snapshots
Get-VM | Where-Object { $_.Name -notlike '*.repl*' -and $_.Name -notlike '*_replica*'} | get-snapshot | sort SizeMB | Format-Table vm,name,SizeMB,created | Out-File -FilePath $file
If ((Get-Content $file) -eq $Null) {
@("Rapport Hebdo des snapshot en cours (hors replica)" , "`r`nAucun Snapshot trouve" +  (Get-Content "$file") | Set-Content "$file")
}
else
{
@("Rapport Hebdo des snapshot en cours (hors replica)" , "`r`nCi dessous la liste :" +  (Get-Content "$file") | Set-Content "$file")
}
Add-Content -Path $file -Value "`r` Rapport fait le $date `r`Copyright : Xavier BIANCHI"
$body = Get-Content $file | Out-String
Send-MailMessage -SmtpServer $smtp -To $to -From $from -Subject $subject -attachment $file -Body $body -Priority high

Explication du script :

1) Le script se connecte au Vcenter via le fichier credential précédemment généré.
$creds = Get-VICredentialStoreItem -file $credfile
Connect-VIServer -Server $vcenter -User $creds.User -Password $creds.Password
2) Il va lister les VM qui ne comporte pas le sufixe « _repl » « _replica » via cette chaîne :
Get-VM | Where-Object { $_.Name -notlike '*.repl*' -and $_.Name -notlike '*_replica*'}
3) Puis via un pipe, le script va lister les snapshots présent sur cette liste de VM
get-snapshot | sort SizeMB | Format-Table vm,name,SizeMB,created | 
4) Sortie vers un fichier htm :
Out-File -FilePath $file
5) Le fichier de sortie est ensuite analyser afin de voir si il est vide. Si il est vide (donc pas de snapshots), il va écrire dans ce même fichier qu’il n’y a pas de snapshot :
If ((Get-Content $file) -eq $Null) {
@("Rapport Hebdo des snapshot en cours (hors replica)" , "`r`nAucun Snapshot trouve" +  (Get-Content "$file") | Set-Content "$file")
}
6) Si le fichier de sortie n’est pas vide ALORS :
else
{
@("Rapport Hebdo des snapshot en cours (hors replica)" , "`r`nCi dessous la liste :" +  (Get-Content "$file") | Set-Content "$file")
}
7) L’envoi par Email :
Send-MailMessage -SmtpServer $smtp -To $to -From $from -Subject $subject -attachment $file -Body $body -Priority high