Упражнение. Сводка статистики свободного места по компьютеру

Завершено

Здесь вы получите и преобразуйте данные из Perf таблицы с помощью запросов KQL для анализа свободного пространства компьютеров, регистрирующих данные в рабочей области Log Analytics.

1. Установка целей

Помните, что ИТ-отдел заметил повторяющиеся проблемы, связанные с нехваткой свободного места на виртуальных машинах.

Чтобы проанализировать использование свободного места на компьютерах, работающих в ИТ-среде, вам потребуется следующее:

  • Общее свободное место, доступное на каждом компьютере.
  • Процент пространства, используемого на каждом компьютере.

2. Оценка журналов

Как мы видели в предыдущем упражнении, таблица Perf содержит сведения о производительности аппаратных компонентов, операционных систем и приложений.

Мы отметили, что Perf в столбце таблицы ObjectName перечислены имена всех отслеживаемых объектов, а CounterName столбец содержит имена различных счетчиков производительности, собираемых Azure Monitor. Мы также видели, что оба этих столбца содержат много значений, многие из которых появляются несколько раз.

Давайте запустите запрос в таблице для перечисления различных ObjectName значенийPerf:

Щелкните, чтобы запустить запрос в демонстрационной среде Log Analytics

Perf // The table you’re querying
| distinct ObjectName // Lists distinct ObjectName values

Результирующий набор этого запроса содержит все ObjectName значения, которые в настоящее время находятся в таблице:

Screenshot that shows the results of the Distinct Object Name query on the Perf table with the Logical Disk values highlighted.

В нашем сценарии мы заинтересованы в анализе виртуальных машин, поэтому объекты, которые мы хотим просмотреть 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 объектов:

Screenshot that shows the results of a query that lists the distinct names of the counters Azure Monitor collects for the LogicalDisk (written as one word) and Logical Disk (written as two words) objects.

Счетчики производительности, предоставляющие сведения об используемом и свободном пространстве, % Free Space% Used SpaceиFree Megabytes. У нас есть два аналогичных счетчика - % Free Space и % Used Space - собранные из записей Windows и Linux соответственно.

Давайте рассмотрим, как мы можем использовать эти данные и какие операции KQL помогут извлечь и преобразовать данные:

Столбец Description Цель анализа Связанные операции KQL
TimeGenerated Указывает, когда виртуальная машина создает каждый журнал. Определите время область анализа. where TimeGenerated > ago(1d)
Дополнительные сведения см. в разделе ago(), где операторы и числовые операторы.
Computer Компьютер, с которого было собрано событие. Связывание использования ЦП с определенным компьютером. summarize... by Computer
Дополнительные сведения см. в разделе "Оператор сводки".
ObjectName Содержит имена всех объектов, для которых таблица содержит данные о производительности. Для анализа вы заинтересованы в LogicalDisk объектах и Logical Disk объектах. Отслеживайте логические диски на виртуальных машинах. where ObjectName == "LogicalDisk" or ObjectName == "Logical Disk"
Дополнительные сведения см. в разделе о том, где оператор и == (равно) оператор.
CounterName Содержит имена всех счетчиков производительности в таблице.
  • Отслеживайте счетчики, связанные с свободным пространством.
  • % Free Space Переименуйте в (параллельно, преобразуйте % Used Space связанныеCounterValue)
.
where CounterName == "Free Megabytes" or CounterName =="% Free Space" or CounterName == "% Used Space"
Чтобы упростить результаты и упростить дальнейший анализ:
  • Перейдите на % Used Space% Free Space (CounterName = iff(CounterName=="% Used Space", "% Free Space", CounterName)).
  • OverallFreeSpaceInGB Изменение на Free Megabytes (CounterName= iff(CounterName=="Free Megabytes", "OverallFreeSpaceInGB", CounterName))
Дополнительные сведения см. в разделе о том, где оператор и == (равно) оператор.
InstanceName Выводит список отслеживаемых экземпляров отслеживаемого объекта. Отслеживайте все диски на виртуальной машине. InstanceName == "_Total"
Дополнительные сведения см. в разделе о том, где оператор и == (равно) оператор.
CounterValue Измерение, собираемые для счетчика. Получение измерений производительности для % Used Space% Free Spaceсчетчиков производительности и Free Megabytes счетчиков производительности.
  • CounterValue = iff(CounterName=="% Used Space", 100-CounterValue, CounterValue)
  • CounterValue = iff(CounterName=="Free Megabytes", (CounterValue)*0.001, CounterValue)
Дополнительные сведения см. в разделе о том, где оператор и == (равно) оператор.

3. Написание запроса

  1. Извлеките все журналы, созданные за прошлый день, которые сообщили Free Megabytes% Free Space% Used Spaceо счетчиках производительности и счетчиков производительности для 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  
    

    Результирующий набор этого запроса, скорее всего, включает несколько записей для каждого компьютера, из которого собираются счетчики производительности, связанные с свободным пространством.

    Screenshot that shows the results of a query for logs generated in the past day that report on virtual machine free space.

  2. Фильтр для последнего значения счетчика, собираемого для каждого счетчика, сообщаемого каждой виртуальной машиной:

    Щелкните, чтобы запустить запрос в демонстрационной среде 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
    

    Теперь у вас есть последнее значение счетчика счетчика для каждого счетчика, связанного с пробелами на каждом компьютере.

    Screenshot that shows the results of a query that filters for the last counter value collected for each counter every virtual machine.

  3. Чтобы упростить анализ:

    1. % Used Space Преобразуйте значение % Free Space счетчика в (вычитая % Used Space значение из 100 %) и измените имя столбца % Free Spaceна% Used 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 таким же образом, что делает дальнейший анализ более понятным и простым.

      Screenshot that shows the results of a query that converts the Percentage Used Space counter value to Percentage Free Space.

    2. Преобразуйте Free Megabytes в Гигабайты (Free Megabytes значение * 0,001 = Бесплатные Гигабайты) и переназначите Free MegabytesOverallFreeSpaceInGBв :

      Щелкните, чтобы запустить запрос в демонстрационной среде 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
      

      Теперь вы можете получить четкое представление о общем свободном пространстве на каждом компьютере в гигабайтах и в процентах от общего объема памяти компьютера.

      Screenshot that shows the results of a query that converts the Free Megabytes column to Overall Free Space In Gigabytes.

Задача. Объединение статистики свободного места для каждого компьютера

Результирующий набор запроса до сих пор включает две строки для каждого компьютера — одна строка показывает общее свободное пространство в Гигабайтах, а в другом — процент свободного места.

Можно ли создать словарь, который объединяет эти две статистики свободного места для каждой виртуальной машины?

Подсказка.

  • Используйте функцию bag_pack() для создания пар "ключ-значение" для каждого из двух счетчиков производительности.
  • Используйте функцию агрегирования make_bag() для объединения обоих значений ключа для каждого компьютера.

Решение.

  1. Группировать 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 Объединение пар "ключ-значение" позволяет создать словарь статистики свободного пространства для каждого компьютера на следующем шаге.

    Screenshot that shows the results of a query that groups together Counter Name and Counter Value key-value pairs.

  2. Создайте контейнер свойств (словарь), называемый 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 % свободного места. Возможно, вы хотите отслеживать или анализировать их более внимательно или перенастроить их, чтобы убедиться, что они не работают.

    Screenshot that shows the results of a query that summarizes free space statistics by machine.