Helm チャート v2.7.0 以降または Datadog Operator v0.7.0 以降を使用して Datadog Agent をデプロイする場合、Cluster Agent はデフォルトで有効になっています。

Datadog Operator v1.0.0 以降、Cluster Agent はデフォルトで有効になっています。Operator は必要な RBAC を作成し、Cluster Agent をデプロイして、Agent DaemonSet の設定を変更します。

これにより、通信を保護するために Cluster Agent と Datadog Agent の両方で共有される Secret 内のランダムなトークンも自動的に生成されます。global.clusterAgentToken フィールドを設定することで、このトークンを手動で指定できます。あるいは、既存の Secret の名前と、このトークンを含むデータキーを参照することで設定することも可能です。

apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
  name: datadog
spec:
  global:
    credentials:
      apiKey: <DATADOG_API_KEY>
    clusterAgentTokenSecret:
      secretName: <SECRET_NAME>
      keyName: <KEY_NAME>

手動で設定する場合、このトークンは 32 文字の英数字である必要があります。

Cluster Agent は、Helm チャート v2.7.0 以降、デフォルトで有効になっています。

古いバージョンで有効にする場合、または clusterAgent キーを上書きするカスタム datadog-values.yaml を使用している場合は、datadog-values.yaml ファイルを以下の Cluster Agent 設定で更新してください。

clusterAgent:
  # clusterAgent.enabled -- Set this to false to disable Datadog Cluster Agent
  enabled: true

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

これにより、Cluster Agent と Datadog Agent に必要な RBAC ファイルが自動的に更新されます。両方の Agent は同じ API キーを使用します。

これにより、通信を保護するために Cluster Agent と Datadog Agent の両方で共有される Secret 内のランダムなトークンも自動的に生成されます。このトークンは、clusterAgent.token 構成を使用して手動で指定できます。また、clusterAgent.tokenExistingSecret 構成を使用して、token 値を含む既存の Secret の名前を参照することで設定することもできます。

手動で設定する場合、このトークンは 32 文字の英数字である必要があります。

Datadog Cluster Agent を DaemonSet でセットアップするには:

  1. Cluster Agent の RBAC 権限を構成します
  2. Cluster Agent と Agent の通信を保護します
  3. Cluster Agent とそのサービスを作成します
  4. ノード Agent が Cluster Agent と通信するように構成します

Cluster Agent の RBAC 権限の構成

Datadog Cluster Agent が稼働するには、適切な RBAC が必要です。

  1. Datadog Cluster Agent RBAC フォルダー のマニフェストを確認してください。: Cluster Agent を使用する場合、ノード Agent は Kubernetes API サーバーとやり取りできず、Cluster Agent のみがやり取りできます。

  2. Cluster Agent の RBAC 権限を構成するには、以下のマニフェストを適用します。(ノード Agent の DaemonSet をセットアップした際に、すでに実施済みの場合があります。)

kubectl apply -f "https://raw.githubusercontent.com/DataDog/datadog-agent/master/Dockerfiles/manifests/cluster-agent/rbac.yaml"
kubectl apply -f "https://raw.githubusercontent.com/DataDog/datadog-agent/master/Dockerfiles/manifests/cluster-agent/cluster-agent-rbac.yaml"

これにより、Cluster Agent 用の適切な ServiceAccountClusterRole、および ClusterRoleBinding が作成され、ノード Agent 用の ClusterRole が更新されます。

Azure Kubernetes Service (AKS) を使用している場合は、追加の権限が必要になることがあります。AKS での DCA の RBAC FAQ を参照してください。

Cluster Agent と Agent 間の通信を保護

Datadog Agent と Cluster Agent は、通信を保護するためにトークンが必要です。このトークンは、Datadog Agent と Cluster Agent の両方が環境変数 DD_CLUSTER_AGENT_AUTH_TOKEN で参照できる Secret に保存することを推奨します。これは一貫性を保ち、PodSpec でトークンが読み取られるのを防ぐのに役立ちます。

