Задача - Сводка статистики свободного места по компьютеру
Здесь вы получите и преобразуете данные из таблицы Perf
с помощью запросов KQL для анализа свободного пространства компьютеров, регистрирующих данные в рабочей области Log Analytics.
1. Установка целей
Помните, что ИТ-отдел заметил повторяющиеся проблемы, связанные с нехваткой свободного места на виртуальных машинах.
Чтобы проанализировать использование свободного места на компьютерах, работающих в ИТ-среде, вам потребуется следующее:
- Общее свободное место, доступное на каждом компьютере.
- Процент пространства, используемого на каждом компьютере.
2. Оценка журналов
Как мы видели в предыдущем упражнении, таблица Perf
содержит сведения о производительности аппаратных компонентов, операционных систем и приложений.
Мы отметили, что столбец ObjectName
таблицы Perf
содержит имена всех отслеживаемых объектов, а столбец CounterName
содержит имена различных счетчиков производительности, собираемых Azure Monitor. Мы также видели, что оба этих столбца содержат много значений, многие из которых появляются несколько раз.
Давайте запустим запрос в таблице Perf
для списка уникальных значений ObjectName
.
Щелкните, чтобы выполнить запрос в демонстрационной среде Log Analytics
Perf // The table you’re querying
| distinct ObjectName // Lists distinct ObjectName values
Результирующий набор этого запроса включает все ObjectName
значения, которые в настоящее время находятся в таблице:
В нашем сценарии мы заинтересованы в анализе виртуальных машин, поэтому объекты, которые мы хотим просмотреть, LogicalDisk
и Logical Disk
(для мониторинга памяти на физической машине, вы бы посмотрели на объект memory
). Причина в том, что LogicalDisk
является именем объекта в записях Windows, а Logical Disk
используется в записях Linux.
Чтобы получить список уникальных имен счетчиков Azure Monitor, собираемых для объектов LogicalDisk
и Logical Disk
, выполните следующую команду:
Щелкните, чтобы выполнить запрос в демонстрационной среде Log Analytics
Perf // The table you’re querying
| where ObjectName == "LogicalDisk" or // The object name used in Windows records
ObjectName == "Logical Disk" // The object name used in Linux records
| distinct CounterName // Lists distinct CounterName values
Результирующий набор этого запроса включает все счетчики производительности, собранные для объектов LogicalDisk
и Logical Disk
:
Счетчики производительности, предоставляющие сведения об используемом и свободном пространстве, % Used Space
, % Free Space
и Free Megabytes
. У нас есть два аналогичных счетчика — % Free Space
и % Used Space
— собранные из записей Windows и Linux соответственно.
Давайте рассмотрим, как мы можем использовать эти данные и какие операции KQL помогут извлечь и преобразовать данные:
Столбец | Описание | Цель анализа | Связанные операции KQL |
---|---|---|---|
TimeGenerated |
Указывает, когда виртуальная машина создает каждый журнал. | Определите область времени анализа. | where TimeGenerated > ago(1d) Дополнительные сведения см. в ago(), где оператор, и числовые операторы. |
Computer |
Компьютер, с которого было собрано событие. | Связывание использования ЦП с определенным компьютером. | summarize... by Computer Дополнительные сведения см. в сводки оператора. |
ObjectName |
Содержит имена всех объектов, для которых таблица содержит данные о производительности. Для анализа вам нужны объекты LogicalDisk и Logical Disk . |
Отслеживайте логические диски на виртуальных машинах. | where ObjectName == "LogicalDisk" or ObjectName == "Logical Disk" Дополнительные сведения см. в , где оператор и соответствует (=) оператору. |
CounterName |
Содержит имена всех счетчиков производительности в таблице. |
|
where CounterName == "Free Megabytes" or CounterName =="% Free Space" or CounterName == "% Used Space" Чтобы упростить результаты и упростить дальнейший анализ:
|
InstanceName |
Выводит список отслеживаемых экземпляров отслеживаемого объекта. | Отслеживайте все диски на виртуальной машине. | InstanceName == "_Total" Дополнительные сведения см. в , где оператор и оператор равны оператору. |
CounterValue |
Измерения, собираемые для счетчика. | Извлечение измерений производительности для счетчиков % Used Space , % Free Space и Free Megabytes . |
|
3. Написание запроса
Извлеките все журналы, созданные за прошлый день, в которых сообщается о счетчиках производительности
% Used Space
,% Free Space
иFree Megabytes
для объектовLogicalDisk
иLogical Disk
.Щелкните, чтобы выполнить запрос в демонстрационной среде Log Analytics
Perf | where TimeGenerated > ago(1d) | where ObjectName == "LogicalDisk" or // The object name used in Windows records ObjectName == "Logical Disk" // The object name used in Linux records | where CounterName == "Free Megabytes" or CounterName =="% Free Space" or CounterName == "% Used Space" // Filters for the performance counters Free Megabytes, % Free Space, and % Used Space performance counters | where InstanceName == "_Total" // Retrieves data related to free space for all drives on a virtual machine
Результирующий набор этого запроса, вероятно, включает несколько записей для каждого компьютера, с которого вы собираете счетчики производительности, связанные со свободным пространством.
Фильтр для последнего значения счетчика, собираемого для каждого счетчика, сообщаемого каждой виртуальной машиной:
Щелкните, чтобы выполнить запрос в демонстрационной среде Log Analytics
Perf | where TimeGenerated > ago(1d) | where ObjectName == "LogicalDisk" or // The object name used in Windows records ObjectName == "Logical Disk" // The object name used in Linux records | where CounterName == "Free Megabytes" or CounterName =="% Free Space" or CounterName == "% Used Space" // Filters for the performance counters Free Megabytes, % Free Space, and % Used Space performance counters | where InstanceName == "_Total" // Retrieves data related to free space for all drives on a virtual disk | summarize arg_max(TimeGenerated, CounterValue) by Computer, CounterName // Retrieves the last counter value collected for each counter for every virtual machine
Теперь у вас есть последнее значение для каждого счетчика, связанного со свободным местом, на каждом компьютере.
Чтобы упростить анализ:
Преобразуйте значение счетчика
% Used Space
в% Free Space
(вычитая значение% Used Space
из 100%) и измените имя столбца% Used Space
на% Free Space
:Щелкните, чтобы выполнить запрос в демонстрационной среде Log Analytics
Perf | where TimeGenerated > ago(1d) | where ObjectName == "LogicalDisk" or // The object name used in Windows records ObjectName == "Logical Disk" // The object name used in Linux records | where CounterName == "Free Megabytes" or CounterName =="% Free Space" or CounterName == "% Used Space" // Filters for the performance counters Free Megabytes, % Free Space, and % Used Space performance counters | where InstanceName == "_Total" // Retrieves data related to free space for all drives on a virtual disk | summarize arg_max(TimeGenerated, CounterValue) by Computer, CounterName // Retrieves the last counter value collected for each counter for every virtual machine | extend CounterValue = iff(CounterName=="% Used Space", 100-CounterValue, CounterValue) // Converts % Used Space to % Free Space | extend CounterName = iff(CounterName=="% Used Space", "% Free Space", CounterName) // Changes the column name from % Used Space to % Free Space
Результирующий набор этого запроса представляет процент свободного места на компьютерах Windows и Linux таким же образом, что делает дальнейший анализ более понятным и простым.
Преобразуйте
Free Megabytes
в Гигабайты (значениеFree Megabytes
* 0,001 = Бесплатные Гигабайты) и переназначитеFree Megabytes
вOverallFreeSpaceInGB
:Щелкните, чтобы выполнить запрос в демонстрационной среде Log Analytics
Perf | where TimeGenerated > ago(1d) | where ObjectName == "LogicalDisk" or // The object name used in Windows records ObjectName == "Logical Disk" // The object name used in Linux records | where CounterName == "Free Megabytes" or CounterName =="% Free Space" or CounterName == "% Used Space" // Filters for the performance counters Free Megabytes, % Free Space, and % Used Space performance counters | where InstanceName == "_Total" // Retrieves data related to free space for all drives on a virtual disk | summarize arg_max(TimeGenerated, CounterValue) by Computer, CounterName // Retrieves the last counter value collected for each counter for every virtual machine | extend CounterValue = iff(CounterName=="% Used Space", 100-CounterValue, CounterValue) // Converts % Used Space to % Free Space | extend CounterName = iff(CounterName=="% Used Space", "% Free Space", CounterName) // Changes the column name from % Used Space to % Free Space | extend CounterValue = iff(CounterName=="Free Megabytes", (CounterValue)*0.001, CounterValue) // Converts megabytes to gigabytes | extend CounterName= iff(CounterName=="Free Megabytes", "OverallFreeSpaceInGB", CounterName) // Changes the column name fromFree Megabytes to OverallFreeSpaceInGB
Теперь вы можете получить четкое представление о общем свободном пространстве на каждом компьютере в гигабайтах и в процентах от общего объема памяти компьютера.
Задача. Объединение статистики свободного места для каждого компьютера
Результирующий набор запроса до сих пор включает две строки для каждого компьютера — одна строка показывает общее свободное пространство в Гигабайтах, а в другом — процент свободного места.
Можно ли создать словарь, который объединяет эти две статистики свободного места для каждой виртуальной машины?
Подсказка :
- Используйте функцию bag_pack() для создания пар ключ-значение для каждого из двух счетчиков производительности.
- Используйте функцию агрегирования make_bag() для объединения обоих значений ключа для каждого компьютера.
решение :
Группировать пары "ключ-значение" с идентификатором
CounterName, CounterValue
:Щелкните, чтобы выполнить запрос в демонстрационной среде Log Analytics
Perf | where TimeGenerated > ago(1d) | where ObjectName == "LogicalDisk" or // The object name used in Windows records ObjectName == "Logical Disk" // The object name used in Linux records | where CounterName == "Free Megabytes" or CounterName =="% Free Space" or CounterName == "% Used Space" // Filters for the performance counters Free Megabytes, % Free Space, and % Used Space performance counters | where InstanceName == "_Total" // Retrieves data related to free space for all drives on a virtual disk | summarize arg_max(TimeGenerated, CounterValue) by Computer, CounterName // Retrieves the last counter value collected for each counter for every virtual machine | extend CounterValue = iff(CounterName=="% Used Space", 100-CounterValue, CounterValue) // Converts % Used Space to % Free Space | extend CounterName = iff(CounterName=="% Used Space", "% Free Space", CounterName) // Changes the column name from % Used Space to % Free Space | extend CounterValue = iff(CounterName=="Free Megabytes", (CounterValue)*0.001, CounterValue) // Converts megabytes to gigabytes | extend CounterName= iff(CounterName=="Free Megabytes", "OverallFreeSpaceInGB", CounterName) // Changes the column name fromFree Megabytes to OverallFreeSpaceInGB | extend packed = pack(CounterName, CounterValue) // Groups together CounterName-CounterValue key-value pairs
Группирование
CounterName, CounterValue
пар "ключ-значение" позволяет на следующем шаге создать словарь, содержащий статистику свободного места для каждого компьютера.Создайте контейнер свойств (словарь) под названием SpaceStats, содержащий все данные о свободном месте, собранные для каждого компьютера. Подведите итоги по каждому компьютеру и отфильтруйте те, у которых менее 50% свободного места.
Щелкните, чтобы выполнить запрос в демонстрационной среде Log Analytics
Perf | where TimeGenerated > ago(1d) | where ObjectName == "LogicalDisk" or // The object name used in Windows records ObjectName == "Logical Disk" // The object name used in Linux records | where CounterName == "Free Megabytes" or CounterName =="% Free Space" or CounterName == "% Used Space" // Filters for the performance counters Free Megabytes, % Free Space, and % Used Space performance counters | where InstanceName == "_Total" // Retrieves data related to free space for all drives on a virtual disk | summarize arg_max(TimeGenerated, CounterValue) by Computer, CounterName // Retrieves the last counter value collected for each counter for every virtual machine | extend CounterValue = iff(CounterName=="% Used Space", 100-CounterValue, CounterValue) // Converts % Used Space to % Free Space | extend CounterName = iff(CounterName=="% Used Space", "% Free Space", CounterName) // Changes the column name from % Used Space to % Free Space | extend CounterValue = iff(CounterName=="Free Megabytes", (CounterValue)*0.001, CounterValue) // Converts megabytes to gigabytes | extend CounterName= iff(CounterName=="Free Megabytes", "OverallFreeSpaceInGB", CounterName) // Changes the column name fromFree Megabytes to OverallFreeSpaceInGB | extend packed = pack(CounterName, CounterValue) // Groups together CounterName-CounterValue key-value pairs | summarize SpaceStats = make_bag(packed) by Computer // Summarizes free space statstics by computer | where SpaceStats.["% Free Space"]<= 50
Результирующий набор этого запроса суммирует статистику свободного пространства для каждой машины, что и было целью вашего анализа свободного пространства!
Последняя строка в запросе фильтрует устройства, имеющие менее 50% свободного пространства. Возможно, вам стоит отслеживать или более внимательно анализировать их, или перенастроить, чтобы убедиться, что они не закончатся местом.