Synthetic テストをプライベートロケーションから実行する

Windows プライベートロケーションベータ版への追加をご希望の場合は、Datadog サポートにご連絡ください。

概要

プライベートロケーションから、内部用アプリケーションの監視や、パブリックインターネットから接続できないプライベートエンドポイントの監視を行えます。これは以下にも使用できます。

  • ビジネスでミッションクリティカルな領域に、カスタム Synthetic ロケーションを作成します
  • Continuous Testing および CI/CD を使用して本番環境に新機能をリリースする前に、内部 CI 環境でアプリケーションパフォーマンスを確認します
  • 内部ネットワークの内外両方からアプリケーションのパフォーマンスを比較します

プライベートロケーションは、プライベートネットワーク内のどこにでもインストールできる Docker コンテナとして提供されます。作成してインストールしたら、通常の管理ロケーションと同じように、Synthetic テストをプライベートロケーションに割り当てることができます。

プライベートロケーションワーカーは、HTTPS を使用してテストコンフィギュレーションを Datadog のサーバーからプルし、スケジュールまたはオンデマンドでテストを実行して、テスト結果を Datadog のサーバーに返します。次に、管理ロケーションから実行されているテストを視覚化する方法とまったく同じ方法で、プライベートロケーションのテスト結果を視覚化できます。

Synthetic テストのプライベートロケーションへの割り当て

前提条件

Docker

プライベートロケーションは、プライベートネットワーク内のどこにでも設置できる Docker コンテナです。プライベートロケーションのワーカーイメージ]3には、Google Container Registry からアクセスできます。ホスト上に Dockerエンジンがあり、Linux コンテナモードで動作可能であれば、Linux ベースの OS や Windows OS 上で動作させることができます。

Datadog プライベートロケーションエンドポイント

テストコンフィギュレーションを取得してテスト結果を送信するには、プライベートロケーションのワーカーが以下の Datadog API エンドポイントにアクセスする必要があります。

ポートエンドポイント説明
443バージョン 0.1.6 以降の場合は intake.synthetics.datadoghq.com、バージョン 0.1.5 以前の場合は api.datadoghq.comAWS Signature Version 4 プロトコルに基づく社内プロトコルを使用して、テストコンフィギュレーションをプルし、テスト結果を Datadog にプッシュするためにプライベートロケーションで使用されます。
443バージョン 0.2.0 以降、1.4.0 以下は intake-v2.synthetics.datadoghq.comブラウザのテストアーティファクト (スクリーンショット、エラー、リソースなど) をプッシュするためにプライベートロケーションで使用されます。

ポートエンドポイント説明
443バージョン >=1.11.0 の場合は intake.synthetics.datadoghq.eu、バージョン <=1.10.0 の場合は api.datadoghq.euAWS Signature Version 4 プロトコルに基づく社内プロトコルを使用して、テストコンフィギュレーションをプルし、テスト結果を Datadog にプッシュするためにプライベートロケーションで使用されます。
443バージョン 0.2.0 以降、1.5.0 以下は intake-v2.synthetics.datadoghq.euブラウザのテストアーティファクト(スクリーンショット、エラー、リソース)をプッシュするためにプライベートロケーションで使用されます。

: これらのドメインは、静的 IP アドレスのセットを指しています。これらのアドレスは、https://ip-ranges.datadoghq.eu、具体的には https://ip-ranges.datadoghq.eu/api.json (api.datadoghq.eu の場合) および https://ip-ranges.datadoghq.eu/synthetics-private-locations.json (intake-v2.synthetics.datadoghq.eu の場合) にあります。

ポートエンドポイント説明
443intake.synthetics.us3.datadoghq.comAWS Signature Version 4 プロトコルに基づく社内プロトコルを使用して、テストコンフィギュレーションをプルし、テスト結果を Datadog にプッシュするためにプライベートロケーションで使用されます。

