1. はじめに
Log Analytics ワークスペースの新しいプランに Auxiliary テーブルプランが発表されました。本記事では Auxiliary プランを活用検討として、Linux Syslog ログファイルを Azure Monitor DCR 経由で取り込む方法をご紹介します。
2. [参考] Auxiliary テーブルプランとは
これまで提供されてきた Analytics (分析)ログ、Basic (基本)ログに加えて、新たに Auxiliary (補助)プランが提供されました。基本的な機能は Basic ログと変わりませんが、より低価格に取り込める半面、パフォーマンスは低速扱いとなっています。
ドキュメントにも記載されている通り、以下のような違いが有ります。
以下はドキュメント記載のテーブルプランから抜粋したものです。
機能 | 分析ログ | 基本ログ | 補助ログ (2024.8 Preview) |
---|---|---|---|
主な用途 | - 継続的な監視 - リアルタイムの検出 - パフォーマンス分析など |
- トラブルシューティング - インシデント応答に必要なデータ |
監査とコンプライアンスデータなど |
サポートされているテーブルの種類 | 全て | - 一部のテーブル - DCRベースのカスタムテーブル |
DCRベースのカスタムテーブル |
ログクエリ | 全て | 単一テーブル内のKQL(JOINを除く) | 単一テーブル内のKQL(JOINを除く) |
クエリパフォーマンス | 速い | 速い | 遅い |
Sentinel 分析ルール | ○ | X | X |
検索ジョブ | ○ | ○ | ○ |
復元 | ○ | ○ | X |
DCR ベースのカスタムテーブル (-CL が付くテーブル)であれば、機能としては基本ログと変わらず、違いはクエリーのパフォーマンス性能といったところになります。
料金比較は公式サイトをご確認下さい。
3. Auxiliary プランの前提条件
Auxiliary プランの前提条件として以下記載があります。
2024.8 現在、Auxiliary プランの作成、および DCR ルールの作成は Azure Portal に対応していないため、RESTAPI / Powershell を用いた作成のみになります。
- データ取集エンドポイント(DCE)経由であること
- Log Analytics ワークスペース内のすべてのテーブルに、
TimeGenerated
という名前の列があること -
TimeGenerated
列は ISO8601 形式であること - DCR 時に変換 (Transform) は不可
- 2024.8 現在、リージョン限定 (※ 東日本/西日本は未サポート)
4. 取り込み方法の検討
2024.8 現在、Auxiliary プランの取り込み方法としては以下の 2 つが提供されています。
-
Azure Monitor エージェントを使用してテキストファイルからログを収集
- AMA エージェントを導入した Windows / Linux サーバーのテキストファイルを読み取って収集する方式
- 2024.8 現在、正規化はサポートされておらずTimegenerated
とRawData
フィールドのみで取り込まれる -
Logs ingestion API を使用して Azure Monitor にデータを送信
- Log Ingestion API 経由でデータを取り込む方式。スクリプト化が必要
- データを JSON アレイ化して、正規化されたフィールドで送付することが可能
5. 試してみる
補助ログの活用検討として、以下を検討してみました。
5.1 Linux syslog (/var/log/messages) の記録・監査
Linux サーバーの auditd などの監査記録である LOG_AUTH
, LOG_AUTHPRIV
や、アプライアンスなどの CEF (Common Security Event Format) ログを Microsoft Sentinel / Log Analytics ワークスペースに分析対象 (Analytics) として取り込むことは多いと思いますが、汎用的なログになる /var/log/messages
を監査用途として補助ログに取り込んでみたいと思います。
5.1.1 Auxiliary テーブルの作成
ドキュメントの通りに、はじめに補助ログのテーブルを作成します。
ここでは Syslog_Text_Aux_CL
といった Aux テーブルを作成しています。
# parameter
$tenantId = "<Your Tenant Id>"
$subscriptionId = "<Your Subsription Id>"
$resourcegroup = "<Your Resource Group>"
$workspace = "<Log Analytics Workspace Name>"
$tableName = "Syslog_Text_Aux_CL"
$tableParams = @'
{
"properties": {
"schema": {
"name": "MyTable_CL",
"columns": [
{"name": "TimeGenerated", "type": "datetime"},
{"name": "RawData", "type": "string"}
]
},
"totalRetentionInDays": 365,
"plan": "Auxiliary"
}
}
'@
# replace $tableName in $tableParams
$tableParams = $tableParams -replace "MyTable_CL", $tableName
# Login
Connect-AzAccount -Tenant $tenantId -Subscription $subscriptionId
# REST API Path
$restApiPath = "/subscriptions/$subscriptionId/resourcegroups/$resourcegroup/providers/microsoft.operationalinsights/workspaces/$workspace/tables/$tableName" + "?api-version=2023-01-01-preview"
# Create custom table
Invoke-AzRestMethod -Path $restApiPath -Method PUT -payload $tableParams
スクリプトを実行すると、ターゲットの Log Analytics ワークスペースにカスタムテーブルとしてテーブルが作成されます。
5.1.2 DCE データ収集エンドポイントの作成
Aux テーブルへの取り込みには、DCE 経由の接続が必須となるため、事前に DCE を作成します。
5.1.3 DCR データ収集ルールの作成
Azure Monitor Agent に当てる DCR を作成します。
2024.8 現在、Azure Portal からは作成出来ないため、仕様に注意して DCR の JSON ファイルを作成します。
- Location はAuxテーブルを作成した Log Analytics ワークスペースのリージョンを指定
- AMA DCR 経由のため、フィールドは
TimeGenerated
とRawData
指定 - Stream / OutputStream は
Custom-カスタムテーブル名
で指定
{
"location": "australiaeast",
"properties": {
"dataCollectionEndpointId": "/subscriptions/<Your Subscription Id>/resourceGroups/<Your Resource Group>/providers/Microsoft.Insights/dataCollectionEndpoints/<DCE 名>",
"streamDeclarations": {
"Custom-Syslog_Text_Aux_CL": {
"columns": [
{
"name": "TimeGenerated",
"type": "datetime"
},
{
"name": "RawData",
"type": "string"
}
]
}
},
"dataSources": {
"logFiles": [
{
"streams": [
"Custom-Syslog_Text_Aux_CL"
],
"filePatterns": [
"/var/log/messages"
],
"format": "text",
"settings": {
"text": {
"recordStartTimestampFormat": "ISO 8601"
}
},
"name": "Custom-Syslog_Text_Aux_CL"
}
]
},
"destinations": {
"logAnalytics": [
{
"workspaceResourceId": "/subscriptions/<Your Subscription Id>/resourcegroups/<Your Resource Group>/providers/microsoft.operationalinsights/workspaces/<Log Analytics Name>",
"workspaceId": "<LAW Workspace Id>",
"name": "<LAW Name>"
}
]
},
"dataFlows": [
{
"streams": [
"Custom-Syslog_Text_Aux_CL"
],
"destinations": [
"<LAW Name>"
],
"outputStream": "Custom-Syslog_Text_Aux_CL"
}
]
}
}
作成した DCR の JSON ファイルを Powershell で実行します。
New-AzDataCollectionRule -ResourceGroupName "<Your Resource Group>" -Name "<DCR 名>" -JsonFilePath "C:\temp\AuxLinuxMessagesDCR.json"
成功すると以下のように DataFlow
, DataSourceLogFile
などの結果が見えます。
Azure CLI のコマンド az monitor data-collection rule create
による DCR ルール作成も試したのですが、2024.8.6 現在不具合があるようで DataSourceLogFile
部分が欠落してしまいます。Powershell だと問題無かったのでご注意下さい。
5.1.4 作成した DCR にリソースを割り当てる
Azure Portal に補助ログ取り込み用に作成した DCR が表示されますので、対象のリソースを割り当てます。今回は Azure Monitor Agent (Linux) のリソースを割り当てています。
5.1.5 データを確認する
暫くすると、対象のワークスペースにログが取り込まれてきます。
5.1.6 留意事項
2024.8 現在、Preview の制限事項に制限事項の記載が無いのですが、Azure Monior テキストログの収集は 5 分間隔に更新データを取得してアップロードします。Aux テーブル先のスロットルなどの仕様で処理出来ない可能性があります。大容量のデータについては事前評価を実施することをお勧めします。
まとめ
Auxiliary ログがリリースされたことで、監査ログなどの取り込み方針や、Microsoft Sentinel / Log Analytics ワークスペースの最適化が進むのではと思います。本記事がどなたかの参考になれば幸いです。
*本稿は、個人の見解に基づいた内容であり、所属する会社の公式見解ではありません。また、いかなる保証を与えるものでもありません。正式な情報は、各製品の販売元にご確認ください。
参考資料
本ブログの参考に k.sato さんのブログを参考にさせていただきました。ありがとうございました。