Вывод процессов служб, включая дочерние

При определении, как службы используют память, иногда возникают сложности, вызванные тем, что процесс службы запускает дочерний, который, собственно и проивзодит работу (потребляет ресурсы). В случае одного уровня вложенности процессов можно воспользоваться следующим PowerShell скриптом. В примере мы узнаём, какие процессы соответствуют службам vCenter. Для вывода результатов используется замечательный командлет Join-Object, ссылка на который приведена в конце записи.

 $sv = Get-WmiObject Win32_Service -Filter "Description like '%vmwa%' AND State='Running'" -ComputerName VC
$ps = Get-WmiObject Win32_Process -ComputerName VC
Join-Object -Left $sv -Right $ps -Where { $args[0].ProcessID -eq $args[1].ProcessId -or $args[0].ProcessID -eq $args[1].ParentProcessId } -LeftProperties Name,Caption,StartName,State -RightProperties ProcessId,VM,ProcessName | Select *,@{N="Memory";E={[math]::round($_.VM/1mb)}} 

Join-Object

http://blogs.msdn.com/b/powershell/archive/2012/07/13/join-object.aspx

Рубрика: Windows | Метки: , , | Оставить комментарий

Сбор данных об операциях ввода.вывода для каждого процесса с помощью PowerShell

Скрипт работает бесконечно, записывая данные о процессах с ненулевым IO в хэш $Processes;


$Processes = @{};
While ($true) {
Write-Host -nonewline "."
(Get-Counter -ErrorAction silentlycontinue -Counter "\\.\Process(*)\IO Write Operations/sec","\\.\Process(*)\IO Read Operations/sec").CounterSamples | ? { $_.CookedValue -ne 0 } | % { if ($Processes[$_.Path] -eq $null) {$Processes[$_.Path] = @()}; $Processes[$_.Path] += $_ }
}

Рубрика: Windows | Метки: , | Оставить комментарий

Полезная информация по DFS

Посмотреть backlog для папки можно следующими способами

  • Использовать команду «dfsrdiag.exe backlog»
  • Запустить отчёт в консоли управления DFS и отметить, что нужно указать информацию о количестве файлов в backlog;
  • В Windows 2012 R2 есть команда Get-DfsrBacklog;
  • Для более ранних версий можно использовать PowerShell скрипт для получения этой информации;

Диагностическую информацию можно получать из утилит командной строки (команды dfscmd.exe, DfsDiag.exe, DfsrAdmin.exe, dfsrdiag.exe) или с помощью модуля для PowerShell, доступного в Windows 2012 R2. Логи доступны в системном журнале (Application and Services logs\DFS Replication). Лог отладки находится в C:\Windows\debug.

Серия статей по использованию DFS в отказоустойчивом кластере: http://blogs.technet.com/b/filecab/archive/2009/06/29/deploying-dfs-replication-on-a-windows-failover-cluster-part-i.aspx

Серия статей по отладке: http://blogs.technet.com/b/askds/archive/2009/03/23/understanding-dfsr-debug-logging-part-1-logging-levels-log-format-guid-s.aspx

Рубрика: Windows | Метки: , | Оставить комментарий

Получение занятого места на дисках из БД SCOM 2007

Запрос позволяет получить данные о месте на дисках для определённой даты.

Используются обе БД (Operational и DataWareHouse). Таблицы:

  • DataWarehouseDB.Perf.vPerfDaily
  • DataWarehouseDB.dbo.vManagedEntity
  • DataWarehouseDB.dbo.vPerformanceRuleInstance
  • DataWarehouseDB.dbo.vPerformanceRule
  • OperationsDB.dbo.BaseManagedEntity

Выборка производится по объектам «LogicalDisk» и «Logical Disk» и счётчикам, содержащим в имени «Free Megabytes» и «% Free». Для получения общего размера диска, занятое место в Мб делится на занятое место в процентах. Затем все размеры переводятся в байты и округляются.


