0Pricing
Azure Fundamentals · レッスン

Log Analytics と KQL の基礎

診断ログを Log Analytics ワークスペースに取り込み、Kusto Query Language のクエリを記述して、運用データのフィルター処理、集計、可視化を行います。

「Log Analytics と KQL の基礎」はCoddyKit上の無料Azure Fundamentalsレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAzure Fundamentals学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Azure Fundamentalsコースには全4レッスンが含まれています。

Log Analytics ワークスペースとは

Log Analytics ワークスペースは、Azure Monitor におけるログおよびテレメトリ データの中央データ ストアです。Azure リソースで診断設定を構成すると、構造化されたログとメトリックがワークスペースに送られます。その後、Kusto Query Language (KQL)を使用してデータをクエリできます。ワークスペースには独自の保持ポリシー(既定では30日間、最長730日間)とアクセス制御があります。

# Create a Log Analytics workspace
az monitor log-analytics workspace create \
  --resource-group myRG \
  --workspace-name myWorkspace \
  --location eastus \
  --retention-time 90

診断ログをワークスペースに送信する

すべての Azure リソースは、API 呼び出し、認証イベント、クエリの実行などの操作に関する詳細な記録である診断ログを出力できます。リソースの診断設定で、送信先として Log Analytics ワークスペースを指定して有効にします。一般的なログ カテゴリには、Key Vault の AuditEvent、App Service の AppServiceHTTPLogs、NSG の NetworkSecurityGroupFlowEvent があります。

# Enable diagnostic settings to send Key Vault logs to Log Analytics
az monitor diagnostic-settings create \
  --name 'KVLogs' \
  --resource /subscriptions/<sub>/resourceGroups/myRG/providers/Microsoft.KeyVault/vaults/myKV \
  --workspace myWorkspace \
  --logs '[{"category":"AuditEvent","enabled":true}]'

KQL 構文の概要

Kusto Query Language (KQL)は、ログ データを分析するための読み取り専用クエリ言語です。KQL クエリはパイプラインとして左から右に読み取ります。まずテーブル名から始め、パイプ (|) で演算子につなぎます。一般的な演算子には、フィルター処理に使用する where、列の選択に使用する project、集計に使用する summarize、並べ替えに使用する order by があります。KQL では列名の大文字と小文字が区別されますが、キーワードでは区別されません。

// Basic KQL query structure
AzureActivity
| where TimeGenerated > ago(24h)
| where OperationNameValue == 'MICROSOFT.COMPUTE/VIRTUALMACHINES/DELETE'
| project TimeGenerated, Caller, ResourceGroup, Resource
| order by TimeGenerated desc

Where 演算子によるフィルター処理

where 演算子は、ブール式を使用して行をフィルター処理します。and、or、not を使って条件を組み合わせることができます。has 演算子は文字列内で大文字と小文字を区別しない単語境界検索を実行します。一方、contains は部分文字列検索を実行します。in 演算子は、リスト内に値が含まれているかどうかを判定します。ago() を使用すると、ago(1h) や ago(7d) のように相対的な時間範囲を表現できます。

// Filter for failed HTTP requests in the last hour
AppRequests
| where TimeGenerated > ago(1h)
| where Success == false
| where ResultCode in (500, 502, 503)
| project TimeGenerated, Name, ResultCode, DurationMs
| order by DurationMs desc

Summarize によるデータの集計

summarize 演算子は、行全体に対して集計を実行します。一般的な集計関数には、count()、sum()、avg()、max()、min()、個別の値の数を数える dcount() があります。by 句を使用すると、1つ以上の列でグループ化できます。bin() 関数はタイムスタンプを一定の間隔に丸め、時系列の集計に使用できるようにします。

// Count failed requests per hour per endpoint
AppRequests
| where TimeGenerated > ago(24h)
| where Success == false
| summarize FailureCount = count() by bin(TimeGenerated, 1h), Name
| order by TimeGenerated desc, FailureCount desc

KQL でテーブルを結合する

KQL では、join を使用して複数のテーブルのデータを関連付けることができます。既定の結合の種類は innerunique ですが、inner、leftouter、rightouter、fullouter も指定できます。よく使われるパターンとして、AzureActivity と AzureMetrics を結合し、管理上の変更とパフォーマンス低下を関連付ける方法があります。lookup 演算子は、小規模な参照テーブルのデータで行を補完する、より軽量な代替手段です。

// Correlate VM restarts with CPU spike events
AzureActivity
| where OperationNameValue has 'restart'
| join kind=leftouter (
    AzureMetrics
    | where MetricName == 'Percentage CPU'
    | where Average > 90
) on ResourceId
| project TimeGenerated, Resource, Average

