datadogにpython, DogStatsD経由でMetricsを送り込んでみる


はじめに

datadogとはSaaS形式のサーバの運用監視ツールです
監視対象の各種サーバから各メトリクスをdatadogに送ることにより、
ブラウザ上で様々な分析ができます。

datadogは、各サーバのリソースやアプリケーションの実行回数・TATをdatadogに送信してくれるエージェントを提供してくれていますが、今回この記事ではpythonで特定の値をdatadogに送信し続けるスクリプトを作ってみようと思います。

データベースの特定のテーブルのデータ量を送り続けるとか、シェルスクリプトの実行回数を送るなど、活用用途はいろいろ考えられると思います。

前提

python3を利用

Metricsを送り込むスクリプトの作成

DogStatsDサーバ経由でMetricsを送り込んでみます

datadogライブラリのインストール

pip3 install datadog

サンプルスクリプト

sample.py
import random
from datadog import initialize
from datadog import statsd

#   まずは初期化
options = {
    'statsd_host':'127.0.0.1',
    'statsd_port':8125
}

initialize(**options)

#   tagと値を作る
tags = ['version:1', 'application:web']
value=random.randint(0, 100)

#   metricのset
metric="myapp.testdata.set"
statsd.set(metric, value, tags=tags)
#   metricのgauge
metric="myapp.testdata.gauge"
statsd.gauge(metric, value, tags=tags)

解説

sample前半.py
options = {
    'statsd_host':'127.0.0.1',
    'statsd_port':8125
}

initialize(**options)

まずは初期化です。DogStatsDサーバのアドレスとポートを指定します。
デフォルトはUDP:8125です。

sample後半.py
#   tagと値を作る
tags = ['version:1', 'application:web']
value=random.randint(0, 100)

#   metricのset
metric="myapp.testdata.set"
statsd.set(metric, value, tags=tags)
#   metricのgauge
metric="myapp.testdata.gauge"
statsd.gauge(metric, value, tags=tags)

Metricsを送信するときは下記のいずれかのメソッドを使う必要があります。

メソッド名 解説
set() メソッドをコールした回数が送信される
gauge() メソッドで値を送信する

用途に応じて選んでください。
一見してわからない方は感覚的にわかるよう次の項で説明します。

サンプルスクリプト結果

サンプルスクリプトではsetメソッドとgaugeメソッドを両方ともコールしています。
このスクリプトを1分ごとにコールし続けた結果をdatadogにて表示してみます。

setメソッドは1分に1回コールされていることをカウントしているため、値1が毎分継続しており、gaugeメソッドはランダム値(0〜100)が送信され続けていることがわかるかと思います。

最後に

  • set()メソッドはスクリプトの実行回数などをに利用
  • gauge()メソッドはデータ量の変化などを記録するのに利用

こんな使いわけができればよりデータの可視化ができるのではないでしょうか?