ポートエンドポイント説明
443intake.synthetics.us5.datadoghq.comAWS Signature Version 4 プロトコルに基づく社内プロトコルを使用して、テストコンフィギュレーションをプルし、テスト結果を Datadog にプッシュするためにプライベートロケーションで使用されます。

ポートエンドポイント説明
443intake.synthetics.ddog-gov.comAWS Signature Version 4 プロトコルに基づく社内プロトコルを使用して、テストコンフィギュレーションをプルし、テスト結果を Datadog にプッシュするためにプライベートロケーションで使用されます。

プライベートロケーションを設定する

プライベートロケーションは、Admin ロールを持つユーザーのみが作成できます。詳しくは、権限を参照してください。

プライベートロケーションを作成する

Synthetic Monitoring > Settings > Private Locations に移動し、Add Private Location をクリックします。

プライベートロケーションを作成する

プライベートロケーションの詳細を入力します。

  1. プライベートロケーションの名前および説明を指定します。
  2. プライベートロケーションに関連づけたいタグを追加します。Windows でプライベートロケーションを構成する場合は、This is a Windows Private Location を選択します。
  3. 既存の API キーを 1 つ選択します。API キーを選択すると、プライベートロケーションと Datadog 間の通信が可能になります。既存の API キーがない場合は、Generate API key をクリックして専用ページで作成します。NameAPI key フィールドのみが必須です。
  4. プライベートロケーションのアクセス権を設定し、Save Location and Generate Configuration File をクリックします。Datadog はプライベートロケーションを作成し、関連するコンフィギュレーションファイルを生成します。
プライベートロケーションに詳細を追加する

プライベートロケーションを構成する

生成されたコンフィギュレーションファイルをカスタマイズして、プライベートロケーションを構成します。ステップ 3プロキシ予約 IP のブロックなどの初期構成パラメーターを追加すると、ステップ 4 で生成したコンフィギュレーションファイルは自動的に更新されます。

内部ネットワークの設定によっては、詳細オプションでプライベートロケーションを構成することができます。

プロキシのコンフィギュレーション

プライベートロケーションと Datadog 間のトラフィックがプロキシを経由する必要がある場合は、http://<YOUR_USER>:<YOUR_PWD>@<YOUR_IP>:<YOUR_PORT> の形式でプロキシ URL を指定し、生成されたコンフィギュレーションファイルに proxyDatadog パラメーターを追加します。

Add a proxy to your private location configuration file

高度なプロキシコンフィギュレーションオプションが利用可能です。

予約済み IP のブロック

デフォルトでは、Synthetic ユーザーは任意の IP を使用してエンドポイントで Synthetic テストを作成できます。ユーザーがネットワーク内の機密性の高い内部 IP でテストを作成できないようにする場合は、Block reserved IPs ボタンを切り替えて、予約済み IP 範囲のデフォルトセット (IPv4 アドレスレジストリおよび IPv6 アドレスレジストリ) をブロックし、生成されたコンフィギュレーションファイルで関連する enableDefaultBlockedIpRanges パラメーターを true に設定します。

テストするエンドポイントの一部がブロックされた予約済み IP 範囲の 1 つまたは複数にある場合は、その IP または CIDR、あるいはその両方を許可リストに追加して、生成されたコンフィギュレーションファイルに関連する allowedIPRanges パラメーターを追加できます。

予約済み IP を構成する

高度な予約済み IP コンフィギュレーションオプションが利用可能です。

高度なコンフィギュレーション

高度なコンフィギュレーションオプションが利用可能です。以下の help コマンドを実行することで確認できます。

docker run --rm datadog/synthetics-private-location-worker --help

コンフィギュレーションファイルを表示する

プライベートロケーションのコンフィギュレーションファイルに適切なオプションを追加した後、このファイルを作業ディレクトリにコピーアンドペーストしてください。このコンフィギュレーションファイルには、プライベートロケーションの認証、テスト構成の復号化、およびテスト結果の暗号化のためのシークレットが含まれています。

