연습 - 컴퓨터별 여유 공간 통계 요약
여기서는 KQL 쿼리를 사용하여 테이블에서 Perf
데이터를 검색하고 변환하여 Log Analytics 작업 영역에 데이터를 기록하는 컴퓨터의 여유 공간을 분석합니다.
1. 목표 설정
IT 팀은 가상 머신의 여유 공간 부족에 관련된 반복적인 문제를 발견했습니다.
IT 환경에서 실행되는 컴퓨터의 여유 공간 사용량을 분석하려면 다음 정보가 필요합니다.
- 각 컴퓨터의 총 여유 공간
- 각 컴퓨터에 사용되는 공간 백분율
2. 로그 평가
이전 연습에서 볼 수 있듯이 이 Perf
테이블에서는 하드웨어 구성 요소, 운영 체제 및 애플리케이션의 성능에 대한 정보를 제공합니다.
Perf
테이블의 ObjectName
열에는 모니터링되는 모든 개체의 이름이 나열되고 CounterName
열에는 Azure Monitor에서 수집하는 다양한 성능 카운터의 이름이 나열됩니다. 이 두 열 모두 많은 값을 보유하며, 그 중 많은 값이 여러 번 표시됩니다.
Perf
테이블에서 쿼리를 실행하여 고유한 ObjectName
값을 나열해 보겠습니다.
Log Analytics 데모 환경에서 쿼리를 실행하려면 클릭
Perf // The table you’re querying
| distinct ObjectName // Lists distinct ObjectName values
이 쿼리의 결과 집합에는 다음과 같이 현재 테이블에 있는 모든 ObjectName
값이 포함됩니다.
이 시나리오에서는 가상 머신을 분석하는 데 관심이 있으므로 우리가 참조하고자 하는 개체는 LogicalDisk
및 Logical Disk
입니다(물리적인 머신에서 메모리를 모니터링하려면 memory
개체 참조). 이름이 비슷한 두 개체가 있는 이유는 Logical Disk
은(는) Linux 레코드의, LogicalDisk
은(는) Windows 레코드의 개체 이름이기 때문입니다.
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
개체에 대해 수집된 모든 성능 카운터가 포함됩니다.
사용된 및 여유 공간에 대한 정보를 제공하는 성능 카운터는 % Used Space
, % Free Space
및 Free Megabytes
입니다. Windows 및 Linux 레코드에서 각각 수집된 두 개의 유사한 카운터(% Free Space
및 % Used Space
)가 있습니다.
이제 이 데이터를 사용하는 방법과 데이터를 추출하고 변환하는 데 도움이 되는 KQL 작업을 평가해 보겠습니다.
열 | 설명 | 분석 목표 | 관련 KQL 작업 |
---|---|---|---|
TimeGenerated |
가상 머신이 각 로그를 생성한 시기를 나타냅니다. | 분석의 시간 범위를 정의합니다. | where TimeGenerated > ago(1d) 자세한 내용은 ago(), where 연산자 및 숫자 연산자를 참조하세요. |
Computer |
이벤트가 수집된 컴퓨터. | CPU 사용량을 특정 컴퓨터와 연결합니다. | summarize... by Computer 자세한 내용은 summarize 연산자를 참조하세요. |
ObjectName |
테이블이 성능 데이터를 보유하는 모든 개체의 이름을 보유합니다. 분석을 위해 LogicalDisk 및 Logical Disk 개체에 관심이 있습니다. |
가상 머신의 논리 디스크를 모니터링합니다. | where ObjectName == "LogicalDisk" or ObjectName == "Logical Disk" 자세한 내용은 where 연산자 및 ==(equals) 연산자를 참조하세요. |
CounterName |
테이블에 있는 모든 성능 카운터의 이름을 보유합니다. |
|
where CounterName == "Free Megabytes" or CounterName =="% Free Space" or CounterName == "% Used Space" 결과를 단순화하고 추가 분석을 용이하게 하려면:
|
InstanceName |
모니터링되는 개체의 모니터링되는 인스턴스를 나열합니다. | 가상 머신의 모든 드라이브를 모니터링합니다. | InstanceName == "_Total" 자세한 내용은 where 연산자 및 ==(equals) 연산자를 참조하세요. |
CounterValue |
카운터에 대해 수집된 측정값입니다. | % Used Space , % Free Space 및 Free Megabytes 성능 카운터에 대해 성능 측정을 검색합니다. |
|
3. 쿼리 작성
다음과 같이
LogicalDisk
및Logical Disk
개체에 대해% Used Space
,% Free Space
및Free Megabytes
성능 카운터에 보고된 지난 날 생성된 모든 로그를 검색합니다.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
이 쿼리의 결과 집합에는 여유 공간과 관련된 성능 카운터를 수집하는 각 컴퓨터에 대한 여러 레코드가 포함될 수 있습니다.
각 가상 머신에서 보고한 모든 카운터에 대해 수집된 마지막 카운터 값을 필터링합니다.
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
이제 모든 컴퓨터의 모든 여유 공간 관련 카운터에 대해 마지막으로 보고된 카운터 값이 있습니다.
분석을 용이하게 하려면 다음을 수행합니다.
다음과 같이
% Used Space
카운터 값을% Free Space
(으)로 변환하고(100%에서% Used Space
값을 빼서)% 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 컴퓨터에서 여유 공간의 백분율을 동일한 방식으로 제공하므로 이 쿼리의 결과 집합을 더 명확하고 쉽게 분석할 수 있습니다.
기가바이트를
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() 집계 함수를 사용하여 각 컴퓨터의 키-값 값을 모두 번들링합니다.
해결 방법:
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
키-값 쌍을 그룹화하면 다음 단계에서 각 컴퓨터에 대해 여유 공간 통계 사전을 만들 수 있습니다.각 컴퓨터에 대해 수집된 모든 여유 공간 통계의 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% 미만인 머신을 필터링합니다. 더 자세히 모니터링하거나 분석하거나 다시 구성하여 공간이 부족하지 않도록 할 수 있습니다.