Azure Monitor Log Analytics KQLによる高度なログ分析

Tech

本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。

Azure Monitor Log Analytics KQLによる高度なログ分析

Azure Monitor Log Analyticsは、Azure環境全体のログとメトリックを一元的に収集、分析、可視化するための強力なサービスです。その核となるのがKusto Query Language (KQL) であり、複雑なデータパターン検出、異常検知、セキュリティイベント分析などを実現します。本記事では、クラウドアーキテクトの視点から、KQLを用いた高度なログ分析のアーキテクチャ、設定、運用、セキュリティ、コスト最適化、そして一般的な落とし穴について解説します。

アーキテクチャ

Azure Monitor Log Analyticsの中核はLog Analyticsワークスペース (LAW) です。各種Azureリソースからの診断ログ、仮想マシンやコンテナからのエージェントベースのログ、カスタムアプリケーションログなどがLAWに集約されます。集約されたデータはKQLを用いてクエリされ、Azure Workbooks、ダッシュボード、アラートなどに活用されます。

flowchart TD
    subgraph Data Sources
        A["Azure VM/Kubernetes"] --> |Azure Monitor Agent| LAW("Log Analytics Workspace")
        B["Azure PaaS Services"]|App Service, SQL DB, etc.| --> |Diagnostic Settings| LAW
        C["Custom Applications"] --> |Data Collector API| LAW
    end

    subgraph Analysis & Action
        LAW --> |KQL Queries| D["Azure Workbooks/Dashboards"]
        LAW --> |KQL Queries| E["Alert Rules"]
        LAW --> |KQL Queries| F["Automations/Logic Apps"]
        E --> G["Notification/Action Groups"]
    end

    A --- B
    B --- C
    D --- E
    E --- F

図1: Log Analyticsを用いたログ分析アーキテクチャ

主要コンポーネント:

  • Log Analytics Workspace (LAW): ログデータが保存される論理的なリポジトリ。

  • Azure Monitor Agent: 仮想マシンやKubernetesクラスターからログを収集。

  • 診断設定: PaaSサービスからLAWへログを送信するための設定。

  • Kusto Query Language (KQL): ログデータをクエリ、分析するための強力な言語。

  • Azure Workbooks: 視覚化とインタラクティブなレポート作成。

  • アラートルール: 特定のKQLクエリ結果に基づいて通知や自動アクションをトリガー。

設定手順

Log Analyticsワークスペースの作成と診断設定の構成は、IaC (Infrastructure as Code) を用いることで自動化が可能です。以下に、Azure PowerShellでの手順を示します。

# 1. リソースグループの作成(もし存在しない場合)

$resourceGroupName = "rg-advanced-log-analysis"
$location = "japaneast"
New-AzResourceGroup -Name $resourceGroupName -Location $location

# 2. Log Analyticsワークスペースの作成


# SKUは例としてPerGB2018(従量課金)を使用。必要に応じてCommitment Tiersも選択可能。

$workspaceName = "law-advanced-analysis"
$workspace = New-AzOperationalInsightsWorkspace -ResourceGroupName $resourceGroupName `
    -Name $workspaceName -Location $location -Sku PerGB2018 -RetentionInDays 30
Write-Host "Log Analytics Workspace '$($workspaceName)' created."

# 3. Azureストレージアカウントの診断設定をLog Analyticsに送信する例


# 実際のシナリオでは、監視対象のリソースIDとカテゴリを調整します。

$storageAccountName = "stadvancedloganalysis" # 既存のストレージアカウント名
$storageAccount = Get-AzStorageAccount -ResourceGroupName $resourceGroupName -Name $storageAccountName

# 診断設定の名前

$diagSettingsName = "send-to-loganalytics"

# 診断ログカテゴリ (例: BlobLogs, QueueLogs, TableLogs, FileLogs)

$logCategories = @(
    @{
        Category = "BlobLogs";
        Enabled = $true;
        RetentionPolicy = @{
            Enabled = $true;
            Days = 0 # ワークスペースの保持期間を使用
        }
    }
)

# 診断メトリックカテゴリ (例: Transaction)

$metricCategories = @(
    @{
        Category = "Transaction";
        Enabled = $true;
        RetentionPolicy = @{
            Enabled = $true;
            Days = 0
        }
    }
)

# 診断設定の作成または更新

Set-AzDiagnosticSetting -Name $diagSettingsName `
    -ResourceId $storageAccount.Id `
    -WorkspaceId $workspace.ResourceId `
    -Categories $logCategories `
    -Metrics $metricCategories `
    -Enabled $true
Write-Host "Diagnostic settings for Storage Account '$($storageAccountName)' configured."

# コメント: このスクリプトはLog Analyticsワークスペースと、既存のストレージアカウントへの診断設定を行います。


# 計算量: リソース数に比例。通常、数秒から数十秒で完了。


# メモリ条件: PowerShell実行環境の標準メモリで十分。

コード1: Log Analyticsワークスペースと診断設定のPowerShellデプロイ

この設定により、ストレージアカウントからのログがLog Analyticsワークスペースに自動的に流れ込み、KQLで分析可能になります。

