読者です 読者をやめる 読者になる 読者になる

vague memory

うろ覚えを無くしていこうともがき苦しむ人の備忘録

Datadog からデータ出力を試してみる

Datadog

モニタリングクラウドサービス Datadog からメトリクス(データ)を取得して、テキスト出力をしてみます。 値の一覧を見る画面は用意されていませんのでAPIを使用します。

シェルスクリプト(sh)での例文が出ているのでそちらを使用します。その他にPython,Rubyのリファレンスが記載されています。

Application/API Key の取得

メニューからAPIsをクリック→API発行画面でApplicationKeyを発行できます。

f:id:htnosm:20150924015840p:plain f:id:htnosm:20150924015849p:plain

クエリストリングの取得

データ取得用のqueryが必要になるので、既存グラフから拝借します。 今回はDatadogAgentで取得できるnginxのrequest_per_sの値を取得します。

f:id:htnosm:20150924020234p:plain

グラフのJSONの"q"部分をパラメータとして使用します。

      "q": "max:nginx.net.request_per_s{example} by {name}",

データ値一覧の取得

Referenceページの QUERY TIME SERIES POINTS を使用します。

  • from/to はUNIXTIMEで指定
  • queryにJSONから取得した"q"の内容(半角スペースを除外)を指定
#!/bin/sh

api_key=取得したAPIキー
app_key=取得したアプリケーションキー
to_time=$(date +%s) # UNIXTIME指定
from_time=$(date -v -20M +%s) # UNIXTIME指定

curl -G \
    "https://app.datadoghq.com/api/v1/query" \
    -d "api_key=${api_key}" \
    -d "application_key=${app_key}" \
    -d "from=${from_time}" \
    -d "to=${to_time}" \
    -d "query=max:nginx.net.request_per_s{example}by{name}"
  • 出力例

日時と値がタイムスタンプ(UNIXTIME)順に出力されます。

{"status": "ok", "res_type": "time_series", "series": [{"metric": "nginx.net.request_per_s", "attributes": {}, "display_name": "nginx.net.request_per_s", "unit": [null, null], "pointlist": [[1442528400000.0, 0.21052631735801697], [1442528410000.0, 0.21052631735801697],
・・・略・・・
[1442529580000.0, 23.615476608276367], [1442529590000.0, 22.850000381469727]], "end": 1442529599000, "interval": 10, "start": 1442528400000, "length": 120, "aggr": "max", "scope": "name:sververXX,example", "expression": "max:nginx.net.request_per_s{name:sververXX, example}"}], "from_date": 1442528400000, "group_by": ["name"], "to_date": 1442529600000, "query": "max:nginx.net.request_per_s{example}by{name}", "message": ""}

データ値一覧の取得(csv変換)

jqでcsv形式に変換し、時系列に並べます。上記の結果をoutput.jsonへ出力した前提です。

jq -r '.series[] | { scope: .scope ,pointlist: .pointlist[] } | [.scope ,.pointlist[0] ,.pointlist[1]] | @csv' output.json | sort -t ',' -k 1,3

うーん・・・美しくない・・・。

  • 出力例
"name:sververXX,example",1442528400000,0.21052631735801697
"name:sververXX,example",1442528410000,0.21052631735801697
"name:sververXX,example",1442528420000,0.21052631735801697
"name:sververXX,example",1442528430000,0.1875
・・・略・・・
"name:sververXX,example",1442529570000,24.380952835083008
"name:sververXX,example",1442529580000,23.615476608276367

きっと便利なツールなどが既に公開されていたりするのでしょうが、 環境を選ばないのでシェルスクリプトでの出力をとりあえず試してみました。