MAJ 06/06/2012 : Nous avions oublié de préciser que pour des tests de pourrissage de réseau nous avions utilisé WANem (Wide Area Network Emulator) qui permet toutes sortent de simulation visant à détériorer ou ralentir le trafic réseau (liveCD et Open Source).
MAJ 31/05/2012 : Les stats de dropped packets n’étant pas dispo pour les VM sur vCenter 4.x, nous avons ajouté un script pour créer des alarmes sur les vmnic, pour les vswitch des ESX donc. Merci à puchy pour son feedback.
Si, comme nous, vous vous êtes rendu compte un peu tard que de nombreux packets réseau étaient droppés sur des VM Windows 2008 R2 avec l’adapteur e1000, vous serez intéressé par notre petit oneliner (what else ?) qui vous permettra de créer des alarmes dans votre vCenter pour vous en avertir. Mieux vaut un mail de votre vcenter (5.0+) que d’un user en colère, non ?
Voici une illustration de notre cas :

Et voici le oneliner qui va créer une alarme pour chaque “instance” de carte réseau existante de votre vCenter (yellow >1 ; red > 5 ; mailto:admin@vmware.local) :
foreach ($vnic in (Get-View -ViewType VirtualMachine|%{$_.Config.Hardware.Device|?{$_.DeviceInfo.label -match "Network adapter"}}|select Key -Unique|%{$_.Key})){if (!((Get-View AlarmManager).GetAlarm((Get-Folder -NoRecursion |Get-View).MoRef)|?{(get-view $_).info.name -like "Virtual Machine dropped network packets (instance $vnic)"})){(Get-View AlarmManager).CreateAlarm((Get-Folder -NoRecursion |Get-View).MoRef,(New-Object VMware.Vim.AlarmSpec -Property @{Name = "Virtual Machine dropped network packets (instance $vnic)";Description = "Custom alarm to monitor dropped network packets (instance $vnic)";Enabled = $true;expression = (New-Object VMware.Vim.OrAlarmExpression -Property @{expression = @((New-Object VMware.Vim.MetricAlarmExpression -Property @{Metric = (New-Object VMware.Vim.PerfMetricId -Property @{CounterId = ((Get-View (Get-View ServiceINstance).Content.PerfManager).PerfCounter|?{$_.groupinfo.key -match "net"}|?{$_.RollupType -match "summation"}|?{$_.NameInfo.key -match "droppedTx"}).key;Instance = $vnic});Operator = "isAbove";Yellow = "1";YellowInterval = "300";Red = "5";RedInterval = "180";Type = "VirtualMachine"});(New-Object VMware.Vim.MetricAlarmExpression -Property @{Metric = (New-Object VMware.Vim.PerfMetricId -Property @{CounterId = ((Get-View (Get-View ServiceINstance).Content.PerfManager).PerfCounter|?{$_.groupinfo.key -match "net"}|?{$_.RollupType -match "summation"}|?{$_.NameInfo.key -match "droppedRx"}).key;Instance = $vnic});Operator = "isAbove";Yellow = "1";YellowInterval = "300";Red = "5";RedInterval = "180";Type = "VirtualMachine"}))});Action=(New-Object VMware.Vim.GroupAlarmAction -Property @{Action= (New-Object VMware.Vim.AlarmTriggeringAction -Property @{Action = (New-Object VMware.Vim.SendEmailAction -Property @{ToList = "admin@vmware.local";Subject = "[vAlarm] {targetName} has dropped network packets ({newStatus} state)";CcList = "";Body = ""});TransitionSpecs = @((New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec -Property @{StartState = "green";FinalState = "yellow";Repeats = $false});(New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec -Property @{StartState = "yellow";FinalState = "red";Repeats = $false}))})});ActionFrequency = "1800"}))}}
Vous devez réexecuter ce script si vous créez une nouvelle vm dans votre vCenter (5.0+) qui possède plus de cartes réseau virtuelles que celle qui en possédait le plus lors de la précédente exécution. Chaque alarme sera identifiée par l’instance qui lui est affectée :

Pour vCenter 4.x+, voici le même script pour les vmnics des ESX :
foreach ($vmnic in (Get-View -ViewType HostSystem|%{$_.Config.Network.Pnic|%{$_.Device}}|Select-Object -Unique)){if (!((Get-View AlarmManager).GetAlarm((Get-Folder -NoRecursion |Get-View).MoRef)|?{(get-view $_).info.name -like "Host dropped network packets (instance $vmnic)"})){(Get-View AlarmManager).CreateAlarm((Get-Folder -NoRecursion |Get-View).MoRef,(New-Object VMware.Vim.AlarmSpec -Property @{Name = "Host dropped network packets (instance $vmnic)";Description = "Custom alarm to monitor Host dropped network packets (instance $vmnic)";Enabled = $true;expression = (New-Object VMware.Vim.OrAlarmExpression -Property @{expression = @((New-Object VMware.Vim.MetricAlarmExpression -Property @{Metric = (New-Object VMware.Vim.PerfMetricId -Property @{CounterId = ((Get-View (Get-View ServiceINstance).Content.PerfManager).PerfCounter|?{$_.groupinfo.key -match "net"}|?{$_.RollupType -match "summation"}|?{$_.NameInfo.key -match "droppedTx"}).key;Instance = $vmnic});Operator = "isAbove";Yellow = "1";YellowInterval = "300";Red = "5";RedInterval = "180";Type = "HostSystem"});(New-Object VMware.Vim.MetricAlarmExpression -Property @{Metric = (New-Object VMware.Vim.PerfMetricId -Property @{CounterId = ((Get-View (Get-View ServiceINstance).Content.PerfManager).PerfCounter|?{$_.groupinfo.key -match "net"}|?{$_.RollupType -match "summation"}|?{$_.NameInfo.key -match "droppedRx"}).key;Instance = $vmnic});Operator = "isAbove";Yellow = "1";YellowInterval = "300";Red = "5";RedInterval = "180";Type = "HostSystem"}))});Action=(New-Object VMware.Vim.GroupAlarmAction -Property @{Action= (New-Object VMware.Vim.AlarmTriggeringAction -Property @{Action = (New-Object VMware.Vim.SendEmailAction -Property @{ToList = "admin@vmware.local";Subject = "[vAlarm] {targetName} has dropped network packets ({newStatus} state)";CcList = "";Body = ""});TransitionSpecs = @((New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec -Property @{StartState = "green";FinalState = "yellow";Repeats = $false});(New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec -Property @{StartState = "yellow";FinalState = "red";Repeats = $false}))})});ActionFrequency = "1800"}))}}

Tags: alarm, droppedRX, droppedTX, e1000, packets dropped, PowerCLI, powershell, scripting, vmxnet3