このトークンを作成するには、次のワンライナーコマンドを実行して、token が設定された Secret という名前の datadog-cluster-agent を生成します。<TOKEN> を 32 文字の英数字に置き換えてください。

kubectl create secret generic datadog-cluster-agent --from-literal=token='<TOKEN>' --namespace="default"

注: これにより、デフォルトの名前空間に Secret が作成されますカスタム名前空間を使用している場合は、コマンドを実行する前に名前空間パラメータを更新してください。

Cluster Agent 用に提供されているデフォルトの cluster-agent-deployment.yaml は、環境変数構成を使用してこの Secret を参照するようにすでに構成されています。

- name: DD_CLUSTER_AGENT_AUTH_TOKEN
  valueFrom:
    secretKeyRef:
      name: datadog-cluster-agent
      key: token

Datadog Agent の構成 を行う際は、この環境変数を (同じ構成を使用して) 構成する必要があります。

Cluster Agent とそのサービスの作成

  1. 以下のマニフェストをダウンロードします。

  2. secret-api-key.yaml マニフェストで、PUT_YOUR_BASE64_ENCODED_API_KEY_HERE を base64 でエンコードした Datadog API キー に置き換えます。API キーの base64 バージョンを取得するには、次のコマンドを実行します。

    echo -n '<Your API key>' | base64
    
  3. secrets-application-key.yaml マニフェストで、PUT_YOUR_BASE64_ENCODED_APP_KEY_HERE を base64 でエンコードした Datadog アプリケーションキー に置き換えます。

  4. デフォルトでは、cluster-agent-deployment.yaml マニフェストは Secret datadog-cluster-agent で以前に作成されたトークンを参照します。このトークンを別の方法で保存している場合は、それに応じて DD_CLUSTER_AGENT_AUTH_TOKEN 環境変数を構成してください。

  5. Cluster Agent デプロイメントで使用する以下のリソースをデプロイします。

    kubectl apply -f agent-services.yaml
    kubectl apply -f secret-api-key.yaml
    kubectl apply -f secret-application-key.yaml
    kubectl apply -f install_info-configmap.yaml
    
  6. 最後に、Datadog Cluster Agent をデプロイします。

    kubectl apply -f cluster-agent-deployment.yaml
    

: Datadog Cluster Agent で、環境変数 DD_SITE を Datadog サイトに設定します。デフォルトは US サイト datadoghq.com です。

検証

この時点で、次のように表示されるはずです。

kubectl get deploy

NAME                    DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
datadog-cluster-agent   1         1         1            1           1d

kubectl get secret

NAME                    TYPE                                  DATA      AGE
datadog-cluster-agent   Opaque                                1         1d

kubectl get pods -l app=datadog-cluster-agent

datadog-cluster-agent-8568545574-x9tc9   1/1       Running   0          2h

kubectl get service -l app=datadog-cluster-agent

NAME                    TYPE           CLUSTER-IP       EXTERNAL-IP        PORT(S)          AGE
datadog-cluster-agent   ClusterIP      10.100.202.234   none               5005/TCP         1d

: Datadog Agent がすでに実行されている場合は、Cluster Agent を起動する前に Agent の rbac.yaml マニフェスト を適用する必要がある場合があります。

Datadog Agent の通信の構成

Datadog Agent の構成を変更して、Datadog Cluster Agent と通信できるようにします。

既存の DaemonSet マニフェストファイル で、環境変数 DD_CLUSTER_AGENT_ENABLEDtrue に設定します。次に、Cluster Agent と Agent 間の通信の保護 で使用されているのと同じ構文を使用して、DD_CLUSTER_AGENT_AUTH_TOKEN を設定します。

- name: DD_CLUSTER_AGENT_ENABLED
  value: "true"
- name: DD_CLUSTER_AGENT_AUTH_TOKEN
  valueFrom:
    secretKeyRef:
      name: datadog-cluster-agent
      key: token