予約済み IP を構成する

Datadog はシークレットを保存しないので、View Installation Instructions をクリックする前に、ローカルに保存してください。

注: ワーカーをさらに追加する場合、または、他のホストにワーカーをインストールする場合は、これらの秘密情報を再度参照できる必要があります。

プライベートロケーションをインストールする

タスクの定義では、環境変数 DATADOG_API_KEYDATADOG_ACCESS_KEYDATADOG_SECRET_ACCESS_KEYDATADOG_PUBLIC_KEY_PEMDATADOG_PRIVATE_KEY を使用することが可能です。

次でプライベートロケーションを起動します。

次のコマンドを実行して、コンフィギュレーションファイルをコンテナにマウントすることでプライベートロケーションワーカーを起動します。<MY_WORKER_CONFIG_FILE_NAME>.json ファイルはルートホームフォルダーではなく /etc/docker 内に格納してください。

docker run --rm -v $PWD/<MY_WORKER_CONFIG_FILE_NAME>.json:/etc/datadog/synthetics-check-runner.json datadog/synthetics-private-location-worker:latest

注: 予約済み IP をブロックした場合は、プライベートロケーションコンテナに NET_ADMIN Linux 機能を追加してください。

このコマンドは、Docker コンテナを起動し、プライベートロケーションでテストを実行できるようにします。Datadog は、適切な再起動ポリシーを使用して、コンテナをデタッチモードで実行することをお勧めします。

  1. 次で docker-compose.yml ファイルを作成します。

    version: "3"
    services:
        synthetics-private-location-worker:
            image: datadog/synthetics-private-location-worker:latest
            volumes:
                - PATH_TO_PRIVATE_LOCATION_CONFIG_FILE:/etc/datadog/synthetics-check-runner.json
    

    注: 予約済み IP をブロックした場合は、プライベートロケーションコンテナに NET_ADMIN Linux 機能を追加してください。

  2. 次でコンテナを起動します。

    docker-compose -f docker-compose.yml up
    

プライベートロケーションワーカーを安全にデプロイするために、コンテナ内の /etc/datadog/synthetics-check-runner.json 以下に Kubernetes Secret リソースを設定しマウントしてください。

  1. 以下を実行し、以前に作成した JSON ファイルで Kubernetes Secret を作成します。

    kubectl create secret generic private-location-worker-config --from-file=<MY_WORKER_CONFIG_FILE_NAME>.json
    
  2. デプロイを使用して、プライベートロケーションに関連付けられている望ましい状態を記述します。次の private-location-worker-deployment.yaml ファイルを作成します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: datadog-private-location-worker
      namespace: default
    spec:
      selector:
        matchLabels:
          app: private-location
      template:
        metadata:
          name: datadog-private-location-worker
          labels:
            app: private-location
        spec:
          containers:
          - name: datadog-private-location-worker
            image: datadog/synthetics-private-location-worker
            volumeMounts:
            - mountPath: /etc/datadog/synthetics-check-runner.json
              name: worker-config
              subPath: <MY_WORKER_CONFIG_FILE_NAME>
          volumes:
          - name: worker-config
            secret:
              secretName: private-location-worker-config
    

    注: 予約済み IP をブロックした場合は、プライベートロケーションコンテナに NET_ADMIN Linux 機能を追加してください。

  3. コンフィギュレーションを適用します。

    kubectl apply -f private-location-worker-deployment.yaml
    

OpenShift の場合、プライベートロケーションを anyuid SCC で実行します。これは、ブラウザテストを実行するために必要です。

構成パラメーターに、すでに構成されているシークレットを指す環境変数を設定することができます。シークレットを指定した環境変数を作成するには、Kubernetes のドキュメントを参照してください。

