クラウド勤怠とクラウド給与で一人プロダクトSREをしているVTRyoです。いつの間にかプロダクトを兼任していて人手が足りません、助けてください。
Datadogに独自メトリクスを取り込むために最初はStaging環境などで検証しようとしたのですが、動くかわからないもののためにエンジニアのコードレビュー時間を取っても勿体ないです。
ローカルでDogStatsDを検証する方法があったので紹介します。
前提
Datadog側が提供している既存のメトリクスでは取得できない、アプリケーション独自のメトリクスを集計する必要がありました。 プロダクト固有の問題に寄り添ったSLIを設定するためには、もはや必須の条件です。
独自のメトリクスをDatadogに送信する方法はいくつかあります。
- カスタムAgentチェック
- DogStatsD
- PowerShell
- DatadogのHTTP API
今回はDogStatsDを利用します。 アプリケーション側で制御できることや、Datadog Agentに付属するメトリクス集計サービスであることによる導入コストの低さが理由です。
導入方法はDatadogの公式ドキュメントに記載があります。
たとえばCOUNTメトリクスであれば、コードサンプルが用意されているので導入については公式を参照してください。
require 'datadog/statsd' statsd = Datadog::Statsd.new('localhost', 8125) while true do statsd.increment('example_metric.increment', tags: ['environment:dev']) statsd.decrement('example_metric.decrement', tags: ['environment:dev']) statsd.count('example_metric.count', 2, tags: ['environment:dev']) sleep 10 end
Datadog Agent側の設定でも、DogStatsDポートをホストポートにバインドするように設定されていれば、アプリケーションに組み込むだけで独自メトリクスの集計が開始されます。
ローカルでDogStatsDを動かしていく
各種の設定方法を理解したところで、本番に出す前に検証したいところです。 手元で動かしているアプリケーションで動作確認し、その作成したメトリクスをDatadogのWeb画面で確認しましょう。
やることはかんたんです。
- アプリケーションにDatadog::Statsdに関する処理を書く
- DogStatsDのコンテナをdocker runする
アプリケーションコード
例えばある処理中で以下のように差し込むとしましょう。 シンプルに処理が走る度にCOUNTメトリクスをインクリメントします。
require 'datadog/statsd' def hoge puts "metrics increment!" # DD_AGENT_HOST = 127.0.0.1 statsd = Datadog::Statsd.new(ENV.fetch('DD_AGENT_HOST', nil), 8125, tags: { service: 'hoge', env: Rails.env, Type: 'Web' }) # 8125はポート番号 # https://github.com/DataDog/dogstatsd-ruby/blob/master/lib/datadog/statsd.rb#L159 statsd.increment('example_metric.increment') statsd.close end
DogStatsDを起動する
DockerでDogStatsDを起動しましょう。
検証に参考・利用したのは以下です。
- https://github.com/DataDog/docker-dd-agent#dogstatsd
- https://github.com/DataDog/docker-dd-agent/tree/master/dogstatsd
この時、DatadogのAPI KEYを環境変数に渡します。
-pではDD_AGENT_HOST
で指定しているIPアドレスにします。
docker run -p 127.0.0.1:8125:8125/udp -d --name dogstatsd -h `hostname` \ -e API_KEY=YOUR_API_KEY datadog/docker-dd-agent:latest-dogstatsd
起動が完了すれば準備完了です。 statsdを差し込んだプログラムを動かし、Datadog側に取り込まれたか確認します。
Datadogで確認する
Metrics Explorerを使用すると検索しやすいでしょう。独自に設定したメトリクス名が表示できればローカルからDatadogへ独自メトリクスの取り込みが完了しています。
※別のコンテナからDogStatsDに転送する場合
別のコンテナからDogStatsDに送りたい場合は、次のどちらかの方法が取れます。 詳しくはこちらを参照してください。
- Docker host IPを使う
- Docker linksを使う
docker run --name my_container \ --all_your_flags \ --link dogstatsd:dogstatsd \ my_image_id
おわりに
今回はDogStatsDをローカルで検証したい、その方がお手軽でしょという気持ちで試しました。 アプリケーション独自のメトリクス収集ができると、これまで観測できなかった数値が可視化されるためSRE的にもポイント高いです。
独自メトリクスは一回試してみると案外かんたんにできてしまうので、臆せずドカドカ手を動かしましょう。
プロダクトSREに興味がある方、マネーフォワードに興味がある方はMeetyなどからもお気軽にメッセージくださいませ!
マネーフォワードでは、エンジニアを募集しています。 ご応募お待ちしています。
【会社情報】 ■Wantedly ■株式会社マネーフォワード ■福岡開発拠点 ■関西開発拠点(大阪/京都)
【SNS】 ■マネーフォワード公式note ■Twitter - 【公式】マネーフォワード ■Twitter - Money Forward Developers ■connpass - マネーフォワード ■YouTube - Money Forward Developers