Упражнение — перечислить недавно активные виртуальные машины, которые перестали отправлять журналы.

Завершено

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

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

Ваша первая цель анализа журналов — обеспечить получение данных обо всех активных виртуальных машинах в сети. Необходимо определить компьютеры, которые перестают отправлять данные, чтобы обеспечить полную видимость всех активных виртуальных машин.

Чтобы определить, какие компьютеры перестали отправлять данные, вам потребуется:

  • Все компьютеры, которые недавно регистрировали данные, но не регистрировали данные, как ожидалось за последние несколько минут.
  • Для более глубокого анализа полезно знать, какой агент виртуальной машины работает на каждом компьютере.

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

Azure Monitor использует агент Azure Monitor для сбора данных о действиях и процессах операционной системы, выполняемых на виртуальных машинах.

Заметка

Некоторые старые машины в вашей системе все еще используют устаревшие агенты Log Analytics для Windows и Linux, которые Azure Monitor постепенно выводит из использования.

Агент Azure Monitor и агент Log Analytics отправляют данные о работоспособности виртуальных машин в таблицу Heartbeat раз в минуту.

Давайте выполним простой запрос take 10 в таблице Heartbeat, чтобы просмотреть тип данных каждого из её столбцов.

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

Heartbeat
| take 10

Столбцы TimeGenerated, Computer, Categoryи OSType имеют данные, относящиеся к нашему анализу.

снимок экрана, показывающий результаты выполнения запроса на выбор 10 записей в таблице Heartbeat с выделенными столбцами TimeGenerated, Computer, Category и OSType.

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

Столбец Описание Цель анализа Связанные операции KQL
TimeGenerated Указывает, когда виртуальная машина создает каждый журнал.
  • Определите недавно активные компьютеры.
  • Найдите последний журнал, созданный для каждого компьютера, и проверьте, был ли он создан за последние несколько минут.
  • where TimeGenerated >ago(48h)
  • summarize max(TimeGenerated)
  • max_TimeGenerated < ago(5m)
Дополнительные сведения см. в разделе , где оператор, подводит итоги оператора, назад()и max() (функция агрегации).
Computer Уникальный идентификатор компьютера.
  • Суммирование результатов по компьютеру.
  • Группировать компьютеры по различным версиям агента.
  • summarize by Computer
  • summarize ComputersList=make_set(Computer)
Дополнительные сведения см. в операторе и make_set() (агрегирующая функция).
Category Тип агента:
  • Azure Monitor Agent или
  • Direct Agent, который представляет агенты Log Analytics. Агент Log Analytics для Windows также называется MMA. Агент Log Analytics для Linux также называется OMS.