SELECT 
-- Get Size (we know free space in MB and percent)
ROUND(1024*1024*SUM(CASE WHEN CounterName LIKE '%[%]%' THEN NULL ELSE AverageValue END)*100/SUM(CASE WHEN CounterName LIKE '%[%]%' THEN AverageValue ELSE NULL END), 0) AS [SizeBytes],
-- Get free Space
--ROUND(SUM(CASE WHEN CounterName LIKE '%[%]%' THEN NULL ELSE AverageValue END)*1024*1024, 0) AS [FreeBytes],
-- Get Used space
ROUND(1024*1024*(SUM(CASE WHEN CounterName LIKE '%[%]%' THEN NULL ELSE AverageValue END)*100/SUM(CASE WHEN CounterName LIKE '%[%]%' THEN AverageValue ELSE NULL END) -
SUM(CASE WHEN CounterName LIKE '%[%]%' THEN NULL ELSE AverageValue END)), 0) AS [UsedBytes],
-- Other fields
ManagedEntityGuid,ParentInternalId,ObjectName,[BaseEntity].Path,[BaseEntity].DisplayName FROM
 -- Performance data
 DataWarehouseDB.Perf.vPerfDaily [Perf]
 -- Get Managed entity IDs for performance data
 LEFT JOIN DataWarehouseDB.dbo.vManagedEntity [Entity] on [Perf].ManagedEntityRowId=[Entity].ManagedEntityRowId
 -- Get rule instance
 LEFT JOIN DataWarehouseDB.dbo.vPerformanceRuleInstance [RuleInstance] on [Perf].PerformanceRuleInstanceRowId = [RuleInstance].PerformanceRuleInstanceRowId
 -- Get rule class
 LEFT JOIN DataWarehouseDB.dbo.vPerformanceRule [Rule] on [RuleInstance].RuleRowId = [Rule].RuleRowId
 -- Get base managed entity id from OPSDB
 LEFT JOIN OperationsDB.dbo.BaseManagedEntity [BaseEntity] on [Entity].ManagedEntityGuid = [BaseEntity].BaseManagedEntityId
 -- Get Parent object (host) internal ID to match with Infra entries
 LEFT JOIN (
 SELECT [BaseManagedEntityInternalId] AS [ParentInternalId],[BaseManagedEntityId] FROM OperationsDB.dbo.BaseManagedEntity
 ) [BaseEntity2] on [BaseEntity].TopLevelHostEntityId = [BaseEntity2].BaseManagedEntityId
WHERE (ObjectName = 'LogicalDisk' OR ObjectName = 'Logical Disk')
 AND [BaseEntity].IsDeleted = 0
 AND [BaseEntity].IsManaged = 1
 AND (CounterName LIKE '%Free Megabytes%' OR CounterName LIKE '%[%] Free%')
--Specify date
 AND (CONVERT(DATE,DateTime)) = '2014-06-21'
GROUP BY ManagedEntityGuid,ParentInternalId,ObjectName,[BaseEntity].Path,[BaseEntity].DisplayName


Ссылки:

Рубрика: Системы мониторинга, Windows | Метки: , | Оставить комментарий

MaxTokenSize в Windows

Хорошее описание:

Active Directory MaxTokenSize

Рубрика: Windows | Метки: , | Оставить комментарий

Для установки сетевых настроек нужно войти в контекст «netsh interface ipv4» и выполнить следующие команды:

pushd interface ipv4

reset
set global icmpredirects=enabled
add route prefix=0.0.0.0/0 interface="Local Area Connection" nexthop=10.0.0.1 publish=Yes
add address name="Local Area Connection" address=10.0.0.4 mask=255.255.255.0

set dnsservers "Local Area Connection" static 10.0.0.2 primary
add dnsservers "Local Area Connection" 10.0.0.3 index=2

popd
Опубликовано автором tikhonovan | Оставить комментарий

Получение событий vSphere с помощью PowerCLI

