初めてのAzure Log Analytics(VM insightsで確認してみた)

Azureをやり始めるとLog Analyticsのワークスペースを指定する事や、実際にクエリを実行することも多いと思います。

そこで今回は初めてのLog Analyticsという事でVM insightsのデータをサンプルに色々実施してみました。

      • Azure Log Analyticsの概要を理解しLog Analyticsワークスペース作成
      • VM insights(前はAzure Monitor For VMsと言われてました)を通じて実際にデータ収集されている状況を確認
      • クエリでデータの絞り込み検索等をやって必要な情報を表示

※現在Log AnalyticsはAzure Monitorとして統合されてAuzre Monitorログとされているのですが、説明が分かりにくくなるので今回はLog Analyticsとしています。

スポンサーリンク

Azure Log Analyticsの概要

Azure Log Analyticsとは何?

公式サイトの説明を見るとこんな感じで記載されています。

Log Analytics エージェントの概要(MS社公式)

Azure Log Analytics エージェントによって、任意のクラウドの Windows および Linux 仮想マシン、オンプレミスのマシン、System Center Operations Manager で監視しているマシンからテレメトリを収集し、Azure Monitor の Log Analytics ワークスペースに収集したデータを送信できます。

この説明をとってもシンプル(少し乱暴ですが。)に一言でまとめてしまうと、Azure基盤やVMに関するログを収集して検索して表示出来る機能になります。これがオンプレの仮想マシンでもエージェント入れると使えますよ。と言う感じになります。ワークスペースが受信側でエージェントがデータ送信側になります。

      • Azure基盤やサーバ(Azure VMやオンプレ)からのデータ収集(ログ、リソース情報)が出来る
        • VMやオンプレサーバの場合エージェントを通じてリソース情報やログ収集される 
        • WindowsのイベントログやIISのログ、LinuxのSyslogなどの収集が出来る
        • WindowsやLinuxなどのメトリック(CPU使用率)を収集が出来る
        • PaaSを使ったアプリのログやリソース情報も収集出来る
        • 診断設定を使うとAzureのサービスのログを収集出来る
        • Application GatewayのアクセスログやNSGフローログなどのネットワーク関連のログも収集出来る(Application Gatewayのアクセスログはこちらでやってみてます。)
      • 収集したログはKusto クエリ言語 (KQL)を使って検索する事が出来る
      • クエリの実行結果をグラフ化してダッシュボードに表示する事が出来る

※Azure SentinelやNetwork Watcherのトラフィック分析などもLogAnalyticsが使われています。
※エージェントからワークスペースへのデータ転送はHTTPSが使われるので許可設定が必要になります。

Log Analyticsで発生する課金は?

Log Analyticsはデータ転送量と保管量に対して課金が発生します。データ保管はデフォルト31日ですがこれを延長した場合に課金が発生します。

エクスポートする場合にも課金が発生するのですが、これはLog Analyticsワークスペースの画面でCSVなどにエクスポートする場合に発生るものではありません。AzureStorageやEventHubなどの宛先へ継続的なストリーミングでログをエクスポートする場合に発生します。

Log Analyticsで発生する課金はこちらはこちらになります。

EastUS2の場合の課金例です

項目 料金(East US 2の場合) 備考
データ転送量 ¥309.12/GB  
データ保管 1 GB あたり ¥13.44/月 31日まで無料です。31日以降保管した
データ出力 ¥11.200/GB LogAnalyticsで収集したデータをエクスポートする場合

※実際に使ってみると一般的なVMでログ取り込みまで行っていたのですがVM1台(Cent OS)で30MB~50MB/日程度でした。(Azure Monitor For VNsのみだと20MB程度でした。)

Log Analyticsの課金確認や日次上限の設定

Log Analyticsの課金状況はAzure Portalで確認する事が出来ます。またLog Analyticsのデータ取り込み量を日次単位の上限値として制限する事が出来ます。

使用量と推定コスト

