Datadog の Containers ページは、環境内のすべてのコンテナをリアルタイムで可視化します。

htop、ctop、kubectl などの基盤ツールを手本として、Containers ページはユーザーのコンテナインフラストラクチャーを完全にカバーし、解像度 2 秒のリソースメトリクス、ファセット検索、コンテナログストリーミングでテーブルを継続的に更新します。

Containers ページは、DockerKubernetesECS などのコンテナ技術と連動し、動的コンポーネントのタグ付けも組み込まれて、コンテナの健全性、リソース消費、ログ、デプロイなどの詳細な全体像をリアルタイムに提供します。

ライブコンテナでサマリーを確認

セットアップ

コンテナビューにデータを表示するには、プロセス Agent を有効にします。

DD_PROCESS_AGENT_ENABLED 環境変数を true に設定します。

例:

-v /etc/passwd:/etc/passwd:ro
-e DD_PROCESS_AGENT_ENABLED=true

Datadog Operator では、プロセスが Agent がデフォルトで有効になります。

検証のため、datadog-agent.yamlfeatures.liveContainerCollection.enabledtrue に設定されていることを確認してください。

apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
  name: datadog
spec:
  global:
    credentials:
      apiKey: <DATADOG_API_KEY>
      appKey: <DATADOG_APP_KEY>
  features:
    liveContainerCollection:
      enabled: true

公式の Helm チャートを使用している場合、values.yaml ファイルで processAgent.enabled パラメーターを有効にします。

datadog:
  # (...)
  processAgent:
    enabled: true

次に、Helm チャートをアップグレードします。

一部のセットアップでは、Process Agent と Cluster Agent で Kubernetes クラスター名が自動検出されません。この場合、機能は起動せず、Cluster Agent ログで以下のような警告が表示されます。Orchestrator explorer enabled but no cluster name set: disabling.。この場合、datadog.clusterNamevalues.yaml でクラスター名に設定する必要があります。

datadog:
  #(...)
  clusterName: <YOUR_CLUSTER_NAME>
  #(...)
  processAgent:
    enabled: true

以下の環境変数を使用して、タスク定義を更新します。

{
  "name": "DD_PROCESS_AGENT_ENABLED",
  "value": "true"
}

構成

コンテナのフィルタリングや機密情報のスクラビングなどの構成オプションについては、コンテナビューの構成を参照してください。古いバージョンの Agent 用 (Datadog Agent v7.21.1 から v7.27.0 および Cluster Agent v1.9.0 から 1.11.0) にこのページをセットアップするには、ライブコンテナのレガシー構成を参照してください。

Kubernetes オーケストレータエクスプローラー

Containers ページ左上の Select Resources ボックスで、Kubernetes の見出しを展開表示させると、Kubernetes オーケストレータエクスプローラーでポッド、クラスター、ネームスペース、その他のリソースを確認することができます。詳細については、オーケストレータエクスプローラーのドキュメントを参照してください。

また、Kubernetes ページを使用して Kubernetes のリソースの概要を見ることもできます。

検索、フィルタリング、ピボット

文字列検索

コンテナは、本質的に極めてカーディナリティの高いオブジェクトです。Datadog の柔軟な文字列検索は、コンテナ名、ID、またはイメージフィールドから一致する部分文字列を見つけます。

複合クエリで複数の文字列検索を組み合わせるには、以下のブール演算子を使用します。

AND
: 両方の条件を含むイベントが選択されます(何も追加しなければ、AND がデフォルトです)。
: java AND elasticsearch
OR
: いずれかの条件を含むイベントが選択されます。
: java OR python
NOT / !
排他: 後続の条件はイベントに含まれません。単語 NOT または文字 ! のどちらを使用しても、同じ演算を行うことができます。
: java NOT elasticsearch または java !elasticsearch

演算子をグループ化するには括弧を使用します。例: (NOT (elasticsearch OR kafka) java) OR python

フィルタリングとピボット

下のスクリーンショットは、あるシステムがフィルタリングによって 25 のノードからなる 1 つの Kubernetes クラスターに絞り込まれたところを示しています。コンテナの RSS および CPU 使用率をレポートする際に、コンテナに制限がプロビジョニングされている場合は、制限との比較が示されます。ここでは、このクラスターのコンテナがオーバープロビジョニングになっていることは明らかです。制限とビンパッキングを厳しくすれば、リソースの使用率を改善できます。

システムを 25 のノードから 1 つの Kubernetes クラスターに絞り込み

