StatsDを利用して、メトリクスをGrafanaで可視化する方法

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/7bc13c3a-1767-785e-0b43-8ac3d4f8f9b8.png)


StatsDは、さまざまなアプリケーションからメトリクスを収集できる人気の高いオープンソースツールであり、指定した関数のカウンター、タイマー、ゲージをリッスンするデーモンとなります。 たとえば、ボタン付きのIoTデバイスがある場合、そのボタンにカウンターを設定して、ボタンが押された回数を追跡することが出来たりします。

通常、開始するには、サーバー上でStatsDデーモンをセットアップおよび構成する必要がありますが、本日は[MetricFire]([MetricFire](https://www.metricfire.com/japan/?GAID=2038175526.1567400116&utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=StatsD%20Gauges%2C%20Counters%2C%20and%20Timers%20on%20MetricFire))のStatsDアドオンを使用するため、統計をすばやく起動して実行していきます。

StatsDデーモンをセットアップおよび構成の複雑なステップを省いて、すぐにStatsDの利用を開始するには、MetricFire[無料トライアル](https://www.hostedgraphite.com/accounts/signup-metricfire/?signup=japan&utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=StatsD%20Gauges%2C%20Counters%2C%20and%20Timers%20on%20MetricFire)にサインアップしてください。 この記事の残りの部分では、StatsDを使用してメトリックをMetricFireに送信する方法の詳細を解説していきます。

StatsDは通常、ユーザーが設定します。まずユーザーは、StatsDエンドポイントとして機能するURLを指定します。 ただ、MetricFireを使用することで、それはすでに完了しています。 MetricFireから指定されたURLにメトリックを送信するだけで、それらの情報をGrafanaで可視化できるようになります。

#メトリクスの送信方法
以下のグラフは、StatsDにメトリックを送信する方法の一般的な手法を示しています。 通常、ほとんどのバックエンド言語には、StatsDメトリックをURL、ポート、およびプレフィックスに送信するのに役立つライブラリがあります。 アプリが記述されている言語でStatsDのライブラリをインストールしたら、カウンター、ゲージ、またはタイマーを使用して特定の関数を追跡するコードの追加を開始できます。 MetricFireを使用する場合、URL、ポート、およびプレフィックスは、MetricFireアプリのStatsDアドオンによって提供されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/f8f16129-9300-5fd6-861f-0b2030037255.png)

今回は、Pythonを使用してStatsDメトリックをMetricFireアカウントに送信します。 まず、次の方法でStatsDパッケージを入手しましょう。

```
sudo pip install statsd
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/95ff62c2-1f94-59c5-d81b-10938ccbc3ce.png)

次に、MetricFireアカウントからURL、ポート、プレフィックスを取得しましょう。 Add-Ons > Add-Ons > StatsDに進んでください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/a3c23fa4-d8c3-5294-0102-92012bae5804.png)

次に、[Enable]ボタンがあるはずです。 StatsDを有効にすると、次のようなURL、ポート、プレフィックスが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/fcc24c4a-5907-c997-4a20-0fbd0f3d7902.png)

これで、この情報を使用して、MetricFireアカウントへのメトリックの送信を開始できます。 このコードを含む実行可能なPythonファイルを作成します。

```
#!/usr/bin/env python3
import statsd
c = statsd.StatsClient("URL", PORT, prefix="PREFIX_KEY")
def button():
    c.incr("metric.button", 1)
    print("button has been pressed")
if __name__ == "__main__":
    for i in range(5):
        button()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/5aa0c8a2-ec1b-6458-64f3-3dc98280c31a.png)

#メトリクスの送信
次に、カウンターメトリックをテストしましょう。 このファイルを1回実行すると、メトリック情報がMetricFireに送信されます。 具体的には、カウンターはファイルを実行するたびに5つのボタンの押下をカウントし、その値をメトリック名「countersmetricbuttoncount」でMetricFireに送信します。 次に、Grafanaダッシュボードでメトリック名をクエリすることにより、値をGrafanaにインポートできます。 以下の手順を見てみましょう。
‍
まず、ファイルを実行してみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/4d5f33e5-82bc-e59f-4942-63a41a1cc45c.png)

次に、メトリックがMetrics Treemapに送信されたことを確認します。 以下の画像は、MetricFireがPythonファイルからメトリックを受信したことを示しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/4adf758e-3682-2061-27cf-37dc7bf00028.png)


メトリックツリーマップにポップアップが表示されたら、Grafanaのグラフにプロットできるはずです。 Grafanaで新しいダッシュボードを作成していきましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/39ac1a57-f57a-d98f-17c5-503d40744611.png)

次に、「counters metric button count」と呼ばれるメトリックをクエリします。 下のグラフでは、カーソルが1つのドットの上にあります。 そのクエリには、グラフの値として5.000のドットがあります。 Pythonファイルを最後に実行した後、カウンターが5ボタンの押下をカウントしたので、これは正しく動作している証拠です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/18944d5e-814a-c1f0-a2a9-8e76b0562f2a.png)

Pythonファイルをもう少しスパムして、グラフでどのように表示されるかを確認しましょう。 以下の画像は、Pythonファイルのランダムな実行の束がどのように見えるかを示しています。 14:28に元の5つのボタンが押されたことも確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/b4e80500-707f-b003-92ce-2a6ac05a7508.png)

StatsDは、ユーザーがアプリに費やした時間や、何かが使用される頻度を追跡するのためにも役立ちます。 アプリケーションの改善に役立てるために追跡できる統計情報は無限にありますので、きっとあなたの役に立つはずです。

[MetricFire](https://www.metricfire.com/japan/?GAID=2038175526.1567400116&utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=StatsD%20Gauges%2C%20Counters%2C%20and%20Timers%20on%20MetricFire)でStatsDを試すことに興味がある場合は、[無料トライアル](https://www.hostedgraphite.com/accounts/signup-metricfire/?signup=japan&utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=StatsD%20Gauges%2C%20Counters%2C%20and%20Timers%20on%20MetricFire)にサインアップしてください。 StatsDアドオンを試して、GrafanaでどのようなStatsDグラフを作成できるかどうかを確認してください。 [デモを予約](https://www.metricfire.com/demo-japan/?GAID=2038175526.1567400116&utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=StatsD%20Gauges%2C%20Counters%2C%20and%20Timers%20on%20MetricFire)してご相談いただくことも可能です。MetricFireが監視のニーズにどのように役立つかについて、直接お気軽にご相談ください。