この記事は更新から24ヶ月以上経過しているため、最新の情報を別途確認することを推奨いたします。
Azure Log Analyticsをなんとなく設定し、仮想マシンのログを取りためているだけというシステムも多いのではないかと思い、簡単にですが欲しい情報をLog Analyticsから取り出すコツと注意点を記載します。
・過剰にログは取得しない。
Log Analyticsの価格については大きく分けて以下の2パターンあります。
-1GBごとの従量課金制
-1日当たりの使用容量の予約制(上記のプランから割引が適用されるが、1日当たりのログ容量を事前に計算しておくことが必要。)
どちらにも言えることですが、ログの保存サイズによって利用料金が変わってきます。何かあったときのためにとVMのログをかたっぱしから取得しがちですが、費用面だけでなく、後述の制限の観点からも過剰にログは取得するのは望ましくありません。VMであればまずは以下の項目にとどめておくほうがよいかと思います。
-CPUに関する取得する値
windowsOSであれば、「Processor(_Total)\% Processor Time」
Linux系であれば、「Processor(*)\% Processor Time」
-メモリに関する取得する値
windowsOSであれば、「Memory(*)\% Committed Bytes In Use」
Linux系であれば、「Memory(*)\% Used Memory」
-ディスクに関する取得する値
windowsOSであれば、「LogicalDisk(*)\% Free Space」
Linux系であれば、「Logical Disk(*)\% Used Space」
-Syslogの取得レベル
EMERGENCY、ALERT、CRITICAL、ERROR
上記を取得しておけば、CPU使用率、メモリ使用率、ディスク使用率等も計算して出力できます。
・制限事項を考慮してログを確認する。
下準備が出来たところで取得したログを抜き出す方法を記載します。基本はAzureポータル上でクエリを実行してログを出力させるのですが、制限事項を考慮しなければ、欲しいログが抜き出せないという問題が発生します。
例として以下の画面はざっくり診断ログを出力するというクエリを実行した結果です。赤枠の部分に注目して頂きたいのですが、「10,000+個のレコード」と表示されているかと思います。これはAzureポータル上にログを出力できる制限が10,000行という制限があるため、該当するログは10,000行以上あっても、10,000行以上出力できなかったという結果になります。これでは欲しかったログが出力されていない可能性があるので望ましくありません。
そのため、実行するクエリに条件を加え10,000行以下に抑えると言ったことが必要になります。以下にいくつか条件を加える際によく使用されるクエリを例として挙げます。これらを使って「10,000+個のレコード」と表示されないように調整ください。
例1)VMのホスト名を条件に加える
where Computer == “”(対象コンピューター名)””
例2)時刻を条件に加える
extend localTimestamp = TimeGenerated + 9h(UTC+9hの日本時間を指定するために実行しています。)
where localTimestamp between(datetime(“YYYY-MM-DD HH:MM:SS”) .. datetime(“YYYY-MM-DD HH:MM:SS”))
・それでも絞り切れない場合は・・・・・・
それでも10,000行以下に絞り切れない場合は、powershellを使用してログを取得する方法があります。こちらについては、Azureポータル上で出力する場合よりも、若干制限が緩和されています。とはいえ以下の制限があることを考慮頂くと良いかと思います。
1)検索クエリが返すことができる行数は 500,000 行まで。
2)検索クエリで返すことができる容量は 64,000,000 bytes (合計で61 MiB ) まで。
3)検索クエリは 10 分以上のクエリを実行することはできない。
なお、powershellでログを出力する場合配下の手順で行います。
1. 下記のコマンドでサインイン
『 Connect-AzAccount 』
2. 下記のコマンドでログをローカルにCSVファイルとして出力
$queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId “Log AnalyticsワークスペースのID” -Query “実行クエリ”
$queryResults.Results | Export-CSV -Path “C:\temp\result_query.csv” -NoTypeInformation
上記の例を参考にして、欲しいログを抜き出してログは貯めてあるけど使えていない状況が改善出来れば幸いです。