Compare commits
3
Commits
8204dd0094
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d2080cb3e6 | ||
|
|
70b5678d13 | ||
|
|
088ae75339 |
@@ -4,15 +4,24 @@ Ce script Powershell permet de créer un point d'écoute pour permettre un check
|
|||||||
|
|
||||||
Le script calcule automatiquement le poids de la machine sur lequel il tourne en vérifiant l'usage RAM et / ou CPU selon des critères de facteur d'importance, de valeur de réference pour le calcul ou de limite haute forçant le mode drain (aucune nouvelle connexion depuis haproxy)
|
Le script calcule automatiquement le poids de la machine sur lequel il tourne en vérifiant l'usage RAM et / ou CPU selon des critères de facteur d'importance, de valeur de réference pour le calcul ou de limite haute forçant le mode drain (aucune nouvelle connexion depuis haproxy)
|
||||||
|
|
||||||
|
# Fonctionne sur
|
||||||
|
|
||||||
|
Testé en fonctionnement dans les environnements suivants ;
|
||||||
|
## OS
|
||||||
|
|
||||||
|
Windows 11
|
||||||
|
|
||||||
|
## Version powershell
|
||||||
|
Powershell 5.1
|
||||||
|
Powershell 7.4
|
||||||
|
|
||||||
# Fonctionnement
|
# Fonctionnement
|
||||||
|
|
||||||
Ce script créé un point d'écoute TCP sur un port donné.
|
Ce script créé un point d'écoute TCP sur un port donné.
|
||||||
|
|
||||||
Lorsqu'un client s'y connecte, il lance le calcul du poids puis renvoie l'information sous un format de tableau de bytes suivi d'un retour à la ligne
|
Lorsqu'un client s'y connecte, il lance le calcul du poids sur la machine où tourne le script puis renvoie l'information sous un format de tableau de bytes suivi d'un retour à la ligne.
|
||||||
|
|
||||||
Lorsqu'un calcul RAM ou CPU dépasse la limite définie dans CPU_THRESHOLD ou RAM_THRESHOLD, il envoie l'information "drain 0%`n" au serveur HAProxy. Dès que la valeur revient sous la limite, elle envoie une valeur calculée toujours précédée de up (ex : "up 12%`n")
|
Lorsqu'un calcul RAM ou CPU dépasse la limite définie dans CPU_THRESHOLD ou RAM_THRESHOLD, il envoie l'information "drain 0%" au serveur HAProxy. Dès que la valeur revient sous la limite, elle envoie une valeur calculée toujours précédée de up (ex : "up 12%")
|
||||||
|
|
||||||
# Fichier de configuration
|
# Fichier de configuration
|
||||||
|
|
||||||
|
|||||||
+44
-18
@@ -1,7 +1,7 @@
|
|||||||
$VerbosePreference = 'Continue'
|
$VerbosePreference = 'Continue'
|
||||||
$configfilepath = "C:\temp\config.xml"
|
$configfilepath = "C:\temp\config.xml"
|
||||||
try {
|
try {
|
||||||
$configfile = Import-clixml $configfilepath -ErrorAction Stop
|
$config = Import-clixml $configfilepath -ErrorAction Stop
|
||||||
}
|
}
|
||||||
catch {
|
catch {
|
||||||
Write-host "Aucun fichier de configuration"
|
Write-host "Aucun fichier de configuration"
|
||||||
@@ -54,7 +54,7 @@ if ($config.RAM_VALUE -as [int] -is [int] -and ($config.RAM_ENABLED -eq 1))
|
|||||||
{
|
{
|
||||||
if ($config.RAM_VALUE -eq 0)
|
if ($config.RAM_VALUE -eq 0)
|
||||||
{
|
{
|
||||||
Write-host "Valeur RAM_VALUE absente, incorrecte ou à 0, désactivation"
|
Write-host "Value RAM_VALUE missing, incorrect or at 0, CPU CHECK disabled"
|
||||||
$config.RAM_ENABLED = 0
|
$config.RAM_ENABLED = 0
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -65,7 +65,7 @@ if ($config.RAM_THRESHOLD -as [int] -is [int] -and ($config.RAM_ENABLED -eq 1))
|
|||||||
{
|
{
|
||||||
if ($config.RAM_THRESHOLD -eq 0)
|
if ($config.RAM_THRESHOLD -eq 0)
|
||||||
{
|
{
|
||||||
Write-host "Valeur RAM_THRESHOLD absente, incorrecte ou à 0, désactivation"
|
Write-host "Value RAM_THRESHOLD missing, incorrect or at 0, RAM CHECK disabled"
|
||||||
$config.RAM_ENABLED = 0
|
$config.RAM_ENABLED = 0
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -87,7 +87,8 @@ if ($config.CPU_VALUE -as [int] -is [int] -and ($config.CPU_ENABLED -eq 1))
|
|||||||
{
|
{
|
||||||
if ($config.CPU_VALUE -eq 0)
|
if ($config.CPU_VALUE -eq 0)
|
||||||
{
|
{
|
||||||
Write-host "Valeur CPU_VALUE absente, à 0 ou incorrecte. Désactivation check CPU"
|
Write-host "Value CPU_VALUE missing, on 0 or wrong. Disabled check CPU"
|
||||||
|
$config.CPU_ENABLED = 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,11 +96,13 @@ if ($config.CPU_THRESHOLD -as [int] -is [int] -and ($config.CPU_ENABLED -eq 1))
|
|||||||
{
|
{
|
||||||
if ($config.CPU_THRESHOLD -eq 0)
|
if ($config.CPU_THRESHOLD -eq 0)
|
||||||
{
|
{
|
||||||
Write-host "Valeur CPU_THRESHOLD absente, à 0 ou incorrecte. Désactivation check CPU"
|
Write-host "Value CPU_THRESHOLD missing, at 0 or incorrect. Disabled check CPU"
|
||||||
|
$config.CPU_ENABLED = 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$endpoint = New-Object System.Net.IPEndPoint([ipaddress]::Any,8000)
|
$endpoint = New-Object System.Net.IPEndPoint([ipaddress]::Any,8000)
|
||||||
|
$listener = $null
|
||||||
$listener = New-Object System.Net.Sockets.TcpListener $endpoint
|
$listener = New-Object System.Net.Sockets.TcpListener $endpoint
|
||||||
|
|
||||||
$listener.Start()
|
$listener.Start()
|
||||||
@@ -114,42 +117,55 @@ function Get-ServerHAProxyLoad()
|
|||||||
# Threshold : Si une valeur dépasse, on passe à true et force l'usage à 0 après les calculs (drain mode)
|
# Threshold : Si une valeur dépasse, on passe à true et force l'usage à 0 après les calculs (drain mode)
|
||||||
$threshold = $false
|
$threshold = $false
|
||||||
|
|
||||||
|
$ram = 0
|
||||||
|
$cpuusage = 0
|
||||||
if ($config.RAM_ENABLED -eq 1)
|
if ($config.RAM_ENABLED -eq 1)
|
||||||
{
|
{
|
||||||
$raminfos = Get-WmiObject -Class WIN32_OperatingSystem
|
$raminfos = Get-WmiObject -Class WIN32_OperatingSystem
|
||||||
$ram = [math]::Floor( 100 - ($raminfos.FreePhysicalMemory / $raminfos.TotalVisibleMemorySize) * 100)
|
$ram = [math]::Floor( 100 - ($raminfos.FreePhysicalMemory / $raminfos.TotalVisibleMemorySize) * 100)
|
||||||
# usage - ( ( pourcentage de ram libre / limite de ram ) * IF )
|
|
||||||
$usage = [math]::Floor($usage - (( $ram / $Config.RAM_VALUE ) * $config.RAM_IMPORTANCEFACTOR ) )
|
|
||||||
Write-verbose "Ram : $ram`n`tUsage : $usage"
|
|
||||||
|
|
||||||
|
Write-verbose "Ram used : $ram"
|
||||||
|
$ramscore = [math]::Floor( ( $ram / $Config.RAM_VALUE ) * $config.RAM_IMPORTANCEFACTOR )
|
||||||
|
Write-Verbose "Ram score : $ramscore"
|
||||||
if ($ram -ge $config.RAM_THRESHOLD)
|
if ($ram -ge $config.RAM_THRESHOLD)
|
||||||
{
|
{
|
||||||
$threshold = $true
|
$threshold = $true
|
||||||
Write-verbose "Limite THRESHOLD sur RAM"
|
Write-verbose "Limit THRESHOLD on RAM"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($config.CPU_ENABLED -eq 1)
|
if ($config.CPU_ENABLED -eq 1)
|
||||||
{
|
{
|
||||||
$cpuusage = $(Get-WmiObject -Class Win32_Processor).loadpercentage
|
$cpuusage = $(Get-WmiObject -Class Win32_Processor).loadpercentage
|
||||||
$usage = [math]::Floor( $usage - (( $cpuusage / $config.CPU_VALUE ) * $config.CPU_IMPORTANCEFACTOR) )
|
|
||||||
Write-verbose "CPU : $cpuusage`n`tUsage : $usage"
|
Write-verbose "CPU used : $cpuusage"
|
||||||
|
$cpuscore = [math]::Floor( ( $cpuusage / $config.CPU_VALUE ) * $config.CPU_IMPORTANCEFACTOR )
|
||||||
|
Write-verbose "CPU score : $cpuscore"
|
||||||
if ($cpuusage -ge $config.CPU_THRESHOLD)
|
if ($cpuusage -ge $config.CPU_THRESHOLD)
|
||||||
{
|
{
|
||||||
$threshold = $true
|
$threshold = $true
|
||||||
Write-verbose "Limite THRESHOLD sur CPU"
|
Write-verbose "Limit THRESHOLD on CPU"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
## Calcul des scores
|
||||||
|
## RAM
|
||||||
|
#
|
||||||
|
|
||||||
if ($threshold -or $usage -lt 0)
|
|
||||||
|
$usage = [math]::Floor( $usage - $ramscore )
|
||||||
|
Write-Verbose "Score post RAM : $usage"
|
||||||
|
## CPU
|
||||||
|
$usage = [math]::Floor( $usage - $cpuscore )
|
||||||
|
Write-Verbose "Score post CPU : $usage"
|
||||||
|
|
||||||
|
if ($threshold -or $usage -le 0)
|
||||||
{
|
{
|
||||||
$usage = "drain 0"
|
return "drain 0"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
return "ready $usage"
|
return "ready $usage"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -171,3 +187,13 @@ while ($true)
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Write-Verbose "Fin"
|
||||||
|
$tcpnetworkstream.Close()
|
||||||
|
$tcpnetworkstream.Dispose()
|
||||||
|
|
||||||
|
$listener.Server.Shutdown()
|
||||||
|
$listener.Server.Close()
|
||||||
|
$listener.Server.Dispose()
|
||||||
|
$listener.Stop()
|
||||||
|
$listener.Dispose()
|
||||||
Reference in New Issue
Block a user