Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Auteur: Tlams
- # Date: 11/03/13
- # Language: Powershell
- # Version: 1.0
- # Fonction: Script de surveillance ressources serveurs.
- #####################
- ##Def des fonctions##
- #####################
- function mail($sujet_env, $contenu_env, $wcr, $from, $smtp_serveur, $dest)
- {
- $enc=New-Object System.Text.utf8encoding
- Send-MailMessage -From $from `
- –To $dest `
- -Subject $sujet_env `
- –Body $contenu_env `
- –SmtpServer $smtp_serveur `
- -credential $wcr `
- -UseSsl `
- -ErrorAction "silentlycontinue" `
- -Encoding $enc
- write_log "INFO: Envoie du mail d'alerte: " + $sujet_env
- }
- function write_log($texte)
- {
- $date = Get-Date
- $date = "[" + [string]$date + "] " + "[" + $server + "] "
- $date + $texte >> $log_name
- }
- function erreur_exe($erreurinfo)
- {
- $ecriture_log = "ERROR:" + $erreurinfo
- write_log $ecriture_log
- mail "SCRIPT ERREUR" $ecriture_log $wcr $from $smtp_serveur $dest
- }
- function CPU_check($repeat_count,$cpu_threshold,$sleep_interval,$server)
- {
- write_log "INFO: Test du CPU"
- $hit = 0
- foreach($turn in 1..$repeat_count)
- {
- $cpu = get-wmiObject -class Win32_Processor -ComputerName $server –credential $cred -ErrorAction "silentlycontinue"
- if (!$?)
- {
- $erreurinfo = "[" + $server + "] " + $error[0].exception.message
- erreur_exe $erreurinfo
- Return 1
- }
- write_log "INFO: L'utilisation de la CPU est de $($cpu.LoadPercentage)%"
- If($cpu.LoadPercentage -ge $cpu_threshold)
- {
- $hit = $hit+1
- }
- start-sleep $sleep_interval
- }
- if($hit -eq 3)
- {
- write_log "ALERTE: L'utilisation de la CPU est supérieure à $($cpu_threshold)%"
- $sujet_env = $sujet_CPU
- $contenu_env = $contenu_CPU
- mail $sujet_env $contenu_env $wcr $from $smtp_serveur $dest
- }
- else
- {
- write_log "INFO: L'utilisation de la CPU est inférieure à $($cpu_threshold)%"
- }
- }
- function disk_check($server)
- {
- write_log "INFO: Test de l'espace disque"
- $Disques = get-WmiObject Win32_LogicalDisk -ComputerName $server –credential $cred -ErrorAction "silentlycontinue" | Where {$_.Name -ne "A:" -and $_.DriveType -eq "3"}
- if (!$?)
- {
- $erreurinfo = "[" + $server + "] " + $error[0].exception.message
- erreur_exe $erreurinfo
- Return 1
- }
- foreach ( $disque in $Disques )
- {
- # espaces disques - Dans la WMI, les tailles sont données en octets.
- $espacelibre = [math]::round($disque.freespace / (1024*1024*1024),1)
- $tailletotaledisque = [math]::round($disque.size / (1024*1024*1024),1)
- $disk_used_pourcent = ($espacelibre / $tailletotaledisque)*100
- $disk_used_pourcent = [int](100 - $disk_used_pourcent)
- $ajoulogs = "INFO: Disque" + $disque.Name + "Taille totale = "+ $tailletotaledisque + "Go Espace libre = "+ $espacelibre + "Go"
- write_log $ajoulogs
- if ($disk_used_pourcent -ge $limit_disk)
- {
- $sujet_env = $sujet_mem_vir
- $contenu_env = $contenu_mem_vir
- mail $sujet_env $contenu_env $wcr $from $smtp_serveur $dest
- write_log "ALERT: Espace disque utilisé à $($disk_used_pourcent) %"
- }
- }
- }
- function services_check($server)
- {
- write_log "INFO: Test des services"
- $servs_services = get-wmiObject -class win32_Service -ComputerName $server –credential $cred -ErrorAction "silentlycontinue" | where-object {$_.Started}
- if (!$?)
- {
- $erreurinfo = "[" + $server + "] " + $error[0].exception.message
- erreur_exe $erreurinfo
- Return 1
- }
- write_log "INFO: Nombre de services en cours de fonctionnement : $($servs_services.length)"
- if (($servs_services.length -ge $limit_service_nb_fixe + $limit_service_nb_var) -or ($servs_services.length -lt $limit_service_nb_fixe - $limit_service_nb_var))
- {
- write_log "ALERT: Nombre de services en cours de fonctionnement est anormal : $($servs_services.length)"
- $sujet_env = $sujet_services_nb
- $contenu_env = $contenu_services_nb
- mail $sujet_env $contenu_env $wcr $from $smtp_serveur $dest
- }
- $list_servi_abs = @()
- foreach ($services in $list_services)
- {
- $query_services = get-wmiObject -class win32_Service -ComputerName $server –credential $cred -ErrorAction "silentlycontinue" | where-object {$_.Name -eq $services}
- if (!$?)
- {
- $erreurinfo = "[" + $server + "] " + $error[0].exception.message
- erreur_exe $erreurinfo
- Return 1
- }
- if ((!$query_services.Name) -or ($query_services.State -eq "Stopped" ))
- {
- write_log "ALERT: Service $($services) absent"
- $list_servi_abs += $services
- }
- else
- {
- write_log "INFO: Service $($services) présent"
- }
- }
- if ($list_servi_abs)
- {
- $sujet_env = $sujet_servi_abs
- $contenu_env = $contenu_servi_abs + [string] $list_servi_abs
- mail $sujet_env $contenu_env $wcr $from $smtp_serveur $dest
- }
- }
- function processus_check($server)
- {
- write_log "INFO: Test des processus"
- $servs_processus = get-wmiObject -class win32_Process -ComputerName $server –credential $cred -ErrorAction "silentlycontinue"
- if (!$?)
- {
- $erreurinfo = "[" + $server + "] " + $error[0].exception.message
- erreur_exe $erreurinfo
- Return 1
- }
- write_log "INFO: Nombre de processus en cours de fonctionnement : $($infoComp.length)"
- if (($servs_processus.length -ge $limit_processus_nb_fixe + $limit_processus_nb_var) -or ($servs_processus.length -lt $limit_processus_nb_fixe - $limit_processus_nb_var))
- {
- write_log "ALERT: Nombre de processus en cours de fonctionnement est anormal : $($infoComp.length)"
- $sujet_env = $sujet_processus_nb
- $contenu_env = $contenu_processus_nb
- mail $sujet_env $contenu_env $wcr $from $smtp_serveur $dest
- }
- }
- function ram_check($server)
- {
- write_log "INFO: Test de la mémoire"
- # Total RAM installée (taille dans la WMI en Octets)
- $infoComp = get-wmiObject -class win32_computerSystem -ComputerName $server –credential $cred -ErrorAction "silentlycontinue"
- if (!$?)
- {
- $erreurinfo = "[" + $server + "] " + $error[0].exception.message
- erreur_exe "[" + $server + "] " + $erreurinfo
- Return 1
- }
- $totalRam = [math]::round([long]$infoComp.TotalPhysicalMemory /(1024*1024*1024) ,1)
- write_log "INFO: Total ram : $($totalRam) GO"
- # controle de place disponible en RAM (tailles dans la WMI en KO)
- $osObject = Get-WmiObject -class Win32_OperatingSystem -ComputerName $server –credential $cred -ErrorAction "silentlycontinue"
- if (!$?)
- {
- $erreurinfo = $error[0].exception.message
- erreur_exe "[" + $server + "] " + $erreurinfo
- $erreur = 1
- Return $erreur
- }
- $totalfree = [math]::round([long]$osObject.FreeVirtualMemory /(1024*1024) ,1)
- $physfree = [math]::round([long]$osObject.FreePhysicalMemory /(1024*1024) ,1)
- $freeswap = [math]::round([long]$osObject.FreeSpaceInPagingFiles /(1024*1024) ,1)
- write_log "INFO: Place total disponible : $($totalfree) GO"
- write_log "INFO: Place physique disponible : $($physfree) GO"
- write_log "INFO: Place swap disponible : $($freeswap) GO"
- $phy_used_pourcent = ($physfree / $totalRam)*100
- $phy_used_pourcent = [int](100 - $phy_used_pourcent)
- write_log "INFO: Mémoire physique utilisé: $($phy_used_pourcent) %"
- if ($phy_used_pourcent -ge $limit_physique)
- {
- write_log "ALERT: Mémoire physique utilisé à $($phy_used_pourcent) %"
- $sujet_env = $sujet_mem_phy
- $contenu_env = $contenu_mem_phy
- mail $sujet_env $contenu_env $wcr $from $smtp_serveur $dest
- }
- $swap_used_pourcent = ($freeswap / $totalRam)*100
- $swap_used_pourcent = [int](100 - $swap_used_pourcent)
- write_log "INFO: Mémoire virtuelle utilisé: $($swap_used_pourcent) %"
- if ($swap_used_pourcent -ge $limit_virtuel)
- {
- $sujet_env = $sujet_mem_vir
- $contenu_env = $contenu_mem_vir
- mail $sujet_env $contenu_env $wcr $from $smtp_serveur $dest
- write_log "ALERT: Mémoire virtuelle utilisé à $($swap_used_pourcent) %"
- }
- }
- #####################
- ##Def des variables##
- #####################
- ######## Mail ##########
- $smtp_serveur = "smtp.xxxx.com" #Serveur SMTP du destinataire
- $login = "xxxxxx" #Login du destinataire
- $stringpwd = "xxxxxx" #Mot de passe du destinataire
- $pwd = convertto-securestring $stringpwd -asplaintext -force
- $wcr = new-object -typename System.Management.Automation.PSCredential `
- -argumentlist $login,$pwd `
- -ErrorAction "silentlycontinue"
- ########## CPU ###########
- $repeat_count = 3 # Nombre de tests utilisation du CPU
- $cpu_threshold = 80 # Pourcentage limite utilisation du CPU
- $sleep_interval = 1 # Temps intervale entre chaques tests
- $sujet_CPU = "ALERT - CPU" # Sujet de l'email d'alerte CPU"
- $contenu_CPU = "Charge du CPU est supérieure à $($cpu_threshold)!" #Message de l'email d'alerte CPU
- ########## Memoire ###########
- $limit_physique = 80 # Pourcentage limite utilisation Mémoire Ram
- $limit_virtuel = 80 # Pourcentage limite utilisation de la SWAP
- $sujet_mem_vir = "ALERT - MEM-VIR" # Sujet de l'email d'alerte SWAP
- $contenu_mem_vir = "Charge de la mémoire virtuelle est supérieure à $($limit_virtuel)!" #Message de l'email d'alerte SWAP
- $sujet_mem_phy = "ALERT - MEM-PHY" # Sujet de l'email d'alerte RAM
- $contenu_mem_phy = "Charge de la mémoire physique est supérieure à $($limit_physique)!" #Message de l'email d'alerte RAM
- ########## Disques ###########
- $limit_disk = 80 # Pourcentage limite utilisation Disque
- $sujet_disk = "ALERT - DISQUE" # Sujet de l'email d'alerte Disque
- $contenu_disk = "Charge du disque est supérieure à $($limit_disk)!" #Message de l'email d'alerte Disque
- ########## Services ###########
- $limit_service_nb_fixe = 80 # Nombre de services de base
- $limit_service_nb_var = 10 # Taux d'erreur acceptable (+/- le nombre de base)
- $sujet_services_nb = "ALERT - SERVICES NOMBRE" # Sujet de l'email d'alerte nombre de services
- $contenu_services_nb = "Nombre de services en cours de fonctionnement est anormal " #Message de l'email d'alerte nombre de services
- $sujet_servi_abs = "ALERT - SERVICES" # Sujet de l'email d'alerte service absents
- $contenu_servi_abs = "Liste des services absent:" # Message de l'email d'alerte service absents (Contient aussi la liste)
- $list_services = @("WwanSvc","WSearch") # Liste des services vérifiés
- ########## Processus ###########
- $limit_processus_nb_fixe = 80 # Nombre de processus de base
- $limit_processus_nb_var = 10 # Taux d'erreur acceptable (+/- le nombre de base)
- $sujet_processus_nb = "ALERT - PROCESSUS NOMBRE" # Sujet de l'email d'alerte nombre de processus
- $contenu_processus_nb = "Nombre de processus en cours de fonctionnement est anormal " #Message de l'email d'alerte nombre de processus
- ####Liste des serveurs####
- $serveur =
- ("","",""),
- ("172.20.0.1","Administrateur","pw1"),
- ("172.20.0.2","Administrateur","pw2")
- ######### LOGS #########
- $base = split-path $myinvocation.mycommand.path # Répertoire d'enregistrement des logs
- $log_name = $base + "\logs.txt" # Nom du fichier log
- ######### Fichier config #########
- $base_cmd = split-path $myinvocation.mycommand.path # Répertoire d'enregistrement des logs
- $config_file = $base_cmd + "\config.txt" # Nom du fichier log
- ################
- ##SCRIPT START##
- ################
- write_log "INFO: Lancement du script"
- $compteur = 0
- while ($compteur -lt $serveur.length)
- {
- if ($serveur[$compteur][0] -ne "")
- {
- $cred = New-Object System.Management.Automation.PSCredential -ArgumentList @($serveur[$compteur][1],(ConvertTo-SecureString -String $serveur[$compteur][2] -AsPlainText -Force))
- $ram_check = ram_check $serveur[$compteur][0] $username $password
- if ($ram_check -eq 1)
- {
- $compteur = $compteur+1
- continue
- }
- $CPU_check = CPU_check $repeat_count $cpu_threshold $sleep_interval $serveur[$compteur][0]
- if ($CPU_check -eq 1)
- {
- $compteur = $compteur+1
- continue
- }
- $disk_check = disk_check $serveur[$compteur][0]
- if ($disk_check -eq 1)
- {
- $compteur = $compteur+1
- continue
- }
- $services_check = services_check $serveur[$compteur][0]
- if ($services_check -eq 1)
- {
- $compteur = $compteur+1
- continue
- }
- $processus_check = processus_check $serveur[$compteur][0]
- }
- $compteur = $compteur+1
- }
- $date = Get-Date
- $date = $date.ToShortDateString()
- if (-not (Test-Path $config_file -ErrorAction "silentlycontinue"))
- {
- $date >> $config_file
- }
- $get_date_file = Get-Content ($config_file)
- if ($date -ne $get_date_file)
- {
- rm $config_file
- $date >> $config_file
- mail "Surveillance" "Le script de surveillance s'est bien exécuté." $wcr $from $smtp_serveur $dest
- }
- write_log "INFO: Fin du script"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement