Déplacer les logs et activer SysLog

Les logs sont utiles aussi bien pour le diagnostic et la recherche de panne que pour les audits.
Mais encore faut-il que les logs soient encore disponibles lorsqu’on en a besoin. Il est fréquent qu’on s’aperçoive que les logs recherchées ont disparues, soit du fait de la rotation normale des ficher de logs, soit de la non persistance de leur stockage.

Il est donc prudent de paramétrer une rétention suffisante, tant en taille de logs qu’en nombre de version.
En augmentant la taille des logs, autant éviter les risques de saturation de l’espace disque du noyau des ESXi, et déplacer les logs sur un datastore.

Dans le cas présent, je suis parti du principe que les ESXi disposent d’un datastore interne (ce n’est certes pas systématique, mais je n’ai que rarement rencontré des ESXi sur clef usb interne ou effectuant du boot on san).
Par défaut, le datastore local d’un ESX est nommé Datastore, mais lorsqu’il est rattaché à un vCenter et que l’un des hosts a déjà un datastore de ce nom, il est renommé avec un incrément.
J’ai donc intégré dans le script le renommage du datastore interne avec le hostname de l’ESXi.

Pour ce script, je n’ai pas pris la peine de tester la configuration existante, ça allait aussi bien de l’écraser, même si elle était déjà correcte. En revanche j’ai commenté le script étape par étape, pour bien différencier les différents éléments à configurer.


Variables

Quatre variables sont initialisées dans les 4 premières lignes.

$EsxHosts : contient la liste des hosts ESXi à contrôler.
Elle est initialisée par une requête pour lister par exemple un host, les hosts d’un cluster, ou tous les hosts connus du vCenter.

$EsxHosts = Get-VMHost host01.infra.local
$EsxHosts = Get-Cluster | Get-VMHost | Sort-Object -Property Name
$EsxHosts = Get-VMHost | Sort-Object -Property Name

$SysLog : L’adresse et le port du serveur syslog.

$NTPServers = "10.20.20.4:512"

$LogRotate : Le nombre de logs à conserver.

$LogRotate = 20

$LogSize : La taille d’une log avant rotation (en Ko).

$LogSize = 4096

Script

$EsxHosts = Get-VMHost | Sort-Object -Property Name
$SysLog = "udp://10.19.9.226:514"
$LogRotate = 20
$LogSize = 4096
Foreach ($EsxHost in $EsxHosts)
{
   Write-Host $EsxHost.Name -ForegroundColor Red
   $Hostname = $EsxHost.Name.Split(".")[0]
   $LocalDatastore = $EsxHost | Get-Datastore | Get-View  | Where-Object {$_.Summary.MultipleHostAccess -match 'false'}
   $LogDir = "[" + $Hostname + "] /scratch/log"
   Write-Host "- Rename local datastore with hostname..." -ForegroundColor Yellow
   $Result = $EsxHost | Get-Datastore | Where-Object {$_.Name -eq $LocalDatastore.Name} | Set-Datastore -Name $Hostname
   Write-Host "- Open Firewall..." -ForegroundColor Yellow
   $Result = $EsxHost | Get-VMHostFirewallException -Name syslog | Set-VMHostFirewallException -Enabled:$true
   Write-Host "- Configure Logs location..." -ForegroundColor Yellow
   $Result = $EsxHost | Get-AdvancedSetting -Name Syslog.global.defaultRotate | Set-AdvancedSetting -Value $LogRotate -Confirm:$false
   $Result = $EsxHost | Get-AdvancedSetting -Name Syslog.global.defaultSize | Set-AdvancedSetting -Value $LogSize -Confirm:$false
   $Result = $EsxHost | Get-AdvancedSetting -Name Syslog.global.logDir | Set-AdvancedSetting -Value $LogDir -Confirm:$false
   Write-Host "- Configure Syslog URL..." -ForegroundColor Yellow
   $Result = $EsxHost | Get-AdvancedSetting -Name Syslog.global.logHost | Set-AdvancedSetting -Value $SysLog -Confirm:$false
   Write-Host "- Restart Syslog service..." -ForegroundColor Yellow
   $EsxCLI = Get-EsxCli -VMHost $EsxHost
   $Result = $EsxCLI.system.syslog.reload()
}

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *