2020年7月21日火曜日

仮想マシンの停止時や起動時のLog Analytics Agentの動作について

Log Analytics AgentはOSのログ情報やメトリック情報を Azure Monitor の Log Analytics ワークスペースに送信するものですが、仮想マシンの停止時や起動時 (=OSの停止時や起動時) にどのような動作をするのか調べてみました。 ここでは、対象は仮想マシン、OSはCentOS 7.5、Syslogの送信、とします。また、SyslogのINFOログを送信するように設定済みであるとします。

調査方法:
  1. SyslogにINFOログを10秒ごとに送信するスクリプトを実行する。
  2. ここでは、以下のスクリプトを実行します。
    $ while true; do currentdate=$(date); logger -p user.info message for info on $currentdate; sleep 10s; done
    
  3. Log AnalyticsワークスペースにINFOログが送信されることを確認したら、SyslogにINFOログが送信された直後に仮想マシンを停止する。
  4. 5分ほど停止させ、Log Analyticsワークスペースにログが送信されてこないことを確認したのちに、仮想マシンを起動する。
結果:
  • 仮想マシン停止時には、直前にSyslogに送信されたログがLog Analyticsワークスペースに送信されませんでした。
  • 仮想マシンを起動すると、仮想マシン停止の直前にSyslogに送信したログがLog Analyticsワークスペースに送信されました。
Agentはどこまでのログを送信したかという情報をバッファに持つのですが、AgentはLog Analyticsワークスペースに定期的にログを送信するのみで、仮想マシン停止時にバッファを見てログを送信するという動作はしていないことになります。なお、Agentがログを送信するタイミングは/etc/opt/microsoft/omsagent/conf/omsagent.confに記述されており、CentOS 7.5の場合はバッファのフラッシュが10s毎、リトライ回数6回、リトライインターバル30sになっています。

なお、ドキュメントには
エージェントが Azure Monitor または Operations Manager に接続できない場合は、そのままデータの収集を続け、接続が確立されたときにデータを送信します。 データの量がクライアントの最大キャッシュ サイズに達した場合、またはエージェントが 24 時間以内に接続を確立できなかった場合は、データが失われることがあります。
という記述があるので(https://docs.microsoft.com/ja-jp/azure/azure-monitor/platform/agent-data-sources#data-collection) 、調査方法の手順3での停止時間を24時間以上にしてテストしてみましたが、仮想マシン起動後に未送信のログがLog Analyticsワークスペースに送信されました。起動状態で24時間なのかどうかは今後要調査です。