あるいは

  1. Datadog Synthetics Private Location を Helm リポジトリに追加します。

    helm repo add datadog https://helm.datadoghq.com 
    helm repo update
    
  2. 先に作成した JSON ファイルを使って、リリース名 <RELEASE_NAME> のチャートをインストールします。

    helm install <RELEASE_NAME> datadog/synthetics-private-location --set-file configFile=<MY_WORKER_CONFIG_FILE_NAME>.json
    

注: 予約済み IP をブロックした場合は、プライベートロケーションコンテナに NET_ADMIN Linux 機能を追加してください。

以下に一致する EC2 タスクの定義を新規に作成します。各パラメーターを、以前に生成したプライベートロケーションのコンフィギュレーションファイルにある対応する値に置き換えてください。

{
    ...
    "containerDefinitions": [
        {
            "command": [
                "--site='...'",
                "--locationID='...'",
                "--accessKey='...'",
                "--datadogApiKey='...'",
                "--secretAccessKey='...'",
                "--privateKey='-----BEGIN RSA PRIVATE KEY-----XXXXXXXX-----END RSA PRIVATE KEY-----'",
                "--publicKey.pem='-----BEGIN PUBLIC KEY-----XXXXXXXX-----END PUBLIC KEY-----'",
                "--publicKey.fingerprint='...'"
            ],
            ...
            "image": "datadog/synthetics-private-location-worker:latest",
            ...
        }
    ],
    ...
    "compatibilities": [
        "EC2"
    ],
    ...
}

注: 予約済み IP をブロックした場合は、linuxParameters を構成して、プライベートロケーションコンテナに NET_ADMIN 機能を付与してください。

以下に一致する Fargate タスクの定義を新規に作成します。各パラメーターを、以前に生成したプライベートロケーションのコンフィギュレーションファイルにある対応する値に置き換えてください。

{
    ...
    "containerDefinitions": [
        {
            "command": [
                "--site='...'",
                "--locationID='...'",
                "--accessKey='...'",
                "--datadogApiKey='...'",
                "--secretAccessKey='...'",
                "--privateKey='-----BEGIN RSA PRIVATE KEY-----XXXXXXXX-----END RSA PRIVATE KEY-----'",
                "--publicKey.pem='-----BEGIN PUBLIC KEY-----XXXXXXXX-----END PUBLIC KEY-----'",
                "--publicKey.fingerprint='...'"
            ],
            ...
            "image": "datadog/synthetics-private-location-worker:latest",
            ...
        }
    ],
    ...
    "compatibilities": [
        "EC2",
        "FARGATE"
    ],
    ...
}

注: プライベートロケーションファイアウォールオプションは AWS Fargate ではサポートされていないため、enableDefaultBlockedIpRanges パラメーターは true に設定できません。

Datadog は既に Kubernetes および AWS と統合されているため、すぐに EKS を監視することができます。

  1. 以下を実行し、以前に作成した JSON ファイルで Kubernetes Secret を作成します。

    kubectl create secret generic private-location-worker-config --from-file=<MY_WORKER_CONFIG_FILE_NAME>.json
    
  2. デプロイを使用して、プライベートロケーションに関連付けられている望ましい状態を記述します。次の private-location-worker-deployment.yaml ファイルを作成します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: datadog-private-location-worker
      namespace: default
    spec:
      selector:
        matchLabels:
          app: private-location
      template:
        metadata:
          name: datadog-private-location-worker
          labels:
            app: private-location
        spec:
          containers:
          - name: datadog-private-location-worker
            image: datadog/synthetics-private-location-worker
            volumeMounts:
            - mountPath: /etc/datadog/synthetics-check-runner.json
              name: worker-config
              subPath: <MY_WORKER_CONFIG_FILE_NAME>
          volumes:
          - name: worker-config
            configMap:
              name: private-location-worker-config
    

    注: 予約済み IP をブロックした場合は、セキュリティコンテキストを構成して、プライベートロケーションコンテナに NET_ADMIN Linux 機能を追加してください。

  3. コンフィギュレーションを適用します。

    kubectl apply -f private-location-worker-deployment.yaml
    

