Задача - Сводка статистики свободного места по компьютеру

Завершено

Здесь вы получите и преобразуете данные из таблицы 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:

Снимок экрана, показывающий результаты запроса, в котором перечислены отдельные имена счетчиков, которые Azure Monitor собирает для объектов 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 Содержит имена всех счетчиков производительности в таблице.
  • Отслеживайте счетчики, связанные со свободным пространством.
  • Переименуйте % Used Space на % Free 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)).
  • Изменение Free Megabytes на OverallFreeSpaceInGB (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. Извлеките все журналы, созданные за прошлый день, в которых сообщается о счетчиках производительности % 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  
    

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

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

  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
    

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

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

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

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

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

    2. Преобразуйте 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() для объединения обоих значений ключа для каждого компьютера.

решение :

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

    снимок экрана, демонстрирующий результаты запроса, который группирует пары

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

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