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

Завершено

Здесь вы напишете запросы 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, CategoryComputerи OSType столбцы имеют данные, относящиеся к нашему анализу.

Screenshot that shows the results of a take 10 query on the Heartbeat table with the TimeGenerated, Computer, Category, and OSType columns highlighted.

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

Столбец Description Цель анализа Связанные операции KQL
TimeGenerated Указывает, когда виртуальная машина создает каждый журнал.
  • Определите недавно активные компьютеры.
  • Найдите последний журнал, созданный для каждого компьютера, и проверка, был ли он создан за последние несколько минут.
  • where TimeGenerated >ago(48h)
  • summarize max(TimeGenerated)
  • max_TimeGenerated < ago(5m)
Дополнительные сведения см. в разделе о том, где оператор, оператор суммирования, ago()и 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() и == (equals).
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 часов. Эти результаты, скорее всего, включают множество журналов для каждого активного компьютера.

    Screenshot that shows the results of a query on the Heartbeat table for all records generated in the past 48 hours.

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

  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в , в который лучше описывается информация, которую вы просматриваете в столбце в рамках этого анализа.

    Screenshot that shows the results of a query for the last log generated by each machine.

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

    Screenshot that shows the results of a query that filters away all records generated in the last five minutes.

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

    Screenshot that shows the results of a query that changes the AgentType values to MMA for Windows machines and to OMS for Linux machines.

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

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

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

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

  • Какие дополнительные сведения необходимо извлечь из журналов?
  • Какую операцию 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
    

    Screenshot that shows the results of the first five lines of the query we've built up in this exercise, with the Version column added to the Summarize line to add agent version information to the results.

  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
    

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

    Screenshot that shows the results of a query that creates a list of all machines running each unique combination of agent type, agent version, and operating system.