運用監視

高度なログ分析の運用では、KQLを活用した可視化、アラート、そして継続的な改善が重要です。

  • Azure Workbooks: カスタムKQLクエリとグラフを組み合わせ、インタラクティブなダッシュボードを構築します。これにより、システムの健全性、パフォーマンス、セキュリティトレンドをリアルタイムで監視できます。2024年7月15日時点の公式ドキュメントで、Workbooksはログとメトリックの両方をサポートし、柔軟な視覚化が可能です。

  • アラートルール: make_seriesseries_decompose_anomalies などのKQL時系列関数を組み合わせ、異常検知アラートを構成します。例えば、特定のエラー率が通常の範囲を逸脱した場合に通知する、といった設定が可能です。

  • データ保持期間とDR: ログデータの保持期間は、コンプライアンス要件とコストを考慮して設定します。Log Analyticsワークスペース自体はAzureのリージョン冗長性とバックアップメカニズムの恩恵を受けますが、DR戦略としては、異なるリージョンにミラーリングワークスペースを設定し、必要に応じてデータ収集先を切り替える構成が考えられます。

セキュリティ

Log Analyticsワークスペースのセキュリティは、データの機密性と整合性を保護するために不可欠です。

  • Azure Entra IDとの統合: すべてのアクセスはAzure Entra IDによって管理されます。

  • ロールベースのアクセス制御 (RBAC):

    • Log Analytics Contributor: ワークスペースへのデータ取り込みとクエリ実行を許可。

    • Log Analytics Reader: ワークスペース内のデータに対する読み取りアクセスのみを許可。

    • 監視共同作成者: Azure Monitorリソース(Log Analyticsワークスペースを含む)の作成・管理を許可。 最小権限の原則に基づき、必要なアクセス権のみを付与します。

  • マネージドID: 仮想マシンやAzure FunctionsなどのサービスがLog Analyticsワークスペースにデータを送信する場合、マネージドIDを利用して認証情報を管理なしで安全に認証させることができます。

  • プライベートリンク: ログデータの取り込みやクエリ実行時に、パブリックインターネットを経由せずにAzureプライベートネットワーク経由で安全な接続を確立します。

  • Azure Defender for Cloud: Log Analyticsワークスペースで収集されたログは、Defender for Cloudによってセキュリティ脅威の検出と分析に利用されます。例えば、Azure ADサインインログから異常なアクセスパターンを検知するなどです。

コスト

Log Analyticsのコストは主にデータ取り込み量とデータ保持期間によって決定されます。

  • データ取り込み量: テラバイト単位で課金されます。不要なログの収集を避けるために、診断設定で必要なカテゴリのみを選択し、カスタムログのフィルタリングを最適化します。

  • データ保持期間: 保持期間が長いほどコストが増加します。一般的には30〜90日間をアクティブ分析用とし、それ以上の長期保存が必要な場合はAzure Storageへのエクスポート (Data Export機能) を検討し、より安価なストレージにアーカイブします。

  • コミットメントティア: 大量のデータを取り込む場合、従量課金 (Pay-as-you-go) よりもコミットメントティア (例: 100GB/日) を利用することでコストを大幅に削減できます。これは2024年7月10日に更新されたAzureの価格情報でも推奨されています。

  • Data Archive: 2023年10月1日以降、Log Analyticsワークスペースの長期保持のためにData Archive機能が導入されました。これにより、低コストで最大7年間のデータ保持が可能になり、必要な時にデータ検索を実行できます。

落とし穴

  • KQLクエリのパフォーマンス: 複雑すぎるクエリや時間範囲が広すぎるクエリは、パフォーマンスが低下する可能性があります。summarize オペレーターの多用や join オペレーターでの大きなテーブル結合には注意が必要です。クエリの最適化には、extend で計算フィールドを作成したり、let ステートメントで中間結果を定義したりすることが有効です。

  • データ取り込み遅延: ログの種類や量によっては取り込みに遅延が発生することがあります。リアルタイム性の高い監視には、メトリックベースのアラートやストリーミング処理の検討も必要です。

  • スキーマの変更: カスタムログやアプリケーションログでスキーマが頻繁に変更されると、KQLクエリが破損する可能性があります。スキーマの安定性を確保するか、柔軟なクエリ (bag_unpack) で対応します。

  • 過剰なログ収集: 不要なログまで収集すると、コストとクエリパフォーマンスの両方に悪影響を及ぼします。必要なログのみを収集するように診断設定をきめ細かく調整します。

まとめ

Azure Monitor Log AnalyticsとKQLは、クラウド環境の可観測性を高めるための強力なツールです。KQLの高度な機能を活用することで、ログデータから深い洞察を得て、システムの安定性、パフォーマンス、セキュリティを向上させることが可能です。適切なアーキテクチャ設計、セキュリティ対策、コスト最適化、そしてKQLクエリの最適化を実践することで、その真価を最大限に引き出すことができます。これらのプラクティスは、2024年7月時点での最新のMicrosoft推奨事項に基づいています。

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

タイトルとURLをコピーしました