使用量と推定コストを見ると過去30日間のデータ取り込み量と料金が表示されます。

※今回は設定直後なので表示されていません。

使用量と推定コストの項目内でログ取り込み量の日次上限設定が可能です。

※こちら利用すると予期せぬ課金を防ぐ事が可能ですが、ログ取り込み自体が止まるのでその間のデータは欠落します。ですので利用にあたっては十分な考慮が必要です。

※想定より課金が多くなっている場合はこちらのサイト参考に原因調査を行います。
※1日100GB以上利用するような場合はリソース予約する事でコストを抑える事も可能です。

Log Analyticsのワークスペース作成

Logの取り込み先になるLog Analyticsのワークスペースを作成してみます。取得するリソースと同じ場所(リージョン)に配置する点は気を付けて下さい。

Log Analyticsのワークスペース作成

Log Analytics ワークスペースのメニューで作成を選択します。

基本の設定です。リソースグループ、名前、地域(作成するリージョン)を指定します。

地域は収集対象のリソースと同じ場所に作成します。別場所でも作成可能ですが推奨はされていません。

価格を指定します。通常は従量課金制を選択します。

実際に発生する価格はこちらになります。

※容量予約は、1つのワークスペースで1日100GBを超えるようなログを収集する場合に事前予約しておくことでコスト削減する事が出来ます。

 確認メッセージが表示されます。内容を確認して問題が無ければ作成をクリックします。

 完了すると作成Log Analyticsワークスペースがリストに表示されます。

VM insightsの設定をしてみる

VM insightsとは?

公式サイトの説明を見るとこのような感じで記載されています。

VM insights の概要(MS社公式サイト)

VM insights により、実行中のプロセスや他のリソースへの依存関係など、仮想マシンと仮想マシン スケール セットのパフォーマンスと正常性が監視されます。

これをシンプルに言うと、Azure PortalでCPU使用率、メモリ使用率、ディスク使用率などのリソース情報や外部との接続が見える。という感じになります。

      • VM insightsを使うと出来る事
        • CPU使用率、メモリ使用率、ディスク使用率などのリソース情報を見る事が出来る。
        • 外部と接続しているポートや接続先の情報を見る事が出来る。
        • 外部と接続しているプロセスやサービスの情報を見る事が出来る

この情報はAzure Monitorのアラートの為にも利用する事が出来ます。課金はLog Analyticsへのデータ取り込み量に対して課金が発生します。

分析情報(VM insights)を設定する

VM insightsの設定してみます。

※VM insightsのサポートOS状況はこちらを参照ください。

日本時間で表示するには

仮想マシンの分析情報がVM insightsに対応します。

分析情報で有効を選択します。

データ収集先になるLog Analyticsワークスペースの指定画面になります。先ほど作成したワークスペース(test-vm-workspace-01)を選択します。最後に有効をクリックすると設定が開始されます。

設定が完了した後に仮想マシンの拡張機能を見るとエージェントが追加されている事が分かります。

インストールされるエージェントの詳細はこちらを参照ください。

VM insights設定後にLog Analyticsワークスペースを参照してみる

VM insightsの設定完了後、仮想マシンで分析情報を選択するとパフォーマンスデータが収集されている事が分かります。

VM insights設定後の確認
仮想マシンの分析情報を選択すると、パフォーマンス情報やマップ情報等が表示される事が分かります。

実際に設定したLog Analyticsのワークスペースを見てみるとデータ収集されている事が分かります。

※次の項目で実際のログ収集内容は確認します。

ログについては仮想マシンのログのメニューからも表示する事が可能です。

※Log Analyticsのワークスペースで見た場合と若干表示が異なりますが同じデータが収集されています。

VM insightsで収集されているデータをLog Analyticsワークスペースで確認

Log Analyticsワークスペースで取得されているデータを確認してみます。

Log Analyticsワークスペースでの検索はKusto クエリ言語 (KQL)を使います。また、Log Analyticsのインタフェースの使い方はこちらを参照ください。

