연습 - 로그 전송을 중지한 최근 활성 가상 머신 나열

완료됨

여기서는 Heartbeat 테이블에서 데이터를 검색하고 변환하여 사용자 환경의 컴퓨터 상태에 대한 인사이트를 얻는 KQL 쿼리를 작성합니다.

1. 목표 설정

첫 번째 로그 분석 목표는 네트워크의 모든 활성 가상 머신에 대한 데이터를 가져오는 것입니다. 모든 활성 가상 머신을 완전히 표시할 수 있도록 데이터 전송을 중지하는 컴퓨터를 식별하려고 합니다.

데이터 전송을 중지한 머신을 확인하려면 다음 정보가 필요합니다.

  • 최근에 데이터를 기록했지만 지난 몇 분 동안 예상대로 데이터를 기록하지 않은 모든 컴퓨터
  • 심층 분석을 위해 각 컴퓨터에서 실행 중인 가상 머신 에이전트를 파악하는 것이 유용합니다.

2. 로그 평가

Azure Monitor는 Azure Monitor 에이전트를 사용하여 가상 머신 내에서 실행되는 활동 및 운영 체제 프로세스에 대한 데이터를 수집합니다.

참고 항목

사용자 환경에서 일부 오래된 컴퓨터는 여전히 Azure Monitor가 더 이상 사용하지 않는 레거시 Log Analytics Windows 및 Linux 에이전트를 사용합니다.

Azure Monitor 에이전트 및 Log Analytics 에이전트는 1분에 한 번 가상 머신 상태 데이터를 Heartbeat 테이블로 보냅니다.

Heartbeat 테이블에서 간단한 take 10 쿼리를 실행하여 각 열이 보유하는 데이터 형식을 살펴보겠습니다.

Log Analytics 데모 환경에서 쿼리를 실행하려면 클릭

Heartbeat
| take 10

TimeGenerated, Computer, CategoryOSType 열 모두에는 분석과 관련된 데이터가 있습니다.

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

이제 이 데이터를 사용하는 방법과 데이터를 추출하고 변환하는 데 도움이 되는 KQL 작업을 평가해 보겠습니다.

설명 분석 목표 관련 KQL 작업
TimeGenerated 가상 머신이 각 로그를 생성한 시기를 나타냅니다.
  • 최근 활성 컴퓨터를 식별합니다.
  • 각 컴퓨터에 대해 생성된 마지막 로그를 찾아 지난 몇 분 내에 생성된 것인지 확인합니다.
  • where TimeGenerated >ago(48h)
  • summarize max(TimeGenerated)
  • max_TimeGenerated < ago(5m)
자세한 내용은 where 연산자, summarize 연산자, ago()max()(집계 함수)를 참조하세요.
Computer 컴퓨터의 고유 식별자입니다.
  • 컴퓨터별로 결과를 요약합니다.
  • 고유한 에이전트 버전별로 컴퓨터를 그룹화합니다.
  • summarize by Computer
  • summarize ComputersList=make_set(Computer)
자세한 내용은 summarize 연산자make_set()(집계 함수)를 참조하세요.
Category 에이전트 유형:
  • Azure Monitor Agent 또는
  • Direct Agent: Log Analytics 에이전트를 나타냅니다. Windows용 Log Analytics 에이전트를 MMA라고도 합니다. Linux용 Log Analytics 에이전트를 OMS라고도 합니다.
컴퓨터에서 실행 중인 에이전트를 식별합니다. 결과를 간소화하고 필터링과 같은 추가 분석을 용이하게 하려면 다음을 수행합니다.
  • 열 이름을 AgentType(AgentType=Category)으로 바꿉니다.
  • Windows 컴퓨터의 경우 Direct Agent 값을 MMA로 변경합니다(AgentType= iif(AgentType == "Direct Agent" and OSType =="Windows", "MMA", AgentType).
  • Linux 컴퓨터의 경우 Direct Agent 값을 OMS로 변경합니다(AgentType= iif(AgentType == "Direct Agent" and OSType =="Linux", "OMS", AgentType).
자세한 내용은 iff()==(equals) 연산자를 참조하세요.
OSType 가상 머신에서 실행되는 운영 체제 유형입니다. Windows 및 Linux에서 다른 Log Analytics 에이전트의 에이전트 유형을 식별합니다. summarize by... OSType
자세한 내용은 summarize 연산자를 참조하세요.
Version 가상 머신을 모니터링하는 에이전트의 버전 번호입니다. 각 컴퓨터에서 에이전트 버전을 식별합니다. 열 이름을 AgentVersion(AgentVersion=Version)으로 바꿉니다.

3. 쿼리 작성

지난 48시간 동안 활성화되었지만 지난 5분 동안 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. 지난 5분 동안 로그를 보내지 않은 컴퓨터를 확인하려면 지난 5분 동안 생성된 모든 로그를 필터링합니다.

    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시간 동안 데이터를 기록했지만 지난 5분 동안 생성된 로그는 포함하지 않은 모든 컴퓨터의 마지막 생성 로그가 포함됩니다. 즉, 지난 5분 동안 데이터를 기록한 모든 컴퓨터가 결과 집합에 포함되지는 않습니다.

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

    이제 찾고 있는 데이터가 확보되었습니다. 지난 48시간 동안 데이터를 기록했지만 지난 5분 동안의 예상된 데이터는 기록하지 않은 모든 컴퓨터의 목록입니다. 결과 집합은 자세히 조사하려는 컴퓨터 집합으로 구성됩니다.

  4. 쿼리 결과를 조작하여 정보를 보다 명확하게 표시합니다.

    예를 들어 생성된 시간별로 로그를 구성하여(가장 오래된 로그부터) 가장 긴 시간 동안 데이터를 기록하지 않은 컴퓨터를 확인할 수 있습니다.

    AgentType 열의 Direct Agent 값은 Log Analytics 에이전트가 컴퓨터에서 실행 중임을 나타냅니다. Windows용 Log Analytics 에이전트를 OMS라고도 하고 Linux의 경우 에이전트를 MMS라고도 하므로 MMA Windows 컴퓨터 및 OMS Linux 컴퓨터의 값 이름을 Direct Agent 바꾸면 결과가 간소화되고 필터링과 같은 추가 분석이 용이합니다.

    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. 쿼리에서 처음 5줄을 복사하고 쿼리의 summarize 줄에 Version 열을 추가하여 에이전트 버전 정보를 추출합니다.

    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.