tjinjin's blog

インフラ要素多めの個人メモ

prometheusのmetricsをdatadogに送る

About

prometheusで取得したmetricsをdatadogで取得してみます。

そもそも公式のpluginがある

datadogのpluginの中にprometheusからデータを取得するものが用意されています。

docs.datadoghq.com

init_config:

instances:
  - prometheus_url: 'localhost:<PROMETHEUS_PORT>/<PROMETHEUS_ENDPOINT>'
    namespace: '<METRICS_NAMESPACE_PREFIX_FOR_DATADOG>'
    metrics:
      - '<PROMETHEUS_METRIC_TO_FETCH>: <DATADOG_NEW_METRIC_NAME>'

prometheus形式?のデータを取得できるので、exporterのendpointを指定することでexporterのmetricsをdatadogで見ることが可能です。

FEDERATION を使う

prometheusで用意されているfederate エンドポイントを利用します。これを利用することで、prometheusに溜まっているデータをdatadogに送ることができるようになります。メトリクスの保存をdatadogに任せられるので便利ですね。

federate エンドポイントをcurlで叩くには下記のようにします。

$ curl http://10.251.1.185:9090/federate -G --data-urlencode 'match[]={job="node.*"}'

注意点としてbodyをurlencodeする必要があります。prometheusのintegrationは基本的に/metricsを叩くことを想定しているように見受けられたので、このあたりをうまくやるためにnginxを導入します。

server {
        server_name test;
        listen 8080;

        location /metrics {
                # federateに書き換え
                rewrite ^/metrics$ /federate?match[]=%7Bjob%21%3D%22%22%7D break;
                proxy_pass http://192.168.1.1:9090;
        }
}

上記のようにすると/metricsへのリクエストが/federateに変換できます。

datadog -> nginx -> prometheusというように通信させることで、うまい具合にmetricsが取得可能になります。

注意点

prometheusのintegrationで取得したメトリクスはすべて、custom metricsの扱いになるようです。

f:id:cross_black777:20191016223709p:plain
integrationの設定

datadogのpricingではplanによって、1ホストあたり100-200のcustom metricsのみ扱えるというようになっています。超えた場合は要相談のようです。

prometheus integrationの設定のなかにmax_returned_metricsの設定があり、これを変更することでdatadogに送るmetricsを制限できます。制限を超えたメトリクスは送られないのでどのくらいまでcustom metricsを使えるかを検討した上で取得するmetricsを決める必要がありそうです。

参考