コンテナ環境は動的であり、追跡が困難な場合があります。下のスクリーンショットは、kube_servicehost によってピボットされたビューです。システムノイズを減らすために、kube_namespace:default に絞り込まれています。どのサービスがどこで実行されているか、キーメトリクスの飽和状態などがわかります。

ホスト x サービス

ECS の ecs_task_nameecs_task_version でピボットすると、更新時のリソース使用率の変化を把握できます。

タスク x バージョン

タグ付け

コンテナは、すべての既存のホストレベルのタグおよび個別のコンテナに関連付けられたメタデータを使用してタグ付けされます。

よく使用されるオーケストレーターとのインテグレーションを含め、すべてのコンテナは image_name でタグ付けされます。ECSKubernetes には、さらにいくつかのコンテナレベルのタグが提供されます。また、各コンテナには Docker、ECS、または Kubernetes のアイコンが付くため、どれがオーケストレーション中であるかが一目でわかります。

ECS コンテナは以下でタグ付けされます。

  • task_name
  • task_version
  • ecs_cluster

Kubernetes コンテナは以下でタグ付けされます。

  • pod_name
  • kube_pod_ip
  • kube_service
  • kube_namespace
  • kube_replica_set
  • kube_daemon_set
  • kube_job
  • kube_deployment
  • kube_cluster

統合サービスタグ付けのコンフィギュレーションがある場合、Datadog は自動的に envserviceversion のタグを取得します。上記のタグが利用できることで、APM、ログ、メトリクス、コンテナデータを結びつけることができます。

ビュー

Containers ページには、散布図および時系列ビューと、コンテナ名、ステータス、開始時刻などのフィールドでコンテナデータを整理できるテーブルが含まれています。

散布図

散布図分析を使用すると、2 つのメトリクスを比較してコンテナのパフォーマンスをより的確に把握できます。

Containers ページの展開可能な Summary Graphs セクションで、“Scatter Plot” と “Timeseries” タブを切り替えることができます。

Scatter Plot を選択

デフォルトでは、グラフは short_image タグキーでグループ化されます。ドットのサイズは、各グループ内のコンテナの数を表します。ドットをクリックすると、グループに参加しているすべてのコンテナとホストが表示されます。

散布図分析の上部にあるクエリを使用して、散布図分析を制御できます。

  • 表示するメトリクスの選択。
  • 2 つのメトリクスの集計方法の選択。
  • X 軸と Y 軸の目盛の選択 (Linear/Log)。
Scatter plot

リアルタイムの監視

コンテナページをアクティブに使用している間、メトリクスは 2 秒の解像度で収集されます。これは、CPU などの揮発性のメトリクスで重要です。バックグラウンドでは、履歴を目的として、10 秒の解像度でメトリクスが収集されます。

コンテナログ

docker logs -fkubectl logs -f などのコンテナのストリーミングログを Datadog で表示します。テーブル内のコンテナをクリックして調べることができます。Logs タブをクリックすると、Live Tail からのリアルタイムデータや過去の任意の時間のインデックス化されたログが表示されます。

Live tail

Live Tail を使用すると、すべてのコンテナログがストリーミングされます。ストリームを一時停止すると、高速に書き込まれているログを読みやすくなります。一時停止を解除すると、ストリーミングが継続されます。

簡単な文字列マッチングでストリーミングログを検索できます。詳細については、Live Tailを参照してください。

: ストリーミングログは永続化されません。新しい検索を入力するか、ページをリフレッシュすると、ストリームはクリアされます。

インデックス化されたログ

対応するタイムフレームを選択することで、インデックス化して永続化するように選択したログを表示できます。インデックス化を使用すると、タグやファセットを使用してログをフィルタリングできます。たとえば、Error 状態のログを検索するには、検索ボックスに status:error と入力します。オートコンプリートによって目的のタグが見つけやすくなります。ログの重要な属性が既にタグに保存されているため、必要に応じて検索、フィルタリング、集計を行うことができます。

ログサイドパネルのプレビュー

注意事項と既知の問題

  • リアルタイム (2 秒) データ収集は 30 分後にオフになります。リアルタイム収集を再開するには、ページをリフレッシュします。
  • RBAC 設定によって Kubernetes のメタデータ収集を制限できます。Datadog Agent の RBAC エンティティを参照してください。
  • Kubernetes の health 値は、コンテナの readiness プローブです。liveness プローブではありません。

参考資料