Определите агент, запущенный на компьютере. Чтобы упростить результаты и упростить дальнейший анализ, например фильтрацию:
  • Переименование столбца в AgentType (AgentType=Category)
  • Измените значение Direct Agent на MMA для компьютеров Windows (AgentType= iif(AgentType == "Direct Agent" and OSType =="Windows", "MMA", AgentType).
  • Измените значение Direct Agent на OMS для компьютеров Linux (AgentType= iif(AgentType == "Direct Agent" and OSType =="Linux", "OMS", AgentType).
Дополнительные сведения см. в iff() и операторе == (равно).
OSType Тип операционной системы, работающей на виртуальной машине. Определите тип агента для агентов Log Analytics, которые различаются для Windows и Linux. summarize by... OSType
Дополнительные сведения см. в оператора сводки .
Version Номер версии агента, отслеживающего виртуальную машину. Определите версию агента на каждом компьютере. Переименуйте столбец на AgentVersion (AgentVersion=Version).

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

Напишите запрос, который перечисляет компьютеры, которые были активны за последние 48 часов, но не регистрировали данные в таблицу Heartbeat за последние пять минут.

  1. Извлеките все журналы за последние 48 часов:

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

    Heartbeat // The table you’re querying
    | where TimeGenerated >ago(48h) // Time range for the query - in this case, logs generated in the past 48 hours
    

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

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

    Чтобы понять, какие компьютеры недавно не отправляли журналы, вам потребуется только последний журнал, отправленный каждым компьютером.

  2. Найдите последний журнал, созданный каждым компьютером, и суммируете данные по компьютеру, типу агента и операционной системе:

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

    Heartbeat // The table you’re querying
    | where TimeGenerated >ago(48h) // Time range for the query - in this case, logs generated in the past 48 hours
    | summarize max(TimeGenerated) by Computer, AgentType=Category, OSType // Retrieves the last record generated by each computer and provides information about computer, agent type, and operating system
    

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

    В строке summarize вы переименовали столбец Category на AgentType, который лучше описывает информацию, которую вы просматриваете в столбце в рамках этого анализа.

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

  3. Чтобы узнать, какие компьютеры не отправляли журналы за последние пять минут, отфильтруйте все журналы, созданные за последние пять минут:

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

    Heartbeat // The table you’re querying
    | where TimeGenerated >ago(48h) // Time range for the query - in this case, logs generated in the past 48 hours
    | summarize max(TimeGenerated) by Computer, AgentType=Category, OSType // Retrieves the last record generated by each computer and provides information about computer, agent type, and operating system
    | where max_TimeGenerated < ago(5m) // Filters away all records generated in the last five minutes
    

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

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

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

  4. Управляйте результатами запроса, чтобы получить более четкое представление информации.

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

    Значение Direct Agent в столбце AgentType сообщает, что агент Log Analytics запущен на компьютере. Так как агент Log Analytics для Windows также называется OMS, а для Linux агент также называется MMS, переименование значения Direct Agent на MMA для компьютеров Windows и OMS для компьютеров Linux упрощает результаты и упрощает дальнейший анализ, например фильтрацию.

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

    Heartbeat // The table you’re querying
    | where TimeGenerated >ago(48h) // Time range for the query - in this case, logs generated in the past 48 hours 
    | summarize max(TimeGenerated) by Computer,AgentType=Category, OSType // Retrieves the last record generated by each computer and provides information about computer, agent type, and operating system
    | where max_TimeGenerated < ago(5m) // Filters away all records generated in the last five minutes
    | extend AgentType= iif(AgentType == "Direct Agent" and OSType =="Windows", "MMA", AgentType) // Changes the AgentType value from "Direct Agent" to "MMA" for Windows machines
    | extend AgentType= iif(AgentType == "Direct Agent" and OSType =="Linux", "OMS", AgentType) // Changes the AgentType value from "Direct Agent" to "OMS" for Linux machines
    | order by max_TimeGenerated asc // Sorts results by max_TimeGenerated from oldest to newest
    | project-reorder max_TimeGenerated,Computer,AgentType,OSType  // Reorganizes the order of columns in the result set
    

    Совет

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

    Скриншот, показывающий результаты запроса, изменяющего значения AgentType на MMA для Windows-машин и на OMS для Linux-машин.

Проблема: группировать компьютеры с помощью агента мониторинга и версии агента

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

Можете ли вы подумать о нескольких быстрых настройках, которые вы можете сделать с запросом, разработанным выше, чтобы получить эту информацию?

Рассмотрим следующее:

  • Какие дополнительные сведения необходимо извлечь из журналов?
  • Какую операцию KQL можно использовать для группирования компьютеров по версии агента, которую они выполняют?

решение :

  1. Скопируйте первые пять строк из запроса и добавьте столбец Version в строку summarize запроса для извлечения сведений о версии агента:

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

    Heartbeat // The table you’re querying
    | where TimeGenerated >ago(48h) // Time range for the query - in this case, logs generated in the past 48 hours 
    | summarize max(TimeGenerated) by Computer,AgentType=Category, OSType, Version // Retrieves the last record generated by each computer and provides information about computer, agent type, operating system, and agent version 
    | extend AgentType= iif(AgentType == "Direct Agent" and OSType =="Windows", "MMA", AgentType) // Changes the AgentType value from "Direct Agent" to "MMA" for Windows machines
    | extend AgentType= iif(AgentType == "Direct Agent" and OSType =="Linux", "OMS", AgentType) // Changes the AgentType value from "Direct Agent" to "OMS" for Linux machines
    

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

  2. Переименуйте столбец Version, чтобы AgentVersion для ясности, добавьте еще одну строку summarize, чтобы найти уникальные сочетания типов агента, версии агента и типа операционной системы, а также использовать агрегатную функцию KQL make_set() для перечисления всех компьютеров с каждой комбинацией типов агента и версии агента:

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

    Heartbeat // The table you’re querying
    | where TimeGenerated >ago(48h) // Time range for the query - in this case, logs generated in the past 48 hours 
    | summarize max(TimeGenerated) by Computer,AgentType=Category, OSType, Version // Retrieves the last record generated by each computer and provides information about computer, agent type, operating system, and agent version 
    | extend AgentType= iif(AgentType == "Direct Agent" and OSType =="Windows", "MMA", AgentType) // Changes the AgentType value from "Direct Agent" to "MMA" for Windows machines
    | extend AgentType= iif(AgentType == "Direct Agent" and OSType =="Linux", "OMS", AgentType) // Changes the AgentType value from "Direct Agent" to "OMS" for Linux machines
    | summarize ComputersList=make_set(Computer) by AgentVersion=Version, AgentType, OSType // Summarizes the result set by unique combination of agent type, agent version, and operating system, and lists the set of all machines running the specific agent version
    

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

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