ライブネスプローブとレディネスプローブのセットアップ

オーケストレーターがワーカーが正しく動作していることを確認できるように、ライブネスプローブまたはレディネスプローブを追加します。

レディネスプローブの場合、プライベートロケーションデプロイメントでポート 8080 のプライベートロケーションステータスプローブを有効にする必要があります。詳細については、高度な構成を参照してください。

healthcheck:
  retries: 3
  test: [
    "CMD", "wget", "-O", "/dev/null", "-q", "http://localhost:8080/liveness"
  ]
  timeout: 2s
  interval: 10s
  start_period: 30s
livenessProbe:
  httpGet:
    path: /liveness
    port: 8080
  initialDelaySeconds: 30
  periodSeconds: 10
  timeoutSeconds: 2
readinessProbe:
  initialDelaySeconds: 30
  periodSeconds: 10
  timeoutSeconds: 2
  httpGet:
    path: /readiness
    port: 8080
livenessProbe:
  httpGet:
    path: /liveness
    port: 8080
  initialDelaySeconds: 30
  periodSeconds: 10
  timeoutSeconds: 2
readinessProbe:
  initialDelaySeconds: 30
  periodSeconds: 10
  timeoutSeconds: 2
  httpGet:
    path: /readiness
    port: 8080
"healthCheck": {
  "retries": 3,
  "command": [
    "CMD-SHELL", "/usr/bin/wget", "-O", "/dev/null", "-q", "http://localhost:8080/liveness"
  ],
  "timeout": 2,
  "interval": 10,
  "startPeriod": 30
}
"healthCheck": {
  "retries": 3,
  "command": [
    "CMD-SHELL", "wget -O /dev/null -q http://localhost:8080/liveness || exit 1"
  ],
  "timeout": 2,
  "interval": 10,
  "startPeriod": 30
}
livenessProbe:
  httpGet:
    path: /liveness
    port: 8080
  initialDelaySeconds: 30
  periodSeconds: 10
  timeoutSeconds: 2
readinessProbe:
  initialDelaySeconds: 30
  periodSeconds: 10
  timeoutSeconds: 2
  httpGet:
    path: /readiness
    port: 8080

ヘルスチェックの追加構成

プライベートロケーションのヘルスチェックを追加するこの方法は、サポートされなくなりました。Datadog では、ライブネスプローブとレディネスプローブを使用することを推奨しています。

プライベートロケーションコンテナの /tmp/liveness.date ファイルは、Datadog から正常にポーリングされるごとに更新されます (デフォルトでは 2 秒)。例えば過去1分間にフェッチされないなど一定期間ポーリングが行われないと、コンテナは異常だとみなされます。

以下のコンフィギュレーションを使い、livenessProbe でコンテナにヘルスチェックを設定します。

healthcheck:
  retries: 3
  test: [
    "CMD", "/bin/sh", "-c", "'[ $$(expr $$(cat /tmp/liveness.date) + 300000) -gt $$(date +%s%3N) ]'"
  ]
  timeout: 2s
  interval: 10s
  start_period: 30s
livenessProbe:
  exec:
    command:
      - /bin/sh
      - -c
      - '[ $(expr $(cat /tmp/liveness.date) + 300000) -gt $(date +%s%3N) ]'
  initialDelaySeconds: 30
  periodSeconds: 10
  timeoutSeconds: 2
  failureThreshold: 3
livenessProbe:
  exec:
    command:
      - /bin/sh
      - -c
      - '[ $(expr $(cat /tmp/liveness.date) + 300000) -gt $(date +%s%3N) ]'
  initialDelaySeconds: 30
  periodSeconds: 10
  timeoutSeconds: 2
  failureThreshold: 3
