プロキシ配下からDatadogにPrometheusのデータを送信する
やりたいこと
ローカルのPrometheusのデータをDatadogに送信させたい。
状況設定
下記の状況を想定して実施する。
- DataDogに接続するためには、プロキシを経由する必要がある。
- 送信先のDataDogアカウントは、複数のインフラチームが利用しており、余計なメトリクス等の送信は控える。
- Dockerコンテナ環境で実施する。
- Prometheusはプライベート証明書によるHTTPS接続になる。
Prometheus Integration
DataDogとPrometheusのIntegration1の手順を説明する。
Integrationをインストール
[Integrations] → [Integrations] → [Prometheus] → [Install] の順でDatadog上でPrometheus連携を有効化する。
DataDog API Keyの取得
[Integrations] → [APIs] → [API Keys] → [New API Key] の順で、新規にDataDog API Keyを発行する。
DataDog Agentのインストール
docker-composeを利用してインストールする。
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
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
を*
に設定する。
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のデータが送信されていることがわかる。
不明点
カスタムメトリクスの料金5についてちょっと調べてみた。
カスタムメトリクスは、Pro Plan($15/1host*month)では 100metrics/1host というサービス上限が存在する。今回は、DataDogの無料トライアルを利用し、1hostのみ使用した。ドキュメントの通り読むと、カスタムメトリクスは100metricsが最大なのだが、上記のキャプチャーをみると、メトリクス数が1046 となっている…。
これはどういうことだろう…。
無料トライアルだと青天井なのかな…?
参考資料
参考になったサイト。
- prometheusのmetricsをdatadogに送る
- Agent 環境変数
-
DataDog Prometheus
このインテグレーションによって取得されたメトリクスはすべて、カスタムメトリクスと見なされます。
↩
Author And Source
この問題について(プロキシ配下からDatadogにPrometheusのデータを送信する), 我々は、より多くの情報をここで見つけました https://qiita.com/shinmai88/items/dd6849b17f4a2e6c7e2e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .