演習 - コンピューター別に空き領域の統計情報を集計する
ここでは、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
オブジェクトを調べます)。 名前が似た 2 つのオブジェクトがある理由は、LogicalDisk
は Windows レコードのオブジェクト名であり、Linux レコードでは Logical Disk
が使用されるためです。
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
という 2 つの類似したカウンターがあります。
このデータをどのように使用できるか、またどの 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 演算子」と「== (等号) 演算子」を参照してください。 |
CounterName |
テーブル内のすべてのパフォーマンス カウンターの名前が保持されています。 |
|
where CounterName == "Free Megabytes" or CounterName =="% Free Space" or CounterName == "% Used Space" 結果を簡素化し、さらなる分析を容易にするために:
|
InstanceName |
監視対象オブジェクトの監視対象インスタンスを一覧表示します。 | 仮想マシン上のすべてのドライブを監視する。 | InstanceName == "_Total" 詳細については、「where 演算子」と「== (等号) 演算子」を参照してください。 |
CounterValue |
カウンターに対して収集された測定値です。 | % Used Space 、% Free Space 、Free Megabytes パフォーマンス カウンターのパフォーマンス測定値を取得する。 |
|
3. クエリを作成する
過去 1 日間に生成され、
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 Gigabytes)、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
これで各マシンの合計空き領域を、ギガバイト単位で、またマシンの合計メモリに対する割合として、明確に把握できるようになりました。
課題: 各コンピューターの空き領域の統計情報をまとめる
これまでのクエリの結果セットには、コンピューターごとに 2 つの行が含まれています。一方の行には全体の空き領域がギガバイト単位で表示され、もう 1 行には使用可能な空き領域の割合が表示されます。
仮想マシンごとに、これら 2 つの空き領域に関する統計情報をまとめたディクショナリを作成することはできますか?
ヒント:
- bag_pack() 関数を使って、2 つのパフォーマンス カウンターのそれぞれについてキーと値のペアを作成します。
- 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% 未満のマシンをフィルター処理します。 それらをさらに詳しく監視または分析したり、領域が不足しないように再構成したりできます。