연습 - 로그 전송을 중지한 최근 활성 가상 머신 나열
여기서는 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
, Category
및 OSType
열 모두에는 분석과 관련된 데이터가 있습니다.
이제 이 데이터를 사용하는 방법과 데이터를 추출하고 변환하는 데 도움이 되는 KQL 작업을 평가해 보겠습니다.
열 | 설명 | 분석 목표 | 관련 KQL 작업 |
---|---|---|---|
TimeGenerated |
가상 머신이 각 로그를 생성한 시기를 나타냅니다. |
|
|
Computer |
컴퓨터의 고유 식별자입니다. |
|
|
Category |
에이전트 유형:
|
컴퓨터에서 실행 중인 에이전트를 식별합니다. | 결과를 간소화하고 필터링과 같은 추가 분석을 용이하게 하려면 다음을 수행합니다.
|
OSType |
가상 머신에서 실행되는 운영 체제 유형입니다. | Windows 및 Linux에서 다른 Log Analytics 에이전트의 에이전트 유형을 식별합니다. | summarize by... OSType 자세한 내용은 summarize 연산자를 참조하세요. |
Version |
가상 머신을 모니터링하는 에이전트의 버전 번호입니다. | 각 컴퓨터에서 에이전트 버전을 식별합니다. | 열 이름을 AgentVersion (AgentVersion=Version )으로 바꿉니다. |
3. 쿼리 작성
지난 48시간 동안 활성화되었지만 지난 5분 동안 Heartbeat
테이블에 데이터를 기록하지 않은 컴퓨터를 나열하는 쿼리를 작성합니다.
지난 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시간 동안 로그 데이터를 보낸 모든 컴퓨터의 로그가 포함됩니다. 이러한 결과에는 각 활성 컴퓨터에 대한 수많은 로그가 포함될 수 있습니다.
최근에 로그를 보내지 않은 컴퓨터를 이해하려면 각 컴퓨터가 보낸 마지막 로그만 필요합니다.
각 컴퓨터에서 생성된 마지막 로그를 찾아 컴퓨터, 에이전트 유형 및 운영 체제별로 요약합니다.
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
으로 변경했습니다. 이를 통해 열에서 보고 있는 정보가 이 분석의 일부라는 사실이 더 명확히 드러납니다.지난 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분 동안 데이터를 기록한 모든 컴퓨터가 결과 집합에 포함되지는 않습니다.
이제 찾고 있는 데이터가 확보되었습니다. 지난 48시간 동안 데이터를 기록했지만 지난 5분 동안의 예상된 데이터는 기록하지 않은 모든 컴퓨터의 목록입니다. 결과 집합은 자세히 조사하려는 컴퓨터 집합으로 구성됩니다.
쿼리 결과를 조작하여 정보를 보다 명확하게 표시합니다.
예를 들어 생성된 시간별로 로그를 구성하여(가장 오래된 로그부터) 가장 긴 시간 동안 데이터를 기록하지 않은 컴퓨터를 확인할 수 있습니다.
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
를 사용하여 보고를 중지한 컴퓨터의 마지막 하트비트와 컴퓨터 로그 또는 동시에 발생한 다른 환경 이벤트와의 상관 관계를 지정합니다. 이러한 방식으로 로그의 상관 관계를 지정하면 조사 중인 문제의 근본 원인을 찾는 데 도움이 될 수 있습니다.
챌린지: 에이전트 및 에이전트 버전을 모니터링하여 컴퓨터 그룹화
컴퓨터에서 실행 중인 에이전트 및 에이전트 버전을 이해하면 문제의 근본 원인을 분석하고 새 에이전트 또는 새 에이전트 버전으로 업데이트해야 하는 컴퓨터를 식별하는 데 도움이 될 수 있습니다.
이 정보를 얻기 위해 위에서 개발한 쿼리에 대해 몇 가지 빠른 조정 작업을 고려해볼 수 있나요?
이와 관련하여 다음 사항을 고려해야 합니다.
- 로그에서 추출해야 하는 추가 정보는 무엇인가요?
- 실행 중인 에이전트 버전별로 컴퓨터를 그룹화하는 데 사용할 수 있는 KQL 작업은 무엇인가요?
해결 방법:
쿼리에서 처음 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
명확성을 위해
Version
열 이름을AgentVersion
으로 바꾸고, 다른summarize
줄을 추가하여 에이전트 유형, 에이전트 버전 및 운영 체제 유형의 고유한 조합을 찾고, KQLmake_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
이제 에이전트 유형 및 에이전트 버전의 고유한 조합 목록과 각 에이전트의 특정 버전을 실행하는 모든 최근 활성 컴퓨터 집합을 비롯한 원하는 데이터를 확보했습니다.