Azure Monitor ログ内のデータは、Log Analytics ワークスペースまたは Application Insights アプリケーションのどちらかに一連のレコードとして格納され、各レコードが固有の列のセットを備えた特定のデータ型を持っています。 多くのデータ型には、複数の型にわたって共通の標準列があります。 この記事では、これらの列について説明し、それらの列をクエリで使用する方法の例を示します。
Application Insights のワークスペース ベースのアプリケーションではデータを Log Analytics ワークスペースに格納し、ワークスペース内の他のテーブルと同じ標準列を使用します。 クラシック アプリケーションではデータを個別に格納し、この記事で指定されている別の標準列を使用します。
注
標準列のいくつかは Log Analytics のスキーマ ビューや IntelliSense には表示されず、出力で列を明示的に指定しない限り、クエリの結果にも表示されません。
テナント識別子
TenantId 列には、Log Analytics ワークスペースのワークスペース ID が保持されます。
タイムジェネレイテッド
TimeGenerated 列には、レコードがデータ ソースにより作成された日付と時刻が含まれています。 詳細については、「Azure Monitor でのログ データ インジェスト時間」を参照してください。
TimeGenerated は、時間でフィルター処理または集計するために使用する共通の列を示します。 Azure portal でビューまたはダッシュボードの時間範囲を選択した場合は、結果をフィルター処理するために TimeGenerated が使用されます。
注
クラシック Application Insights リソースをサポートするテーブルでは、TimeGenerated 列ではなく Timestamp 列が使用されます。
注
[生成時刻] の値は、受信時刻の 2 日前より前、または 1 日以上先にはできません。 状況によっては、値が 2 日より古いか、将来 1 日を超える場合は、実際の受信時刻に置き換えられます。
例
次のクエリは、前の週の各日に作成されたエラー イベントの数を返します。
Event
| where EventLevelName == "Error"
| where TimeGenerated between(startofweek(ago(7days))..endofweek(ago(7days)))
| summarize count() by bin(TimeGenerated, 1day)
| sort by TimeGenerated asc
_TimeReceived
_TimeReceived 列には、そのレコードが Azure クラウド内の Azure Monitor インジェスト ポイントによって受信された日付と時刻が含まれています。 データ ソースとクラウドとの間における待ち時間の問題の特定に役立てることができます。 たとえば、エージェントから送信されているデータの遅延を引き起こしているネットワークの問題が考えられます。 詳細については、「Azure Monitor でのログ データ インジェスト時間」を参照してください。
注
_TimeReceived 列は、使用されるたびに計算されます。 このプロセスは、リソースを集中的に消費します。 それを使用して大量のレコードをフィルター処理しないでください。 この関数を繰り返し使用すると、クエリの実行時間が長くなる可能性があります。
次のクエリは、エージェントからのイベント レコードについて、1 時間ごとの平均待ち時間を返します。 これには、エージェントからクラウドまでの時間と、レコードがログ クエリで利用できるようになるまでの合計時間が含まれます。
Event
| where TimeGenerated > ago(1d)
| project TimeGenerated, TimeReceived = _TimeReceived, IngestionTime = ingestion_time()
| extend AgentLatency = toreal(datetime_diff('Millisecond',TimeReceived,TimeGenerated)) / 1000
| extend TotalLatency = toreal(datetime_diff('Millisecond',IngestionTime,TimeGenerated)) / 1000
| summarize avg(AgentLatency), avg(TotalLatency) by bin(TimeGenerated,1hr)
タイプ
Type 列は、そのレコードの取得元のテーブルの名前を保持します。これは、レコードの種類と考えることもできます。 この列は、複数のテーブルからのレコードを結合するクエリ (search
演算子を使用するクエリなど) で、異なる種類のレコードを区別するために役立ちます。 クエリによっては、Type の代わりに $table を使用できます。
注
クラシック Application Insights リソースをサポートするテーブルでは、Type 列ではなく itemType 列が使用されます。
例
次のクエリは、過去 1 時間に収集された種類ごとのレコード数を返します。
search *
| where TimeGenerated > ago(1h)
| summarize count() by Type
_ItemId
_ItemId 列には、そのレコードの一意識別子が保持されます。
_ResourceId(リソース識別子)
_ResourceId 列には、そのレコードが関連付けられているリソースの一意識別子が保持されます。 これにより、クエリのスコープを特定のリソースからのレコードのみに設定したり、複数のテーブルにまたがる関連データを結合したりために使用する標準列が提供されます。
Azure リソースの場合、 _ResourceId の値は Azure リソース ID の URL です。 この列は、Azure Arc リソースを含む Azure リソース、またはインジェスト時にリソース ID が示されたカスタム ログに限定されます。
注
一部のデータ型には、Azure リソース ID か、または少なくともその一部 (サブスクリプション ID など) を含むフィールドが既に割り当てられています。 これらのフィールドは下位互換性のために保持されていますが、_ResourceId を使用して相互相関を実行する方が一貫性があるため、この方法をお勧めします。
例
次のクエリは、各コンピューターのパフォーマンスとイベント データを結合します。 ID が 101 でプロセッサ使用率が 50% を超えるすべてのイベントが表示されます。
Perf
| where CounterName == "% User Time" and CounterValue > 50 and _ResourceId != ""
| join kind=inner (
Event
| where EventID == 101
) on _ResourceId
次のクエリは、AzureActivity レコードを SecurityEvent レコードに結合します。 これらのコンピューターにログインしたユーザーを含むアクティビティ操作がすべて表示されます。
AzureActivity
| where
OperationName in ("Restart Virtual Machine", "Create or Update Virtual Machine", "Delete Virtual Machine")
and ActivityStatus == "Succeeded"
| join kind= leftouter (
SecurityEvent
| where EventID == 4624
| summarize LoggedOnAccounts = makeset(Account) by _ResourceId
) on _ResourceId
次のクエリは、 _ResourceId を解析し、Azure リソース グループごとに課金対象のデータ ボリュームを集計します。
union withsource = tt *
| where _IsBillable == true
| parse tolower(_ResourceId) with "/subscriptions/" subscriptionId "/resourcegroups/"
resourceGroup "/providers/" provider "/" resourceType "/" resourceName
| summarize Bytes=sum(_BilledSize) by resourceGroup | sort by Bytes nulls last
複数の種類のデータにわたるスキャンは、実行コストが高いため、これらの union withsource = tt *
クエリは多用しないようにします。
_ResourceId 列を解析して抽出するのではなく、_SubscriptionId 列を使用する方が効率的です。
_SubscriptionId(サブスクリプションID)
_SubscriptionId 列には、そのレコードが関連付けられているリソースのサブスクリプション ID が保持されます。 これにより、クエリのスコープを特定のサブスクリプションからのレコードのみに設定したり、異なるサブスクリプションを比較するために使用する標準列が提供されます。
Azure リソースの場合、 __SubscriptionId の値は Azure リソース ID の URL のサブスクリプションの部分です。 この列は、Azure Arc リソースを含む Azure リソース、またはインジェスト時にサブスクリプション ID が示されたカスタム ログに限定されます。
注
一部のデータ型には、Azure サブスクリプション ID を含むフィールドが既に割り当てられています。 これらのフィールドは下位互換性のために保持されていますが、_SubscriptionId 列を使用して相互相関を実行する方が一貫性があるため、この方法をお勧めします。
例
次のクエリを使用すると、特定のサブスクリプションのコンピューターのパフォーマンス データを調べます。
Perf
| where TimeGenerated > ago(24h) and CounterName == "memoryAllocatableBytes"
| where _SubscriptionId == "ebb79bc0-aa86-44a7-8111-cabbe0c43993"
| summarize avgMemoryAllocatableBytes = avg(CounterValue) by Computer
次のクエリは、 _ResourceId を解析し、Azure サブスクリプションごとに課金対象のデータ ボリュームを集計します。
union withsource = tt *
| where _IsBillable == true
| summarize Bytes=sum(_BilledSize) by _SubscriptionId | sort by Bytes nulls last
複数の種類のデータにわたるスキャンは、実行コストが高いため、これらの union withsource = tt *
クエリは多用しないようにします。
_IsBillable // 請求可能かどうかを示す
_IsBillable 列は、取り込まれたデータが課金対象と見なされるかどうかを指定します。 _IsBillable が false
と等しいデータには、データのインジェスト、保持、アーカイブの料金は発生しません。
例
課金対象のデータ型を送信しているコンピューターの一覧を取得するには、次のクエリを使用します。
注
複数の種類のデータにわたるスキャンは実行コストが高いため、union withsource = tt *
を含むクエリの使用は控えめにしてください。
union withsource = tt *
| where _IsBillable == true
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| where computerName != ""
| summarize TotalVolumeBytes=sum(_BilledSize) by computerName
これを拡張して、課金対象のデータ型を送信している 1 時間あたりのコンピューターの数を返すことができます。
union withsource = tt *
| where _IsBillable == true
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| where computerName != ""
| summarize dcount(computerName) by bin(TimeGenerated, 1h) | sort by TimeGenerated asc
_請求額サイズ
_BilledSize 列では、_IsBillable が true である場合に Azure アカウントに課金されるデータのサイズ (バイト単位) を指定します。 課金サイズの計算方法の詳細については、「データ サイズの計算」を参照してください。
例
取り込まれた課金対象イベントのサイズをコンピューターごとに表示するには、サイズ (バイト単位) を指定する _BilledSize
列を使用します。
union withsource = tt *
| where _IsBillable == true
| summarize Bytes=sum(_BilledSize) by Computer | sort by Bytes nulls last
取り込まれた課金対象イベントのサイズをサブスクリプションごとに表示するには、次のクエリを使用します。
union withsource=table *
| where _IsBillable == true
| summarize Bytes=sum(_BilledSize) by _SubscriptionId | sort by Bytes nulls last
取り込まれた課金対象イベントのサイズをリソース グループごとに表示するには、次のクエリを使用します。
union withsource=table *
| where _IsBillable == true
| parse _ResourceId with "/subscriptions/" SubscriptionId "/resourcegroups/" ResourceGroupName "/" *
| summarize Bytes=sum(_BilledSize) by _SubscriptionId, ResourceGroupName | sort by Bytes nulls last
コンピューターごとに、取り込まれたイベントの数を表示するには、次のクエリを使用します
union withsource = tt *
| summarize count() by Computer | sort by count_ nulls last
コンピューターごとに、取り込まれた課金対象イベントの数を表示するには、次のクエリを使用します
union withsource = tt *
| where _IsBillable == true
| summarize count() by Computer | sort by count_ nulls last
特定のコンピューターからの課金対象データ型の数を表示するには、次のクエリを使用します。
union withsource = tt *
| where Computer == "computer name"
| where _IsBillable == true
| summarize count() by tt | sort by count_ nulls last
次のステップ
- Azure Monitor ログ データの格納方法の詳細を確認する。
- ログ クエリの作成に関するレッスンを参照する。
- ログ クエリでのテーブルの結合に関するレッスンを参照する。