KQL の結果を可視化する

Log Analytics ポータルでクエリを記述した後、render 演算子を使用して、結果を時間グラフ、棒グラフ、円グラフ、またはテーブルとして表示できます。クエリ結果は Azure Dashboard にピン留めしたり、Workbook として保存したりすることもできます。render timechart コマンドを使用すると、時系列の summarize クエリがトレンド分析用の即時の折れ線グラフに変換されます。

// Render a time chart of request counts per 5-minute interval
AppRequests
| where TimeGenerated > ago(4h)
| summarize RequestCount = count() by bin(TimeGenerated, 5m)
| render timechart

ログ検索アラート

ログ検索アラートは、スケジュールに従って KQL クエリを実行し、結果が条件を満たしたときに発生します。条件には、結果の件数が0より大きいことや、数値列がしきい値を超えることなどを指定できます。複数のテーブルにまたがる任意のログ データをクエリできるため、メトリック アラートよりも柔軟性があります。評価頻度と時間枠は個別に構成できます。たとえば、過去15分間を対象に5分ごとに実行できます。

// Example log search alert condition: more than 5 exceptions in 15 min
AppExceptions
| where TimeGenerated > ago(15m)
| summarize ExceptionCount = count()
// Alert when ExceptionCount > 5

一般的なログ テーブルのリファレンス

Azure Monitor は、既知のテーブルにログを格納します。AzureActivity には、サブスクリプション レベルの操作が記録されます。SecurityEvent には、Log Analytics エージェントを搭載した VM の Windows セキュリティ ログが含まれます。Heartbeat には、エージェントの接続状態が示されます(接続されている VM 1台につき1分ごとに1行)。AppRequests、AppExceptions、AppDependencies は Application Insights によって生成されます。効果的な運用クエリを記述するには、これらのテーブル名を把握することが不可欠です。

ワークスペースの保持期間とコスト

Log Analytics の料金は、データ インジェスト(取り込んだデータ 1 GB あたり)とデータ保持(最初の30日間は無料で、それ以降は既定の保持期間を超えた分について1 GB・1か月あたりで課金)の2つで構成されます。取り込み前にノイズの多いログ カテゴリをフィルター処理する、データ量が多く価値が低いデータにBasic Logsを低料金で使用する、長期的なコンプライアンス保持が必要な古いデータをAzure Data Explorerまたはコールド ストレージにアーカイブする、といった方法でコストを削減できます。

ワークスペースのアクセス制御モデル

Log Analytics ワークスペースでは、2つのアクセス制御モデルがサポートされています。workspace-context モードでは、ワークスペースへの Read アクセス権を持つユーザーは、すべてのテーブルをクエリできます。resource-context モードでは、ユーザーが RBAC による読み取り権限を持つリソースから出力されたログのみをクエリできます。ワークスペースへの明示的なアクセス権は必要ありません。resource-context モードは、異なるチームが異なるリソースを所有する大規模な組織に推奨されます。

クイック チェック

このレッスンで扱った Microsoft Azure Fundamentals (AZ-900) の概念について、理解度を確認します。

レッスンのまとめ

このレッスンでは、Log Analytics ワークスペースが Azure リソースの診断ログ データを一元化すること、where、summarize、render などのKQL 演算子を使用してログのフィルター処理、集計、可視化を行えること、そしてログ検索アラートが KQL クエリの結果が定義した条件を満たしたときに自動応答をトリガーすることを学びました。次は、アプリケーション レベルのテレメトリを提供する Application Insights について学びます。

よくある質問

「Log Analytics と KQL の基礎」レッスンは無料ですか?

はい。「Log Analytics と KQL の基礎」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Azure Fundamentalsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Azure Fundamentalsコースには全4レッスンが含まれています。

「Log Analytics と KQL の基礎」で何を学びますか?

診断ログを Log Analytics ワークスペースに取り込み、Kusto Query Language のクエリを記述して、運用データのフィルター処理、集計、可視化を行います。 ブラウザで直接実行するハンズオンコードでAzure Fundamentalsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Azure Fundamentalsを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのAzure Fundamentalsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「Log Analytics と KQL の基礎」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このAzure Fundamentalsレッスンでコードを書いて実行できますか?

はい。すべてのAzure Fundamentalsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Azure Monitor のメトリックとアラート
  2. Log Analytics と KQL の基礎
  3. Application Insights
  4. Azure Dashboards と Workbooks
← Azure Fundamentalsに戻る