Есть командлет. Get-VIEvent. Очень медленный. Есть варианты получения событий с помощью API. Пример скрипта для выгрузки событий ниже. Фильтруется по описанию

# Get events from vCenters

# Specify timespan in days for events
$Days = 1;

# List of vcenter services
$VCServers = @("vc1", "vc2");

# Exclude certain events by their description
# Unfortunately it is not possible to exclude event by type names
# Because many events have type like "VMware.Vim.EventEx"
# but totally different meaning
$ExcludedEvents = @("Cannot synchronize"
"Insufficient video RAM"
"User"
"Task"
"Update Manager"
"Cannot login"
" is connected"
"Remote console connected to "
"Reconfigured "
"Guest OS reboot for "
" copied from "
" is disconnected"
"Connected to"
"Changed resource allocation for"
" of type mks "
" an SNMP trap for entity "
" sent email to "
"Changed custom field"
"The dvPort "
"Resource configuration specification returns to synchronization from previous failure"
"triggered an action"
" disks consolidated successfully on "
"Virtual machine memory usage"
"VIM account password was changed on host"
"Virtual machine cpu usage"
"Scan for unknown agent VMs"
"I/O latency increased from average value"
"Virtual machine total disk latency"
"Host memory usage"
"Host cpu usage");

# Compose filter. We need all events for the past 24 hours
$Filter = New-Object VMware.Vim.EventFilterSpec;
$Filter.time = New-Object VMware.Vim.EventFilterSpecByTime;
$Filter.time.beginTime = (Get-Date).AddDays(-$Days);
$Filter.time.endtime = Get-Date;

# Placeholder for report
$Report = @();

foreach ($VC in $VCServers) {
 $ConnResult = Connect-VIServer $VC;
 # Count excluded events
 $ExcludedEventCounter = 0;
 $ReportEventCounter = 0;
 # Get event manager view
 $EventMgr = Get-View eventManager;
 # Compose filter.
 $Filter = New-Object VMware.Vim.EventFilterSpec;
 $Filter.time = New-Object VMware.Vim.EventFilterSpecByTime;
 $Filter.time.beginTime = (Get-Date).AddDays(-$Days);
 $Filter.time.endtime = Get-Date;
 $CollectionImpl = Get-View $EventMgr.CreateCollectorForEvents($Filter);
 # Event number to fetch at one time. No need to change this.
 $EventsNumber = 1000;
 while ($Events = $CollectionImpl.ReadNextEvents($EventsNumber)) {
 Write-Debug "got $($Events.Count) events";
 foreach($event in $Events) {
 # Break if events are filtered
 $ExclusionMatch = $false;
 $ExcludedEvents | % {
 if ($event.FullFormattedMessage -match $_) { $ExclusionMatch = $true; }
 }
 if (!$ExclusionMatch) {
 $ReportEventCounter++;
 $Report += $event | select @{N="vCenter";E={$VC}},CreatedTime,FullFormattedMessage,
 @{N="ComputeResource";E={$_.ComputeResource.Name}},
 @{N="Host";E={$_.Host.Name}},
 @{N="Vm";E={$_.Vm.Name}},
 @{N="Ds";E={$_.Ds.Name}},
 @{N="Net";E={$_.Net.Name}},
 @{N="Dvs";E={$_.Dvs.Name}}
 }
 else {
 $ExcludedEventCounter++;
 }
 }
 }
 Write-Debug "Excluded events: $($ExcludedEventCounter); Events sent to report: $($ReportEventCounter)";
 # Clean up
 $CollectionImpl.DestroyCollector();
 # Disconnect
 $ConnResult = Disconnect-VIServer $VC -Confirm:$false;
 $global:DefaultVIServer = $null;
 $global:DefaultVIServers = $null;
}
# Save report to CSV file
$Report | Export-Csv -Delimiter "`t" -NoTypeInformation -Path "vSphereEvents.csv";

Ссылки:

Рубрика: Virtualization | Метки: , , | Оставить комментарий

