Container Insights による監視の仕組み

これまで見てきたように、Container Insightsを利用したAKSの監視は、Azureポータル上から簡単に有効化ができメトリックやログの確認もブラウザで行えます。デフォルトの状態で利用する場合は意識する必要はありませんが、ログ収集に関する設定やログ収集のパフォーマンスをチューニングする際にどのようなしくみでログやメトリックが収集されるかを知っておくと役に立つことがあります。ここでは、Container Insightsによる監視の仕組みを紹介します。

Container Insightsを有効にすると、kube-system名前空間に、DaemonSet とDeploymentによってログ収集のためのエージェントが展開されます。それぞれ、DaemonSet は omsagent、Deployment は omsagent-rs の名前がついているものです。


# kubectl get po,ds,deploy -n kube-system
NAME                                                     READY   STATUS    RESTARTS      AGE
... (省略) ...
pod/omsagent-nrr4c                                       2/2     Running   6 (21m ago)   20h
pod/omsagent-rs-848bf766d4-g5tpb                         1/1     Running   3 (21m ago)   20h

NAME                                             DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR              AGE
... (省略) ...
daemonset.apps/omsagent                          1         1         1       1            1                                20h
daemonset.apps/omsagent-win                      0         0         0       0            0                                20h

NAME                                                READY   UP-TO-DATE   AVAILABLE   AGE
... (省略) ...
deployment.apps/omsagent-rs                         1/1     1            1           20h

※このomsagent の名前は今後変更される予定があります。以下のドキュメントをご参照ください。
Name update for Agent and associated resources in Azure Monitor - Container Insights

DaemonSet で展開されるエージェントは「ノード上にあるコンテナ特有の情報を取得して、Log Analytics へ送信」する仕組みを、また、Deployment で展開されるエージェントは「Pod や ノードのインベントリー、イベント、正常性を取得して、Log Analytics へ送信」する仕組みを提供しています。

各Podの中ではFluentdが起動しており、その設定ファイルに応じてLog Analyticsにデータを送信しています。送信されたデータは、Log Analyticsのテーブルとして確認できます。なお、DaemonSetのPodは各ノードの /var/log/containers を /var/log としてマウントし、Pod 内からホストのコンテナログを参照しています。

例えば、ContainerLogやContainerInventoryのようなコンテナ固有のログはDaemonSetのFluentdによって送信されるデータであり、また、KubeEventsやKubeNodeInventoryのようなクラスタ全体に関するログはDeployment によって送信されるデータです。

ログ収集の設定を変更するには、ConfigMap を使用します。

Container insights のエージェント データ収集を構成する

例えば、コンテナから出力される stdout のログ収集対象の名前空間の除外ができます。デフォルトでは、kube-system 名前空間にあるコンテナについてはログ収集を行いませんが、ユーザーが作成した名前空間も対象にできます。


[log_collection_settings.stdout]
   exclude_namespaces = ["kube-system"]

コンテナの環境変数の収集を無効にできるオプションがあります。


[log_collection_settings.env_var]
   enabled = true

また、Fluentd のバッファの設定を変更できます。この設定を変更するとメモリやCPUの使用率に影響するため、慎重に変更する必要がありますが、大量のログを取りこぼしなく取得したいときに設定すると、有効な場合があります。


[agent_settings.fbit_config]
  log_flush_interval_secs = "1"
  tail_mem_buf_limit_megabytes = "10"
  tail_buf_chunksize_megabytes = "1"
  tail_buf_maxsize_megabytes = "1"

アラート

取得したデータに対してアラートを設定すると、障害の検知や未然防止が可能になります。Azure Monitorで取得できるログやメトリックはそれぞれアラートが設定できます。AKSに関しては、"推奨されるアラート" 機能として推奨されるアラートの設定が簡単にできるようになっています。

この機能では、コンテナのCPU使用率やメモリ使用率、再起動したコンテナの数等があらかじめプリセットされており、トグルで有効化するだけでアラートの設定が可能です。詳細は以下のドキュメントを参照してください。

Container insights からの推奨メトリック アラート (プレビュー)

また、AKS 固有のアラート以外に、Azureのサービスに関するアラートを設定しておきます。これにより、Azureで障害やメンテナンスが発生している際にその情報を受け取ることが可能になります。詳細は以下のドキュメントを参照してください。

Azure Service Health とは