これらの構成を適用して DaemonSet を再デプロイすると、Datadog Agent は Cluster Agent と通信できるようになります。完全な例については、提供されている Cluster Agent daemonset.yaml マニフェスト を参照してください。

検証

次のコマンドを実行して、Datadog Agent Pod と Cluster Agent Pod が実行されていることを確認できます。

kubectl get pods | grep agent

次のように表示されるはずです。

datadog-agent-4k9cd                      1/1       Running   0          2h
datadog-agent-4v884                      1/1       Running   0          2h
datadog-agent-9d5bl                      1/1       Running   0          2h
datadog-agent-dtlkg                      1/1       Running   0          2h
datadog-agent-jllww                      1/1       Running   0          2h
datadog-agent-rdgwz                      1/1       Running   0          2h
datadog-agent-x5wk5                      1/1       Running   0          2h
[...]
datadog-cluster-agent-8568545574-x9tc9   1/1       Running   0          2h

さらに、Agent ステータス出力 を使用して、Datadog Agent が Cluster Agent に正常に接続されたことを確認できます。

kubectl exec -it <AGENT_POD_NAME> agent status
[...]
=====================
Datadog Cluster Agent
=====================

  - Datadog Cluster Agent endpoint detected: https://10.104.246.194:5005
  Successfully connected to the Datadog Cluster Agent.
  - Running: 1.11.0+commit.4eadd95

Kubernetes のイベントが Datadog アカウントに流れ始め、Agent によって収集された関連メトリクスには、対応するクラスターレベルのメタデータがタグ付けされます。

Windows コンテナ

Datadog Cluster Agent は、Linux ノード上にのみデプロイできます。

Windows コンテナを監視するには、混合クラスターで Helm チャートを 2 つインストールします。最初の Helm チャートは、Datadog Cluster Agent と Linux ノード用の Agent DaemonSet をデプロイします (targetSystem: linux を使用)。2 番目の Helm チャート (targetSystem: windows を使用) は、Windows ノード上にのみ Agent をデプロイし、最初の Helm チャートの一部としてデプロイされた既存の Cluster Agent に接続します。

Windows ノードにデプロイされた Agent と Cluster Agent 間の通信を構成するには、次の datadog-values.yaml ファイルを使用してください。

targetSystem: windows
existingClusterAgent:
  join: true
  serviceName: "<EXISTING_DCA_SECRET_NAME>" # from the first Datadog Helm chart
  tokenSecretName: "<EXISTING_DCA_SERVICE_NAME>" # from the first Datadog Helm chart

# Disable datadogMetrics deployment since it should have been already deployed with the first chart.
datadog-crds:
  crds:
    datadogMetrics: false
# Disable kube-state-metrics deployment
datadog:
  kubeStateMetricsEnabled: false

詳細については、Windows コンテナの問題のトラブルシューティング を参照してください。

AWS マネージドサービスの監視

Amazon Managed Streaming for Apache Kafka (MSK)、ElastiCache、Relational Database Service (RDS) などの AWS マネージドサービスを監視するには、Helm チャートで clusterChecksRunner を設定し、serviceAccountAnnotation を通じて IAM ロールが割り当てられた Pod を作成します。次に、clusterAgent.confd の下にインテグレーションの設定を行います。

datadog-values.yaml

clusterChecksRunner:
  enabled: true
  rbac:
    # clusterChecksRunner.rbac.create -- If true, create & use RBAC resources
    create: true
    dedicated: true
    serviceAccountAnnotations:
      eks.amazonaws.com/role-arn: arn:aws:iam::***************:role/ROLE-NAME-WITH-MSK-READONLY-POLICY
clusterAgent:
  confd:
    amazon_msk.yaml: |-
      cluster_check: true
      instances:
        - cluster_arn: arn:aws:kafka:us-west-2:*************:cluster/gen-kafka/*******-8e12-4fde-a5ce-******-3
          region_name: us-west-2

詳細情報