現在、選択されたサイト () では CD Visibility は利用できません。

Argo CD 用の CD Visibility は非公開ベータ版です。アクセスをリクエストするには、フォームに記入してください。

Request Access

概要

Argo CD は、Kubernetes のための宣言型 GitOps 継続的デリバリー (CD) ツールです。GitOps パターンに従い、Git リポジトリを使用して望ましいアプリケーションの状態を定義し、指定した対象環境へのアプリケーションのデプロイを自動化します。

Datadog CD Visibility は、Argo CD Notifications を使用して Argo CD と統合されます。 Argo CD Notifications は、2 つの主要コンポーネントで構成されています。

  1. トリガー: 通知をいつ送信するかを定義します。
  2. テンプレート: 通知で_何を_送信するかを定義します。

セットアップ

Webhook を使って Argo CD Notifications をセットアップする方法については、 Argo CD 公式ガイドを参照してください。

最初のステップは、Datadog のインテーク URL と Datadog API キーを含むサービスを作成することです。

  1. Datadog API キーdd-api-key キーとしてargocd-notifications-secret シークレットに追加します。argocd-notifications-secret の変更については、Argo CD ガイドを参照してください。
  2. argocd-notifications-cm 構成マップに通知サービスを以下の形式で追加します。
apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-notifications-cm
data:
  service.webhook.cd-visibility-webhook: |
    url: https://webhook-intake./api/v2/webhook
    headers:
    - name: "DD-CD-PROVIDER-ARGOCD"
      value: "true"
    - name: "DD-API-KEY"
      value: $dd-api-key
    - name: "Content-Type"
      value: "application/json"    

cd-visibility-webhook は通知サービスの名前で、$dd-api-keyargocd-notifications-secret シークレットに格納された API キーを参照します。

2 番目のステップとして、同じ argocd-notifications-cm 構成マップにテンプレートを追加します。

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-notifications-cm
data:
  template.cd-visibility-template: |
    webhook:
      cd-visibility-webhook:
        method: POST
        body: |
            {
              "app": {{toJson .app}},
              "context": {{toJson .context}},
              "service_type": {{toJson .serviceType}},
              "recipient": {{toJson .recipient}},
              "commit_metadata": {{toJson (call .repo.GetCommitMetadata .app.status.operationState.syncResult.revision)}}
            }    
commit_metadata フィールドを入力するための呼び出しは必須ではありません。このフィールドは、ペイロードを Git の情報でリッチ化するために使用します。 Helm リポジトリを Argo CD アプリケーションのソースとして使用している場合は、この行と前の行のカンマを削除して本文を調整してください。

cd-visibility-template はテンプレート名で、cd-visibility-webhook は上記で作成したサービスを参照します。

3 番目のステップとして、同じ argocd-notifications-cm 構成マップにトリガーを追加します。

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-notifications-cm
data:
  trigger.cd-visibility-trigger: |
    - when: app.status.operationState.phase in ['Succeeded', 'Failed', 'Error', 'Running'] and app.status.health.status in ['Healthy', 'Degraded']
      send: [cd-visibility-template]    

cd-visibility-trigger はトリガー名で、cd-visibility-template は上記で作成したテンプレートを参照します。

通知サービス、トリガー、およびテンプレートが構成マップに追加されたら、インテグレーションに Argo CD アプリケーションをサブスクライブできます。 Argo CD UI を使用するか、以下のアノテーションでアプリケーション定義を変更することで、Argo CD アプリケーションのアノテーションを変更します。

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  annotations:
    notifications.argoproj.io/subscribe.cd-visibility-trigger.cd-visibility-webhook: ""
    dd_env: <YOUR_ENV>
    dd_service: <YOUR_SERVICE>

