ライブコンテナの構成

Kubernetes リソース

Datadog Agent と Cluster Agent は、ライブコンテナの Kubernetes リソースを取得するように構成できます。この機能により、特定のネームスペースまたはアベイラビリティーゾーンのポッド、デプロイメント、その他の Kubernetes の概念の状態を監視したり、デプロイメント内で失敗したポッドのリソース仕様を確認したり、ノードアクティビティを関係するログに関連付けたりすることが可能になります。

ライブコンテナの Kubernetes リソースには、以下を構成する前に Agent バージョン >= 7.27.0 および Cluster Agent バージョン >= 1.11.0 が必要です。

公式の Datadog Helm チャートを使用している場合、

  • バージョン 2.10.0 以降のチャートを使用します。 : Agent および Cluster Agent のバージョンが、Helm チャート values.yaml ファイルで必要最低限以上のバージョンでハードコードされるようにしてください。

  • Process Agent が有効になっていることを確認してください。これを行うには、datadog-values.yaml ファイルを変更して次の値を含めるようにします。

    datadog:
        # (...)
        processAgent:
            enabled: true
    
  • 新しいリリースをデプロイします。

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

Cluster Agent バージョン >= 1.11.0 は、DaemonSet を構成する前に必要となります。Cluster Agent が実行中で Agent と通信できることを確認してください。コンフィギュレーションの詳細は、Cluster Agent のセットアップを参照してください。

  1. 以下の環境変数を使用して、Cluster Agent コンテナを設定します。

      - name: DD_ORCHESTRATOR_EXPLORER_ENABLED
        value: "true"
    
  2. 以下の RBAC アクセス許可を使用して、Cluster Agent ClusterRole を設定します。

    特に apps および batch apiGroups の場合は、ライブコンテナに  一般的な Kubernetes リソース (``podsservicesnodes など) を収集する権限が必要です。これは、[Cluster Agent のセットアップ][2]に従っていれば、すでに RBAC にあります。ない場合は、 追加されていることを確認してください (deploymentsreplicasets` の後):

      ClusterRole:
      - apiGroups:  # To create the datadog-cluster-id ConfigMap
        - ""
        resources:
        - configmaps
        verbs:
        - create
        - get
        - update
      ...
      - apiGroups:  # Required to get the kube-system namespace UID and generate a cluster ID
        - ""
        resources:
        - namespaces
        verbs:
        - get
      ...
      - apiGroups:  # To collect new resource types
        - "apps"
        resources:
        - deployments
        - replicasets
        verbs:
        - list
        - get
        - watch
      - apiGroups:
        - "batch"
        resources:
        - cronjobs
        - jobs
        verbs:
        - list
        - get
        - watch
      ...
    

    これらのアクセス許可は、Agent DaemonSet や Cluster Agent Deployment と同じネームスペースに datadog-cluster-id ConfigMap を作成したり、サポート対象の Kubernetes リソースを収集するために必要です。

    Cluster Agent により cluster-id ConfigMap が作成されない場合、Agent ポッドはリソースを収集することができません。この場合は Cluster Agent のアクセス許可を更新し、ポッドを再起動して ConfigMap を作成した後、Agent ポッドを再起動します。

  3. Agent DaemonSet で実行される Process Agent は、有効かつ実行中(プロセス収集を実行する必要はありません)であり、かつ以下のオプションで構成されている必要があります。

    - name: DD_ORCHESTRATOR_EXPLORER_ENABLED
      value: "true"
    

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

- name: DD_CLUSTER_NAME
  value: "<YOUR_CLUSTER_NAME>"

リソース収集の互換性マトリックス

次の表は、収集されたリソースと、それぞれに対する最低限の Agent、Cluster Agent、Helm チャートのバージョンをリストで示したものです。

Resource最低限必要な Agent のバージョン最低限必要な Cluster Agent のバージョン最低限必要な Helm チャートのバージョン
ClusterRoleBindings7.27.01.19.02.30.9
ClusterRoles7.27.01.19.02.30.9
クラスター7.27.01.12.02.10.0
CronJobs7.27.01.13.12.15.5
DaemonSets7.27.01.14.02.16.3
デプロイ7.27.01.11.02.10.0
Ingresses7.27.01.22.02.30.7
ジョブ7.27.01.13.12.15.5
ノード7.27.01.11.02.10.0
PersistentVolumes7.27.01.18.02.30.4
PersistentVolumeClaims7.27.01.18.02.30.4
ポッド7.27.01.11.02.10.0
ReplicaSet7.27.01.11.02.10.0
RoleBindings7.27.01.19.02.30.9
ロール7.27.01.19.02.30.9
ServiceAccounts7.27.01.19.02.30.9
サービス7.27.01.11.02.10.0
Statefulsets7.27.01.15.02.20.1

以前の Agent および Cluster Agent バージョン向けの手順

ライブコンテナの Kubernetes リソースビューでは、最低限必要なバージョンが更新される前は、Agent バージョン >= 7.21.1およびCluster Agent バージョン >= 1.9.0が必要でした。これらの古いバージョンでは DaemonSetのコンフィギュレーションが若干異なっていたため、完全な手順が必要な場合は以下をご参照ください。

公式の Datadog Helm チャートを使用している場合、

  • チャートのバージョンは 2.4.5 以上、2.10.0 以前を使用してください。チャートバージョン 2.10.0 以降をお使いの場合は、最新のコンフィギュレーション手順を参照してください。 : Agent および Cluster Agent のバージョンが、Helm チャート values.yaml ファイルで必要最低限以上のバージョンでハードコードされるようにしてください。
  • values.yamldatadog.orchestratorExplorer.enabledtrue に設定します
  • 新しいリリースをデプロイします。

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

Cluster Agent が動作していて、Agent が通信可能である必要があります。コンフィギュレーションについては、Cluster Agent のセットアップを参照してください。

  1. 以下の環境変数を使用して、Cluster Agent コンテナを設定します。

      - name: DD_ORCHESTRATOR_EXPLORER_ENABLED
        value: "true"
    
  2. 以下の RBAC アクセス許可を使用して、Cluster Agent ClusterRole を設定します。

    : apps apiGroups の場合は、ライブコンテナに 一般的な Kubernetes リソース (podsservicesnodes など) を収集する権限が必要です。 これは、Cluster Agent のセットアップに従っていれば、すでに RBAC にあります。ない場合は、追加されていることを確認してください (deploymentsreplicasets の後):

      ClusterRole:
      - apiGroups:  # To create the datadog-cluster-id ConfigMap
        - ""
        resources:
        - configmaps
        verbs:
        - create
        - get
        - update
      ...
      - apiGroups:  # Required to get the kube-system namespace UID and generate a cluster ID
        - ""
        resources:
        - namespaces
        verbs:
        - get
      ...
      - apiGroups:  # To collect new resource types
        - "apps"
        resources:
        - deployments
        - replicasets
        - daemonsets
        - statefulsets
        verbs:
        - list
        - get
        - watch
     - apiGroups:
       - networking.k8s.io
       resources:
       - ingresses
       verbs:
       - list
       - watch
    

    これらのアクセス許可は、Agent DaemonSet や Cluster Agent Deployment と同じネームスペースに datadog-cluster-id ConfigMap を作成したり、デプロイや ReplicaSets を収集するために必要です。

    Cluster Agent により cluster-id ConfigMap が作成されない場合、Agent ポッドは起動せず、CreateContainerConfigError ステータスに陥ります。この ConfigMap が存在しないために Agent ポッドが動かない場合は、Cluster Agent アクセス許可を更新しポッドを再起動して ConfigMap を作成すると、Agent ポッドは自動的に回復します。

  3. Agent DaemonSet で実行される Process Agent は、有効かつ実行中(プロセス収集を実行する必要はありません)であり、かつ以下のオプションで構成されている必要があります。

    - name: DD_ORCHESTRATOR_EXPLORER_ENABLED
      value: "true"
    - name: DD_ORCHESTRATOR_CLUSTER_ID
      valueFrom:
        configMapKeyRef:
          name: datadog-cluster-id
          key: id
    

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

- name: DD_CLUSTER_NAME
  value: "<YOUR_CLUSTER_NAME>"

カスタムタグをリソースに追加

カスタムタグを Kubernetes リソースに追加すると、Kubernetes リソースビュ内のフィルタリングが容易になります。

追加タグは、DD_ORCHESTRATOR_EXPLORER_EXTRA_TAGS 環境変数を通して追加されます。

: これらのタグは、Kubernetes リソースビューでのみ表示されます。

公式の Helm チャートを使用している場合、values.yaml にそれぞれ agents.containers.processAgent.env および clusterAgent.env を設定して Process Agent と Cluster Agent の両方に環境変数を追加します。

  agents:
    containers:
      processAgent:
        env:
          - name: "DD_ORCHESTRATOR_EXPLORER_EXTRA_TAGS"
            value: "tag1:value1 tag2:value2"
  clusterAgent:
    env:
      - name: "DD_ORCHESTRATOR_EXPLORER_EXTRA_TAGS"
        value: "tag1:value1 tag2:value2"

次に、新しいリリースをデプロイします。

Process Agent と Cluster Agent の両コンテナに環境変数を設定します。

- name: DD_ORCHESTRATOR_EXPLORER_EXTRA_TAGS
  value: "tag1:value1 tag2:value2"

コンテナを対象に入れる/除外する

コンテナは、リアルタイム収集の対象に入れたり、除外したりすることができます。

  • メインコンフィギュレーションファイル datadog.yaml に環境変数 DD_CONTAINER_EXCLUDE を渡すか、container_exclude: を追加することで、コンテナを対象から除外することができます。
  • メインコンフィギュレーションファイル datadog.yaml に環境変数 DD_CONTAINER_INCLUDE を渡すか、container_include: を追加することで、コンテナを対象に入れることができます。

どちらの引数も値はイメージ名になります。正規表現もサポートされています。

たとえば、名前が frontend で始まるコンテナ以外のすべての Debian イメージを除外するには、datadog.yaml ファイルに次の 2 つの構成行を追加します。

container_exclude: ["image:debian"]
container_include: ["name:frontend.*"]

: Agent 5 の場合は、これをメインの datadog.conf 構成ファイルに追加する代わりに、datadog.yaml ファイルを明示的に /etc/datadog-agent/ に追加してください。プロセス Agent は、ここにすべての構成オプションがあることを前提とするためです。この構成は、コンテナをリアルタイム収集から除外するだけで、オートディスカバリーからは除外しません

機密情報のスクラビング

機密データの漏洩を防ぐために、コンテナ YAML ファイル内のセンシティブワードをスクラブすることができます。Helm チャートではコンテナスクラビングがデフォルトで有効になっており、いくつかのデフォルトのセンシティブワードが提供されています。

  • password
  • passwd
  • mysql_pwd
  • access_token
  • auth_token
  • api_key
  • apikey
  • pwd
  • secret
  • credentials
  • stripetoken

環境変数 DD_ORCHESTRATOR_EXPLORER_CUSTOM_SENSITIVE_WORDS に単語のリストを与えることで、追加のセンシティブワードを設定することができます。これはデフォルトの単語に追加され、上書きされることはありません。

: Agent はテキストを小文字のパターンと比較するため、追加のセンシティブワードは小文字でなければなりません。つまり、passwordMY_PASSWORDMY_******* にスクラブしますが、PASSWORD はスクラブしません。

以下の Agent では、この環境変数を設定する必要があります。

  • process-agent
  • cluster-agent
env:
    - name: DD_ORCHESTRATOR_EXPLORER_CUSTOM_SENSITIVE_WORDS
      value: "customword1 customword2 customword3"

例えば、password はセンシティブワードなので、スクラバーは以下のいずれかの <MY_PASSWORD> をアスタリスクの文字列、*********** に変更します。

password <MY_PASSWORD>
password=<MY_PASSWORD>
password: <MY_PASSWORD>
password::::== <MY_PASSWORD>

ただし、センシティブワードを含むパスのスクラビングは行いません。例えば、secret がセンシティブワードであっても、 /etc/vaultd/secret/haproxy-crt.pem/etc/vaultd/******/haproxy-crt.pem に上書きすることはありません。

その他の参考資料