"healthCheck": {
  "retries": 3,
  "command": [
    "CMD-SHELL", "/bin/sh -c '[ $(expr $(cat /tmp/liveness.date) + 300000) -gt $(date +%s%3N) ]'"
  ],
  "timeout": 2,
  "interval": 10,
  "startPeriod": 30
}
"healthCheck": {
  "retries": 3,
  "command": [
    "CMD-SHELL", "/bin/sh -c '[ $(expr $(cat /tmp/liveness.date) + 300000) -gt $(date +%s%3N) ]'"
  ],
  "timeout": 2,
  "interval": 10,
  "startPeriod": 30
}
livenessProbe:
  exec:
    command:
      - /bin/sh
      - -c
      - '[ $(expr $(cat /tmp/liveness.date) + 300000) -gt $(date +%s%3N) ]'
  initialDelaySeconds: 30
  periodSeconds: 10
  timeoutSeconds: 2
  failureThreshold: 3

内部エンドポイントをテストする

1 つ以上のプライベートロケーションコンテナが Datadog にレポートを開始すると、プライベートロケーションステータスが緑に表示されます。

プライベートロケーションのレポート

また、Settings ページの Private Locations リストに表示される REPORTING ヘルスステータスを見ることができます。

プライベートロケーションのヘルス

内部エンドポイントの 1 つで速度テストを起動して最初の内部エンドポイントのテストを開始し、期待される応答が得られるかどうかを確認します。

注: Datadog はプライベートロケーションからアウトバウンドトラフィックのみを送信し、インバウンドトラフィックは送信されません。

Synthetic テストをプライベートロケーションから起動する

API、マルチステップ API、またはブラウザテストを作成し、関心のあるプライベートロケーションを選択します。

Synthetics テストのプライベートロケーションへの割り当て

プライベートロケーションは、Datadog が管理するロケーションと同様に使用できます。プライベートロケーションに Synthetic テストを割り当て、テスト結果を視覚化し、Synthetic メトリクスを取得するなど、様々なことが可能です。

プライベートロケーションのサイズ変更

1 つのプライベートロケーションに単一のコンフィギュレーションファイルで複数のコンテナを実行できるため、ワーカーを追加または削除することでプライベートロケーションを水平スケーリングできます。このとき、concurrency パラメーターを必ず設定し、プライベートロケーションで実行するテストのタイプおよび数と一致するワーカーリソースを割り当てます。

プライベートロケーションコンテナが取り扱うことのできるロードを増加してプライベートロケーションを垂直にスケーリングすることもできます。同様に、concurrency パラメーターを使用して、ワーカーが実行できるテストの最大数を調整し、ワーカーに割り当てられたリソースを必ず更新してください。

詳しくは、プライベートロケーションのディメンションを参照してください。

プライベートロケーションを Continuous Testing に使用するには、concurrency パラメーターに値を設定し、並列化を制御してください。詳しくは、Continuous Testing を参照してください。

プライベートロケーションを監視する

最初はプライベートロケーションから実行するテストの数と種類に見合ったリソースを追加しますが、プライベートロケーションの規模を縮小すべきか拡大すべきかを知る最も簡単な方法は、厳密にモニターすることです。プライベートロケーションモニタリングは、すぐに使えるメトリクスやモニターと同様に、プライベートロケーションのパフォーマンスや状態に関する洞察を提供します。

詳しくは、プライベートロケーションモニタリングを参照してください。

アクセス許可

デフォルトでは、Datadog Admin ロールを持つユーザーのみが、プライベートロケーションの作成、プライベートロケーションの削除、プライベートロケーションのインストールガイドラインにアクセスすることができます。

Datadog Admin ロールおよび Datadog Standard ロール]20を持つユーザーは、プライベートロケーションの表示、プライベートロケーションの検索、プライベートロケーションへの Synthetic テストの割り当てを行うことができます。ユーザーをこれら 2 つのデフォルト ロールのいずれかにアップグレードして、Private Locations ページへのアクセスを許可してください。

カスタムロール機能を使用している場合、ユーザーを synthetics_private_location_readsynthetics_private_location_write 権限を含むカスタムロールに追加してください。