演習 - コンピューター別に空き領域の統計情報を集計する

完了

ここでは、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 値が含まれます。

Screenshot that shows the results of the Distinct Object Name query on the Perf table with the Logical Disk values highlighted.

このシナリオでは仮想マシンの分析に関心があるので、調べたいオブジェクトは LogicalDiskLogical 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 オブジェクトに対して収集されるすべてのパフォーマンス カウンターが含まれます。

Screenshot that shows the results of a query that lists the distinct names of the counters Azure Monitor collects for the LogicalDisk (written as one word) and Logical Disk (written as two words) objects.

使用されている領域と空き領域に関する情報を提供するパフォーマンス カウンターは、% Used Space% Free SpaceFree 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 テーブル内のすべてのパフォーマンス カウンターの名前が保持されています。
  • 空き領域に関連するカウンターを監視する。
  • % Used Space の名前を % Free Space に変更する (並行して、関連する CounterValue を変換する)
where CounterName == "Free Megabytes" or CounterName =="% Free Space" or CounterName == "% Used Space"
結果を簡素化し、さらなる分析を容易にするために:
  • % Used Space% Free Space に変更する (CounterName = iff(CounterName=="% Used Space", "% Free Space", CounterName))。
  • Free MegabytesOverallFreeSpaceInGB に変更する (CounterName= iff(CounterName=="Free Megabytes", "OverallFreeSpaceInGB", CounterName))
詳細については、「where 演算子」と「== (等号) 演算子」を参照してください。
InstanceName 監視対象オブジェクトの監視対象インスタンスを一覧表示します。 仮想マシン上のすべてのドライブを監視する。 InstanceName == "_Total"
詳細については、「where 演算子」と「== (等号) 演算子」を参照してください。
CounterValue カウンターに対して収集された測定値です。 % Used Space% Free SpaceFree Megabytes パフォーマンス カウンターのパフォーマンス測定値を取得する。
  • CounterValue = iff(CounterName=="% Used Space", 100-CounterValue, CounterValue)
  • CounterValue = iff(CounterName=="Free Megabytes", (CounterValue)*0.001, CounterValue)
詳細については、「where 演算子」と「== (等号) 演算子」を参照してください。

3. クエリを作成する

  1. 過去 1 日間に生成され、LogicalDisk オブジェクトと Logical Disk オブジェクトに対する % Used Space% Free SpaceFree 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  
    

    このクエリの結果セットには、空き領域に関連したパフォーマンス カウンターを収集するマシンごとに、複数のレコードが含まれている可能性があります。

    Screenshot that shows the results of a query for logs generated in the past day that report on virtual machine free space.

  2. 仮想マシンごとに報告されたすべてのカウンターについて、最後に収集されたカウンター値をフィルター処理します。

    ここをクリックして 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
    

    これで、すべてのマシンの空き領域に関連するすべてのカウンターについて、最後に報告されたカウンター値が得られました。

    Screenshot that shows the results of a query that filters for the last counter value collected for each counter every virtual machine.

  3. 分析を容易にするために:

    1. % 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 マシン上の空き領域の割合が同じ方法で表示されるため、さらなる分析をよりわかりやすく簡単に行うことができます。

      Screenshot that shows the results of a query that converts the Percentage Used Space counter value to Percentage Free Space.

    2. 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
      

      これで各マシンの合計空き領域を、ギガバイト単位で、またマシンの合計メモリに対する割合として、明確に把握できるようになりました。

      Screenshot that shows the results of a query that converts the Free Megabytes column to Overall Free Space In Gigabytes.

課題: 各コンピューターの空き領域の統計情報をまとめる

これまでのクエリの結果セットには、コンピューターごとに 2 つの行が含まれています。一方の行には全体の空き領域がギガバイト単位で表示され、もう 1 行には使用可能な空き領域の割合が表示されます。

仮想マシンごとに、これら 2 つの空き領域に関する統計情報をまとめたディクショナリを作成することはできますか?

ヒント:

  • bag_pack() 関数を使って、2 つのパフォーマンス カウンターのそれぞれについてキーと値のペアを作成します。
  • make_bag() 集計関数を使って、各コンピューターの両方のキーと値の値をバンドルします。

解決方法:

  1. 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 のキーと値のペアをグループ化すると、次のステップで、各コンピューターの空き領域に関する統計情報のディクショナリを作成できます。

    Screenshot that shows the results of a query that groups together Counter Name and Counter Value key-value pairs.

  2. マシンごとに収集されたすべての空き領域に関する統計情報から 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% 未満のマシンをフィルター処理します。 それらをさらに詳しく監視または分析したり、領域が不足しないように再構成したりできます。

    Screenshot that shows the results of a query that summarizes free space statistics by machine.