演習 - ログの送信を停止した最近アクティブになっていた仮想マシンを一覧表示する
ここでは、Heartbeat
テーブルからデータを取得して変換する KQL クエリを記述し、環境内のマシンの状態に関する分析情報を取得します。
1. 目標を設定する
ログ分析の最初の目標は、ネットワーク内のすべてのアクティブな仮想マシンに関するデータを確実に取得することです。 すべてのアクティブな仮想マシンを完全に可視化できるように、データの送信を停止したマシンを特定する必要があります。
データの送信を停止したマシンを特定するには、次に関する情報が必要です。
- 最近データをログに記録しているが、過去数分間は想定どおりにデータをログに記録していないすべてのマシン。
- より詳細な分析を行うために、各マシン上で実行されている仮想マシン エージェントを把握すると便利です。
2. ログを評価する
Azure Monitor では、Azure Monitor エージェントを使って、仮想マシン内で実行されているアクティビティとオペレーティング システム プロセスに関するデータを収集します。
Note
環境内の古いマシンの中には、Azure Monitor で非推奨となっている、Windows と Linux のレガシ Log Analytics エージェントを引き続き使用しているものもあります。
Azure Monitor エージェントと Log Analytics エージェントは、1 分間に 1 回、仮想マシンの正常性データを Heartbeat
テーブルに送信します。
Heartbeat
テーブルに対してシンプルな take 10
クエリを実行して、その各列に保持されているデータの種類を確認してみましょう。
ここをクリックして Log Analytics のデモ環境でクエリを実行する
Heartbeat
| take 10
TimeGenerated
、Computer
、Category
、OSType
列には、すべてここでの分析に関連するデータが含まれています。
次に、このデータをどのように使用できるか、またどの KQL 演算がデータの抽出と変換に役立つかを評価してみましょう。
列 | 説明 | 分析の目標 | 関連する KQL 演算 |
---|---|---|---|
TimeGenerated |
仮想マシンによって各ログが生成された時期を示します。 |
|
|
Computer |
マシンの一意識別子です。 |
|
|
Category |
エージェントの種類:
|
マシン上で実行されているエージェントを特定する。 | 結果を簡素化し、さらなる分析 (フィルター処理など) を容易にするために:
|
OSType |
仮想マシン上で実行されているオペレーティング システムの種類です。 | Log Analytics エージェントのエージェントの種類を特定する (Windows と Linux で異なります)。 | summarize by... OSType 詳細については、「summarize 演算子」を参照してください。 |
Version |
仮想マシンを監視しているエージェントのバージョン番号です。 | 各マシンに対するエージェントのバージョンを特定する。 | 列の名前を AgentVersion に変更する (AgentVersion=Version )。 |
3. クエリを作成する
過去 48 時間以内にアクティブであったが、過去 5 分間には Heartbeat
テーブルにデータを記録していないマシンを一覧表示するクエリを作成します。
過去 48 時間のすべてのログを取得します。
ここをクリックして Log Analytics のデモ環境でクエリを実行する
Heartbeat // The table you’re querying | where TimeGenerated >ago(48h) // Time range for the query - in this case, logs generated in the past 48 hours
このクエリの結果セットには、過去 48 時間以内にログ データを送信したすべてのマシンからのログが含まれます。 これらの結果には、おそらくアクティブな各マシンの大量のログが含まれています。
最近ログを送信していないマシンを把握するために必要なのは、各マシンが最後に送信したログのみです。
各マシンが最後に生成したログを検索し、コンピューター、エージェントの種類、オペレーティング システム別に集計します。
ここをクリックして Log Analytics のデモ環境でクエリを実行する
Heartbeat // The table you’re querying | where TimeGenerated >ago(48h) // Time range for the query - in this case, logs generated in the past 48 hours | summarize max(TimeGenerated) by Computer, AgentType=Category, OSType // Retrieves the last record generated by each computer and provides information about computer, agent type, and operating system
これで、過去 48 時間以内にデータをログに記録した各マシンごとに 1 つのログを得られます。つまり、各マシンが最後に送信したログです。
summarize
行では、Category
列の名前をAgentType
に変更しています。この方が、この分析の一環としてこの列で参照している情報に適しています。過去 5 分間にログを送信していないマシンを表示するには、過去 5 分間に生成されたすべてのログをフィルターで除外します。
ここをクリックして Log Analytics のデモ環境でクエリを実行する
Heartbeat // The table you’re querying | where TimeGenerated >ago(48h) // Time range for the query - in this case, logs generated in the past 48 hours | summarize max(TimeGenerated) by Computer, AgentType=Category, OSType // Retrieves the last record generated by each computer and provides information about computer, agent type, and operating system | where max_TimeGenerated < ago(5m) // Filters away all records generated in the last five minutes
このクエリの結果セットには、過去 48 時間以内にデータをログに記録したすべてのマシンが最後に生成したログが含まれますが、過去 5 分間以内に生成されたログは含まれません。 言い換えると、過去 5 分間以内にデータをログに記録したマシンは、この結果セットに含まれません。
これで求めているデータが得られました。つまり、過去 48 時間以内にデータをログに記録したが、過去 5 分間には想定どおりにデータをログに記録していないすべてのマシンの一覧です。 この結果セットは、さらに調査する必要があるコンピューターのセットで構成されています。
クエリ結果を操作して、情報をより明確に表示します。
たとえば、ログを生成された時間別に (最も古いログから最新のログへ) 整理して、どのコンピューターが最も長くデータをログに記録していないかを確認できます。
AgentType 列の
Direct Agent
値は、そのマシン上で Log Analytics エージェントが実行されていることを示します。 Windows 用 Log Analytics エージェントは OMS とも呼ばれ、また Linux 用のエージェントは MMS とも呼ばれるため、Direct Agent
値の名前を Windows マシンに対してはMMA
に、Linux マシンに対してはOMS
に変更することで、結果を簡素化し、フィルター処理などのさらなる分析を容易にすることができます。ここをクリックして Log Analytics のデモ環境でクエリを実行する
Heartbeat // The table you’re querying | where TimeGenerated >ago(48h) // Time range for the query - in this case, logs generated in the past 48 hours | summarize max(TimeGenerated) by Computer,AgentType=Category, OSType // Retrieves the last record generated by each computer and provides information about computer, agent type, and operating system | where max_TimeGenerated < ago(5m) // Filters away all records generated in the last five minutes | extend AgentType= iif(AgentType == "Direct Agent" and OSType =="Windows", "MMA", AgentType) // Changes the AgentType value from "Direct Agent" to "MMA" for Windows machines | extend AgentType= iif(AgentType == "Direct Agent" and OSType =="Linux", "OMS", AgentType) // Changes the AgentType value from "Direct Agent" to "OMS" for Linux machines | order by max_TimeGenerated asc // Sorts results by max_TimeGenerated from oldest to newest | project-reorder max_TimeGenerated,Computer,AgentType,OSType // Reorganizes the order of columns in the result set
ヒント
max_TimeGenerated
を使って、レポートを停止したマシンの最後のハートビートと、ほぼ同じ時期に発生したマシン ログやその他の環境のイベントを関連付けます。 この方法でログを関連付けると、調査している問題の根本原因を見つけるのに役立ちます。
課題: 監視しているエージェントとエージェント バージョン別にマシンをグループ化する
マシン上で実行されているエージェントとエージェント バージョンを把握することは、問題の根本原因を分析し、新しいエージェントや新しいエージェント バージョンに更新する必要があるマシンを特定するのに役立ちます。
この情報を得るために、上記で作成したクエリに対していくつかの微調整を加えることはできますか?
次の点を考慮してください。
- ログからどのような追加情報を抽出する必要がありますか?
- 実行しているエージェント バージョン別にマシンをグループ化するために、どの KQL 演算を使えますか?
解決方法:
クエリの最初の 5 行をコピーし、クエリの
summarize
行にVersion
列を追加して、エージェント バージョンの情報を抽出します。ここをクリックして Log Analytics のデモ環境でクエリを実行する
Heartbeat // The table you’re querying | where TimeGenerated >ago(48h) // Time range for the query - in this case, logs generated in the past 48 hours | summarize max(TimeGenerated) by Computer,AgentType=Category, OSType, Version // Retrieves the last record generated by each computer and provides information about computer, agent type, operating system, and agent version | extend AgentType= iif(AgentType == "Direct Agent" and OSType =="Windows", "MMA", AgentType) // Changes the AgentType value from "Direct Agent" to "MMA" for Windows machines | extend AgentType= iif(AgentType == "Direct Agent" and OSType =="Linux", "OMS", AgentType) // Changes the AgentType value from "Direct Agent" to "OMS" for Linux machines
わかりやすくするために
Version
列の名前をAgentVersion
に変更します。また、別のsummarize
行を追加して、エージェントの種類、エージェント バージョン、オペレーティング システムの種類からなる一意の組み合わせを検索し、KQL のmake_set()
集計関数を使ってエージェントの種類とエージェント バージョンの各組み合わせを実行しているすべてのコンピューターを一覧表示します。ここをクリックして Log Analytics のデモ環境でクエリを実行する
Heartbeat // The table you’re querying | where TimeGenerated >ago(48h) // Time range for the query - in this case, logs generated in the past 48 hours | summarize max(TimeGenerated) by Computer,AgentType=Category, OSType, Version // Retrieves the last record generated by each computer and provides information about computer, agent type, operating system, and agent version | extend AgentType= iif(AgentType == "Direct Agent" and OSType =="Windows", "MMA", AgentType) // Changes the AgentType value from "Direct Agent" to "MMA" for Windows machines | extend AgentType= iif(AgentType == "Direct Agent" and OSType =="Linux", "OMS", AgentType) // Changes the AgentType value from "Direct Agent" to "OMS" for Linux machines | summarize ComputersList=make_set(Computer) by AgentVersion=Version, AgentType, OSType // Summarizes the result set by unique combination of agent type, agent version, and operating system, and lists the set of all machines running the specific agent version
これで求めているデータが得られました。つまり、エージェントの種類とエージェント バージョンの一意の組み合わせの一覧と、各エージェントの特定のバージョンを実行している最近アクティブなすべてのマシンのセットです。