VM insightsで取得されるデータ項目

項目 説明 実際の検索結果
InsightsMetrics

Azure Monitor Insights のワークロードの監視

※CPU等のリソースで分析情報で表示されるパフォーマンスの部分を指しています。

VMBoundPort 監視対象コンピューター上の開いているサーバーポートのトラフィック。
VMComputer Dependency agent と Log analytics エージェントを使用して、Service Map および VM Insights ソリューションによって収集されたサーバーのインベントリデータ。
VMConnection 監視対象のコンピューターとの間の送受信接続のトラフィック。
VMProcess Dependency agent と Log analytics エージェントを使用して、Service Map および VM Insights ソリューションによって収集されたサーバーのデータを処理します。

Azure VMの分析情報(VM insights)では、これらの情報を元にGUI表示しています。

※Log Analyticsの項目で何が取得されているのかはこちらが参考になります。

Log Analyticsワークスペースでログ検索

今回はディスク使用率を確認しますが、ディスク使用率と言ったメトリック情報もログとして収集されます。

Log Analyticsワークスペースでクエリを実行してみる

ディスク使用率はInsightsMetricsに含まれるのでまずクエリを実行してみます。

クエリを実行してみる

クエリを実行してみます。InsightsMetricsと項目を入力するだけで検索できます。

//VMのワークロード
InsightsMetrics

実際に実行してみるとInsightsMetricsで収集されている情報がすべて表示されます。

これだけだと見にくいですし欲しい情報以外も含まれています。

※今回は1VMでやっていますが、複数のVMで同じワークスペースを指定した場合は、すべて結果として戻ります。(Computer所に複数VMが表示されます。)

クエリでwhereを使うと検索結果を絞る事が出来る。

実際に必要な情報に絞り込みを行ってみます。

今回はAzure VM(Cent OS7)のディスク使用率(/)を確認してみます。今回は事前に準備したaks-vm-02(Cent OS7)と言うAzure VMをサンプルとして利用しています。

Where句で絞り込みを行う

まず最初にディスクに関する情報に絞り込んでみます。

絞り込みを行うにはwhere句を利用します。

例:where 項目名 == ”絞り込む値”

検索結果を見ると、ディスク使用率の場合はNamespaceにLogicalDiskと表示されているのが分かるので指定しています。

実際の演算子についてはこちらを参照ください。

//ディスク情報
InsightsMetrics
| where Computer == “aks-vm-02"
| where Namespace == “LogicalDisk"

次に空き容量に関する情報に絞り込んでみます。where Name == “FreeSpacePercentage"を追加します。

しかしのこの状態ではまだ色々なマウント位置の情報が含まれている事が分かります。

//ディスク使用率
InsightsMetrics
| where Computer == “aks-vm-02"
| where Namespace == “LogicalDisk"
| where Name == “FreeSpacePercentage"


”/”のみに限定しています。結果を見るとTagsにその項目があるので実際に指定して絞り込んでみます。

結果を見ると期待通りの値が取得されている事が分かります。

//ディスク使用率(/)
InsightsMetrics
| where Computer == “aks-vm-02"
| where Namespace == “LogicalDisk"
| where Name == “FreeSpacePercentage"
| where Tags == '{“vm.azm.ms/mountId":"/"}’


このように絞り込む情報を組み合わせる事により必要な情報のみを抽出する事が出来るようになります。

project句を使って必要な項目のみ表示

実際の結果を見ると自分が必要としない情報が表示されています。そこで必要な項目のみを表示させてみます。

検索結果に表示する項目を指定する場合はproject句を使用します。

表示する項目を指定する

project 表示項目1、表示項目2・・・と指定する事で検索結果に表示する項目を指定出来ます。

