初めてのAzure Log AnalyticsとKQL クエリ
Azure上のリソースのLogを収集、分析するサービスとしてLog Analyticsと言うサービスがあります。
初めてのLog Analyticsという事でVM insightsのデータをサンプルに色々実施してみました。
-
-
- Azure Log Analyticsの概要
- Log Analyticsワークスペース作成や設定
- VM insightsのデータを例にKQL(Kusto Query Language)クエリを使ってデータの絞り込み、日本時間表示、並び替えなど
-
Azure Log Analyticsの概要
Azure Log Analyticsとは何?
1言で言うとAzure上のリソースのLogを収集、分析する機能になります。
Log AnalyticsはAzure Monitorの一機能となっています。
Azure Monitor上のリソースをLog Analyticsワークスペースと言います。
-
- Log Analytics:ログ収集、分析するAzure Monitor上の機能
- Log Analyticsワークスペース:Log Analyticsデータ収集する為のAzureリソース
Azure Portal上でKQL(Kusto Query Language)を使い収集されたログの表示、分析を行えます。
クエリの実行結果をグラフ化してダッシュボードに表示する事も出来ます。
診断設定やAzure Monitorエージェントを使ってログ収集される
Log Analyticsのデータ収集の1つにエージェントによる収集があります。
Log Analyticsに関するエージェントは2022年9月現在では2種類あります。
またエージェントからの収集だけではなく、各Azure リソースの診断設定を通じてログを収集出来ます。
※2024年8月31日でLog Analyticsエージェントが廃止され、Azure Monitorエージェントに移行します。2022年9月現在ではAzure Monitorエージェントが推奨となっております。
※エージェントからLog Analyticsワークスペースへのデータ転送はHTTPSが使われます。ネットワークアクセス許可設定が必要になります。
収集対象
Azureリソースのメトリックス、Azureリソースの操作ログ等、OSのログなど多種多様なログを収集する事が出来ます。
Azure ADのログやアクテビティログなども収集する事が出来ます。
-
-
- Azure基盤やサーバ(Azure VMやオンプレ)からのデータ収集(ログ、リソース情報)が出来る
- VMやオンプレサーバの場合エージェントを通じてリソース情報やログが収集される
- WindowsのイベントログやIISのログ、LinuxのSyslogなどの収集が出来る
- WindowsやLinuxなどのメトリック(CPU使用率)を収集が出来る
- 診断設定を使ってAzureサービスのログを収集出来る
- PaaSを使ったアプリのログやリソース情報も収集出来る
- Application GatewayのアクセスログやNSGフローログなどのネットワーク関連のログも収集出来る(Application Gatewayのアクセスログはこちらでやってます。)
- Azure基盤やサーバ(Azure VMやオンプレ)からのデータ収集(ログ、リソース情報)が出来る
-
※Azure SentinelやNetwork Watcherのトラフィック分析などもLogAnalyticsが使われています。
※エージェントからワークスペースへのデータ転送はHTTPSが使われます。NSGの許可設定が必要になります。
Log Analyticsで発生する課金は?
Log Analyticsはデータ転送量に対して課金が発生します。
データ保管は31日(デフォルト保管期間)まで無償です。
但し、データ保管期間を延長した場合は、データ保管のデータ容量に応じて課金が発生します。
Log Analyticsで発生する課金はこちらになります。
EastUS2(2022年9月現在)の場合です
項目 | 料金(East US 2の場合) | 備考 |
データ転送量 | ¥377.279/GB | 課金アカウントごとに 1か月あたり5 GB まで無料 |
データ保管 | 1 GB あたり ¥16.404/月 | 31日まで無料です。31日以降保管した |
データ出力 | ¥13.670/GB | LogAnalyticsで収集したデータをエクスポートする場合 |
※アーカイブを利用する事でログ データの保管コストを抑える事が出来ます。
※データ出力に対して課金が発生します。但しLog AnalyticsでKQLクエリの実行結果をCSVなどにエクスポートする場合には発生しません。AzureStorageやEventHubなどの宛先へ継続的なストリーミングでエクスポートする場合に発生します。
Log Analyticsワークスペース作成
Log Analyticsのワークスペースを作成します。
設定内容はリソースグループ、リソース名、作成する地域(リージョン)だけです。
取得対象のAzureリソースと同じ場所(リージョン)に配置します。
データ取り込み量や課金を確認
Azure PortalでLog Analyticsワークスペースのデータ取り込み量や課金状況を確認出来ます。
使用量と推定コスト | |
使用量と推定コストを見ると過去30日間のデータ取り込み量と料金が表示されます。 ※今回は設定直後なので1日分のみが表示されています。 |
※想定より課金が多くなっている場合はこちらのサイト参考に原因調査を行います。
※1日100GB以上利用するような場合はリソース予約する事でコストを抑える事も可能です。
日次上限の設定
Log Analyticワークスペースへのデータ取り込み量上限を設定出来ます。
上限設定は日次の取り込み量になります。
上限に達するとログ取り込み自体が止まります。
取り込み停止後のデータは欠落するので利用にあたっては十分な考慮が必要です。
日次上限 | |
使用量と推定コスト内に日次上限の設定項目があります。 |
|
日次上限はオン、オフとボリューム上限の設定になります。 ※メッセージにもありますが、Azure Sentinel等のセキュリティ関連のデータは、この上限に達しても取り込みされます。 |
データ保有期間
Log Analyticワークスペースでのデータ保有期間を延長出来ます。
デフォルト設定は30日(保有期間31日)になります。
最大730日(保有期間731日)まで延長が可能です。
保有期間を延長した場合は別途課金が発生します。価格表はこちらを参照願います。
データ保有期間 | |
使用量と推定コスト内にデータ保有期間の設定項目があります。 |
|
デフォルトでは30日に設定されています。
|
Log Analyticsワークスペースでログ検索
Azure VMのVM insights(分析情報)で取得された値を例にログ検索を行ってみます。
利用するLog Analyticsワークスペースにはtest-vm-01~03のAzure VMのVM insights(分析情報)を収集しています。
VM Insightsについて
VM Insightsで取得されるデータについてはこちらに纏めています。
Log AnalyticsワークスペースでKQLクエリを実行
ログの検索にはKQL(Kusto Query Language)を使います。
Log Analyticsワークスペースのリソースメニューからログを選択すると検索が可能です。
ログ検索結果の表示は最大30000行になります。
出力結果がある項目(カラム)だけが表示されます。
検索結果を絞るのはwhere演算子
必要な情報に絞り込みを行ってみます。
-
- 絞り込み条件
- Azure VMはtest-vm-01を対象とする
- メトリックはディスク空き容量率(FreeSpacePercentage)を対象とする
- ディスク領域はLinuxの”/”領域がマウントされているsda2を対象とする
- 絞り込み条件
絞り込みにはWhere演算子を使います。
Where句で絞り込みを行う | ||
Azure VMを絞り込みます。 例:where 項目名 == ”絞り込む値” 項目名にはAzure VM名が含まれるComputerを使います。 クエリ実行結果を見るとtest-vm-01のみに絞りこめている事が確認出来ます。 |
|
|
Where演算子はand条件も利用可能です。 検索結果を見るとand条件で絞り込み出来ている事が確認出来ます。 ※Namespaceがメトリックというのは検索結果からも推測可能です。
|
|
|
ディスク空き容量に関する情報に絞り込んでみます。where Name == “FreeSpacePercentage"をand条件としてクエリに追加します。 |
|
|
sda2に絞り込んでみます。 一致条件についてはこちらを参照願います。 |
|
必要な列(項目)のみ出力する場合はproject演算子
検索結果すべてが必要な列(項目)とは限りません。
出力列(項目)を選択するはproject演算子を使います。
project演算子で出力項目を選択 | ||
選択した列(項目)のみ出力する場合は”project 列名(項目名)”となります。 出力結果を見ると表示列(項目)が絞られている事が分かります。 |
|
並び替え(ソート)にはorder 演算子を使う
検索結果時系列に並べたいなどの場合にはorder演算子を使います。
ソート順の設定はこのようになります。デフォルトはdesc(降順)になります。
-
- asc : 昇順 (小さい値から大きい値へ)(過去から現在時間へ)
- desc:降順 (大きい値から小さい値へ)(現在時間から過去へ)
※Sort 演算子を利用しても同様の事が出来ます。
order演算子で並び替え | ||
”order by 並び替え項目”で出力結果を並び替え(ソート)します。 ※descがデフォルトなので、つけなくても同じ結果になります。 |
|
検索対象時間の範囲を指定
デフォルトの検索条件は過去24時間になっています。
検索時間の範囲を制限する事も可能です。
Where演算子を使って制限する事が可能です。
-
- 検索時間制限の例
- where TimeGenerated > ago(時間)
- where TimeGenerated between (datetime(YYYY-MM-HHT hh:mm:ss.0000000Z) .. datetime(YYYY-MM-HHT hh:mm:ss.0000000Z))
- 検索時間制限の例
検索時間範囲を制限 | ||
”where TimeGenerated >(<等) ago(時間) ”で検索範囲を指定する事が出来ます。 検索時間範囲を指定すると、Azure Portal上では”クエリに設定します”と表示されます。 |
|
表示件数を制限
検索結果の表示件数は指定する事が出来ます。
検索結果表示件数を制限 | ||
”limit 件数”で制限が可能です。 |
|
TimeGeneratedを日本時間で表示する
検索結果で表示される時刻(TimeGenerated)はデフォルトではUTC表記です。
日本時間で表示したい場合にはextend 演算子を使うと出来ます。
Azure Portalで現地時刻を選択する事でも日本時間表記が可能です。
日本時間で表示 | ||
extend演算子を利用してLocalTimeGenratedを定義します。 日本時間を検索結果に表示する事が出来ました。 |
|
|
Azure Portalで現地時刻を選択します。 |
検索結果をグラフ表示
検索結果はグラフで表示出来ます。
グラフ表示する場合はrender 演算子を使います。
検索結果をダウンロード | ||
”render グラフ形式”の指定になります。 グラフ形式についてはこちらを参照願います。 ※サンプルでは時間範囲の指定をbetweenで指定しています。 |
|
エクスポート(CSVでダウンロード)
Azure Portalから検索結果をCSV形式でダウンロード出来ます。
検索結果をダウンロード | |
エクスポートを選択します。 CSVやPower BIへのエクスポートが表示されます。 CSVへのエクスポートはすべての列か表示している検索結果の列のみか選択が出来ます。 |
リソースIDからリソース名を抽出する
リソースIDからリソース名を抽出するKQLについてはこちらに纏めています。
定期的にクエリ実行してストレージアカウント(BLOBコンテナー)に保管する場合はLogic Apps(ロジックアプリ)を使うと出来ます。
IPでの絞り込み方法についてはこちらに纏めています。
最後に
初めてのLog Analyticsという事でLog Analyticsワークスペース作成や設定をやってみました。
KQL(Kusto Query Language)を使うとログの中から目的に沿ったデータ出力が出来る事が分かりました。
-
- 今回の主な実施内容
- 対象の絞り込み
- 必要な列(項目)のみを表示
- 並び変え
- 検索範囲の時間指定
- グラフ表示
- CSV出力
- 今回の主な実施内容
今後も引き続き色々試してみたいと思います。
ログの転送状況の監視についてはこちら。