LoginSignup
0
0

More than 3 years have passed since last update.

プロキシ配下からDatadogにPrometheusのデータを送信する

Last updated at Posted at 2020-09-13

やりたいこと

ローカルのPrometheusのデータをDatadogに送信させたい。

状況設定

下記の状況を想定して実施する。
- DataDogに接続するためには、プロキシを経由する必要がある。
- 送信先のDataDogアカウントは、複数のインフラチームが利用しており、余計なメトリクス等の送信は控える。
- Dockerコンテナ環境で実施する。
- Prometheusはプライベート証明書によるHTTPS接続になる。

Prometheus Integration

DataDogとPrometheusのIntegration1の手順を説明する。

Integrationをインストール

[Integrations] → [Integrations] → [Prometheus] → [Install] の順でDatadog上でPrometheus連携を有効化する。
image.png

DataDog API Keyの取得

[Integrations] → [APIs] → [API Keys] → [New API Key] の順で、新規にDataDog API Keyを発行する。

image.png

DataDog Agentのインストール

docker-composeを利用してインストールする。

docker-compose.yml
version: '3.3'
services:
    agent:
        image: 'datadog/agent:7'
        container_name: dd-agent
        restart: always
        volumes:
            - '/var/run/docker.sock:/var/run/docker.sock:ro'
            # 余計なメトリクスを送信しないように、デフォルトのvolumeオプションをコメントアウトした
            # - '/proc/:/host/proc/:ro'
            # - '/sys/fs/cgroup/:/host/sys/fs/cgroup:ro'
            - './prometheus.d:/etc/datadog-agent/conf.d/prometheus.d' # Prometheus連携用設定ファイルをホストからマウントさせる
        environment:
            - DD_API_KEY=$DD_API_KEY
            - DD_SITE=$DD_SITE
            - DD_HOSTNAME=$DD_HOSTNAME # デフォルトではDataDog agentが自動で設定するが、docker版agentの場合はOSのhostnameが取得できない可能性があるため、手動で設定した
            - DD_PROXY_HTTP=$DD_PROXY_HTTP
            - DD_PROXY_HTTPS=$DD_PROXY_HTTPS
            - DD_PROXY_NO_PROXY=$DD_PROXY_NO_PROXY
.env
DD_API_KEY=YOUR_DD_API_KEY
DD_SITE=datadoghq.com
DD_HOSTNAME=YOUR_DD_HOST_NAME
DD_PROXY_HTTP=YOUR_PROXY_URL
DD_PROXY_HTTPS=YOUR_PROXY_URL
DD_PROXY_NO_PROXY="localhost,127.0.0.1,YOUR_PROMETHEUS_FQDN" # Prometheusに接続する場合はプロキシを経由する必要がないため、NO_PROXYに設定した

DataDog agentのPrometheus連携設定2は下記のように設定した。
namespaceはDataDog上のメトリクス名のプレフィックスで使用される。チーム固有の自明なnamespaceを設定するといいと思う。
取得できるメトリクス数の上限はデフォルトで2000に限定されているため、必要に応じてmax_returned_metricsを設定し、上限を調整する。
取得したメトリクスは全て使用する場合はmetrics*に設定する。

./prometheus.d/conf.yaml
init_config:

instances:
  - prometheus_url: 'https://YOUR_PROMETHEUS_FQDN/federate?match[]=%7Bjob%3D~%22.%2B%22%7D'
    namespace: 'YOUR_NAMESPACE'
    metrics:
      - '*'
    ssl_ca_cert: false # プライベート証明書のため、SSL検証を無効化する。本来であれば、プライベート証明書を発行したCAのルート証明書を指定することが望ましい。
    max_returned_metrics: 20000

prometheus_urlについて補足します。
DataDogにPrometheusのメトリクスデータを送信する際、DataDog agentはPrometheusのFederation3エンドポイントを利用します。
このFederationエンドポイントは、取得したいPrometheusのメトリクスのラベルを、クエリパラメータで指定します。PromQLを利用するため、正規表現が使用できます。クエリパラメータで渡すため、URLエンコーディングでエンコードした値を使用する必要があります4

エンコード前 エンコード後
{job=~".+"} %7Bjob%3D~%22.%2B%22%7D

DataDog Agentの起動

agentを起動させる。

docker-compose up -d

DataDog上で確認

[Metrics] → [Summary]から検索メニューでYOUR_NAMESPACEで検索してみると、DataDogにカスタムメトリクスとしてPrometheusのデータが送信されていることがわかる。

image.png

不明点

カスタムメトリクスの料金5についてちょっと調べてみた。
カスタムメトリクスは、Pro Plan($15/1host*month)では 100metrics/1host というサービス上限が存在する。今回は、DataDogの無料トライアルを利用し、1hostのみ使用した。ドキュメントの通り読むと、カスタムメトリクスは100metricsが最大なのだが、上記のキャプチャーをみると、メトリクス数が1046 となっている…。
これはどういうことだろう…。
無料トライアルだと青天井なのかな…?

参考資料

参考になったサイト。
- prometheusのmetricsをdatadogに送る
- Agent 環境変数


  1. DataDog Prometheus このインテグレーションによって取得されたメトリクスはすべて、カスタムメトリクスと見なされます。 

  2. GitHub DataDog Agent Prometheus Configuration Example 

  3. Prometheus Federation 

  4. Federated Prometheus URLs aren't working #6091 

  5. カスタムメトリクスの課金 

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0