アノテーションは 3 つあります。

  1. notifications アノテーションは、上記で作成した通知セットアップに Argo CD アプリケーションをサブスクライブします。
  2. dd_env アノテーションはアプリケーションの環境を構成します。上記の YOUR_ENV を、 このアプリケーションがデプロイされている環境 (例: staging またはprod) で置き換えます。このアノテーションを設定しない場合、 環境はデフォルトで none になります。
  3. dd_service アノテーションはアプリケーションのサービスを構成します。上記の YOUR_SERVICE を、 Argo CD アプリケーションがデプロイしているサービス (例えば transaction-service) に置き換えます。このアノテーションを使用すると、 アプリケーションから生成されるすべてのデプロイメント実行にサービス名が追加されます。さらに、サービスが サービスカタログに登録されている場合、チーム名もすべてのデプロイメント実行に追加されます。Argo CD アプリケーションが 複数のサービスをデプロイするように構成されている場合は、複数のサービスをデプロイする Argo CD アプリケーションのタグ付けを参照してください。

アプリケーションのサブスクリプションの詳細については、Argo CD 公式ガイドを参照してください。

この最終ステップが完了したら、Datadog で Argo CD デプロイのモニタリングを開始できます。

デプロイメント実行にカスタムタグを追加する

Argo CD アプリケーションのデプロイメントから生成されたデプロイメント実行には、オプションでカスタムタグを追加できます。これらのタグは、Datadog でデプロイメント実行をフィルタリング、グループ化、集計するために使用できます。 カスタムタグを追加するには、dd_customtags アノテーションを Argo CD アプリケーションのアノテーションに追加し、key:value ペアとして構造化されたタグのカンマ区切りリストを値に設定します。例:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  annotations:
    notifications.argoproj.io/subscribe.cd-visibility-trigger.cd-visibility-webhook: ""
    dd_env: <YOUR_ENV>
    dd_customtags: "region:us1-east, team:backend"

複数のサービスをデプロイする Argo CD アプリケーションのタグ付け

Argo CD アプリケーションが複数のサービスをデプロイする場合、Datadog はアプリケーションの同期からデプロイされたサービスを自動的に推測することができます。Datadog は、変更された Kubernetes リソースに基づいてサービスを推測します。

サービスの自動タグ付けを有効にするには、Datadog Agent を使ってKubernetes インフラストラクチャーを監視する必要があります。また、Kubernetes リソースには次のラベルが必要です。

  • tags.datadoghq.com/service (必須): このリソースの Datadog サービスを指定します。詳しくは、統合サービスタグ付けを参照してください。
  • team (任意): このリソースの Datadog チームを指定します。このラベルが省略された場合、チームはサービスラベルに基づいてサービスカタログから自動的に取得されます。

次の種類の Kubernetes リソースのみが対象となります: DeploymentReplicaSetStatefulSetServiceDaemonSetPodJobCronJob

Argo CD アプリケーションに以下のアノテーションを追加します。

  • dd_multiservice: true。このアノテーションは、Datadog が、変更された Kubernetes リソースに基づいて、同期でデプロイされたサービスを自動的に推測するかどうかを指定します。
  • dd_k8s_cluster: Argo CD アプリケーションがデプロイする Kubernetes クラスターの名前を設定します。この名前は Datadog Kubernetes 製品で報告されている名前と一致する必要があります。

例:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  annotations:
    notifications.argoproj.io/subscribe.cd-visibility-trigger.cd-visibility-webhook: ""
    dd_env: <YOUR_ENV>
    dd_multiservice: true
    dd_k8s_cluster: example-cluster

Datadog でデプロイを視覚化する

デプロイが実行されると、DeploymentsExecutions のページにデータが入力されます。詳細については、検索と管理および CD Visibility Explorer を参照してください。

トラブルシューティング

通知が送信されない場合、argocd-notification-controller ポッドのログを調べます。コントローラーは、通知 (例: Sending notification ...) の送信時と、受信者への通知に失敗した際 (例: Failed to notify recipient ...) に、ログに書き込みます。その他のトラブルシューティングのシナリオについては、Argo CD の公式ドキュメントを参照してください。

参考資料