//ディスク使用率
InsightsMetrics
| where Computer == “aks-vm-02"
| where Namespace == “LogicalDisk"
| where Name == “FreeSpacePercentage"
| where Tags == '{“vm.azm.ms/mountId":"/"}’
| project TimeGenerated,Computer,Namespace,Name,Val,Tags

必要な時間分のみ取得

デフォルトで検索すると24時間分取得されます。過去1時間みたいな取得したい場合もあるかと思います。

その場合には、where TimeGenerated > ago(時間) を利用します。

必要な時間分のみを取得

今回は3分前からと言う事でwhere TimeGenerated >ago(3m)を追加しています。

//ディスク使用率
InsightsMetrics
| where TimeGenerated > ago(3m)
| where Computer == “aks-vm-02"
| where Namespace == “LogicalDisk"
| where Name == “FreeSpacePercentage"
| where Tags == '{“vm.azm.ms/mountId":"/"}’
| project TimeGenerated,Computer,Namespace,Name,Val,Tags

検索結果を並び替え

検索結果を時間順に並べたいというのは良くある話かと思います。

その場合にはorder byを利用します。

検索結果を並び替える

order by 項目で項目順(デフォルトは降順)で並び替える事が出来ます。

order演算子についてはこちらを参照ください。またorder by TimeGenerated,Computerのように複数組み合わる事も可能です。

//ディスク使用率
InsightsMetrics
| where TimeGenerated > ago(3m)
| where Computer == “aks-vm-02"
| where Namespace == “LogicalDisk"
| where Name == “FreeSpacePercentage"
| where Tags == '{“vm.azm.ms/mountId":"/"}’
| project TimeGenerated,Computer,Namespace,Name,Val,Tags
| order by TimeGenerated

検索結果を日本時間で表示する

検索結果に時刻表示する事も多いと思いますがUTC表記だったりします。これを日本時間にして表示してみます。

日本時間で表示するには

extend演算子を利用してlocalTimestampを定義します。UTC+9時間が日本時間になるので、TimeGenerated + 9hと定義します。projectを使ってlocalTimestamp表示します。

検索結果を日本時間で表示する事が出来ました。

extend演算子についてはこちらを参照ください。

//ディスク使用率
InsightsMetrics
| extend localTimestamp = TimeGenerated + 9h
| where TimeGenerated > ago(3m)
| where Computer == “aks-vm-02"
| where Namespace == “LogicalDisk"
| where Name == “FreeSpacePercentage"
| where Tags == '{“vm.azm.ms/mountId":"/"}’
| project localTimestamp,Computer,Namespace,Name,Val,Tags
| order by localTimestamp

検索結果をダウンロード

検索結果をCSV形式でダウンロードする事が可能です。(Power BI等も可能)

検索結果をダウンロード
検索結果はCSVでダウンロードする事が出来ます。検索後にエクスポートを選択する事でCSVでファイルダウンロードできます。

Log Analyticsを使う時にやってしまった失敗

初めて使いだした頃に自分がやってしまった失敗です。

やってしまいがちな失敗

クエリの最後に空白行を入れてしまい検索結果がゼロ件になる。

このように10行目に何も入ってない行を入れたまま検索すると正しく検索結果が戻ら事があるので注意が必要です。

//サンプル
1 InsightsMetrics
2 | extend localTimestamp = TimeGenerated + 9h
3 | where TimeGenerated > ago(3m)
4 | where Computer == “aks-vm-02"
5 | where Namespace == “LogicalDisk"
6| where Name == “FreeSpacePercentage"
7| where Tags == '{“vm.azm.ms/mountId":"/"}’
8| project localTimestamp,Computer,Namespace,Name,Val,Tags
9| order by localTimestamp
10

検索結果で最初から表示されていない項目がある。(すべて表示される場合もあります。)

VMComputerで検索した例ですが、デフォルトですべての項目が表示される訳ではありません。

チェックが入ってない項目は表示されません。

表示されないと悩んでいる時は列を選択して項目を確認してみましょう。

 

そのほかにログの転送状況確認等はこちらで実施しています。