Холодная миграция ВМ с vCenter, подключенного к dvSwitch

Ситуация из жизни. Нужно перенести ВМ с vCenter в другой датацентр. Есть сеть L2 между ними, общего хранилища нет. На исходном и целевом хостах ESX все физические адаптеры подключены к dvSwitch. ВМ, в которой установлен vCenter тоже, соответственно, использует dvSwitch.

Первоначальный план был такой:

  1. Выключить ВМ с vCenter;
  2. Подключиться к обоим хостам напрямую;
  3. На исходном хосте удалить регистрацию ВМ;
  4. Скопировать файлы ВМ на хранилище, доступное другому хосту (к примеру по scp);
  5. Зарегистрировать ВМ на другом хосте;
  6. Запустить ВМ.

Проблема здесь в том, что при регистрации ВМ на целевом хосте у неё нет подключения к сети, т.к. ВМ в распредлённом коммутаторе можно запускать только из vCenter. Если у вас восстановление после нештатной ситуации и нет возможности запустить vCenter на старом хосте (это сделать можно), то вариант, в общем-то один: удалить один из физических адаптеров (туда должен быть подан нужный VLAN) из dvSwitch, создать стандартный коммутатор на основе этого адаптера, запустить ВМ с vCenter в этом коммутаторе. Минус тут в том, что возможны прерывания сети для ВМ, которые работают через отключаемый адаптер. Однако, если есть возможность подготовиться заранее, то можно сделать следующее: в dvSwitch создать порт-группу с тем же VLAN id, что и используемый vCenter, для неё указать тип Port binding: Ephemeral. После этого можно указывать эту порт-группу для ВМ даже без доступного vCenter. После загрузки vCenter нужно зайти в него клиентом и поменять порт-группу для ВМ на нужную. Ephemeral лучше не использовать для повседневной работы (см. KB в ссылках ниже).

Ссылки:

Рубрика: Virtualization | Метки: , | Оставить комментарий

Настройка вида папок, панели задач и консоли (cmd.exe) с помощью PowerShell

При первом логине на сервер я всегда настраиваю под себя несколько параметров: показ расширений и скрытых файлов, вид панели задач, быстрая вставка в cmd.exe. Ниже приведён скрипт, который производит настройки автоматически.

# Registry key
$key = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced';
# Show hidden
Set-ItemProperty $key Hidden 1;
# Show file extension
Set-ItemProperty $key HideFileExt 0;
# Show system
Set-ItemProperty $key ShowSuperHidden 1;
# Use small icons in taskbar
Set-ItemProperty $key TaskbarSmallIcons 1;
# Never group items in taskbar
Set-ItemProperty $key TaskbarGlomLevel 1;
# Restart explorer.exe to see effect
Stop-Process -processname explorer;
# Registry key for console
$ConsoleKey = "HKCU:\Console";
# Insert mode
Set-ItemProperty $ConsoleKey InsertMode 1;
# Quik edit
Set-ItemProperty $ConsoleKey QuickEdit 1;

Ссылки:

Рубрика: Windows | Метки: | Оставить комментарий

Перезапуск syslog на ESXi

Случился сбой на SAN и на время ESXi поткрял загрузочный диск, на который писались логи. После восстановления работы SAN у всех логов в папке /var/log дата последнего изменения как раз совпадает со временем сбоя.

cat /var/log/.vmsyslogd.err
2013-01-01T09:45:02.062Z vmsyslog.main            : ERROR   ] <vpxa> failed to write log, disabling

Для восстановления журналирования:

esxcli system syslog reload

То же с помощью PowerCli.


# Получаем последнюю запись в логе
$log = Get-Log -VMHost <HOST> -Key hostd;
$log.Entries[$log.Entries.Count-1];

# Перегружаем syslog
$esxcli = Get-EsxCli -VMHost <HOST>;
$esxcli.system.syslog.reload();
Рубрика: Virtualization | Метки: , | Оставить комментарий