prometheusのmetricsをdatadogに送る
About
prometheusで取得したmetricsをdatadogで取得してみます。
そもそも公式のpluginがある
datadogのpluginの中にprometheusからデータを取得するものが用意されています。
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の扱いになるようです。
datadogのpricingではplanによって、1ホストあたり100-200のcustom metricsのみ扱えるというようになっています。超えた場合は要相談のようです。
prometheus integrationの設定のなかにmax_returned_metrics
の設定があり、これを変更することでdatadogに送るmetricsを制限できます。制限を超えたメトリクスは送られないのでどのくらいまでcustom metricsを使えるかを検討した上で取得するmetricsを決める必要がありそうです。