NTTドコモR&Dの技術ブログです。

DatadogAPM導入奮闘記~お金と向き合った日々~

はじめに

NTTドコモ 第二プロダクトデザイン部の増子です。
コンシューマ向けサービスのシステム開発を担当し、
自分の業務がお客様に直接影響することの重大さをヒシヒシと感じながら仕事すること早1年半。

…Datadog1APM2を導入することになりました。
それまでDatadog何それ状態だった私がAPM導入までに過ごした日々を残したいと思います!

導入決定の経緯

Datadogは導入済、ダッシュボードを使っての監視もしていました。
すでに出来上がったモノがあると潜在的な悩みには気づきにくいものですが、
さらに詳細にリソースをチェックするのにAPMが良いということで
利用経験のある方々からのアドバイスを受け、導入が決定しました。

莫大な利用者がいるアプリのため、そこから得られる性能情報もまた膨大。
これは運用していくのにものすごいコストがかかりそうだという不安がよぎります。

というわけで導入に際して特に気を付けたコスト面をメインにまとめていきます。

実施したこと

そもそもAPMの料金体系はどうなっているのか?という調査からスタートです。

情報収集の結果、

料金=インスタンス料金(Fargate)+スパンに対する従量課金(Indexed Span、Ingested Span)

であることがわかりました。
前者は基本料金のようなもので固定なので仕方ない。
現状をもとに計算すると約3万円/月ということで、後者をどれだけ減らせられるかが問題です。

では一体スパンとは何者なのでしょうか?


こちらがAPMの利用画面。
1番上の長い四角がIF1回の処理でその下に内訳を細かく表示してくれています。
この1つ1つの四角、つまり1つ1つのロジックがスパンという単位で表れています。
要はIFの利用数が多くなり、さらにそのIFの中で行われる処理が多ければ多いほどスパンも増えます。

スパンに対する料金にも2種類あります。
・Indexed Span:スパン数に応じてかかる料金
・Ingeseted Span:スパンの容量に応じてかかる料金
数と容量のどちらも考慮すべきなんですね。

ちなみにどちらにも一部無料枠があり利用数・容量が枠内に収まれば料金はかかりません。
・各APMホストに対し、月6.5万件のIndexed Spanを超過すると発生
・各APMホストに対し、月10GBのIngested Spanを超過すると発生

とにかく何も考えずに導入したらこれだけかかるという値を前月の実績から算出してみました。

・Indexed Span100万件あたり 1.70$ ×約310億件 / 100万
・Ingested Span1GBあたり0.1$ × 約34,000GB

合計すると… 57,500$/月

おっ、5万、こんなもんか!!ん!?

あ…!?

ドル!?

つまり800万円/月以上!?!?
これはSpanを絞らねば…ということで今度はフィルタの仕組みを調べます。
Spanを絞る仕組みとしてサンプリングレートとリテンションフィルタがあります。

150以上のIFを機能ごとに8つの単位(コンテナ)に分けているのですが、
コンテナに対してサンプリングレートを、IFに対してリテンションフィルタを設定できます。
小さく設定しすぎても欲しい情報が不足してしまうし、大きいと料金は膨らむ。
同じコンテナ内でIF実行回数に偏りがあるのでサンプリングレートだけで解決はできない。

考えるべき要素が多すぎるので、まず最終的にどれだけの情報を得たいかを決め逆算しました。
利用数の特に多いIFは100,000件/日、そうでないIFは10,000件/日のサンプルを目標に、
コンテナごとのサンプリングレートを計算。
その後個々にリテンションフィルタの設定を決めます。

かなり複雑になりましたが改めて計算した結果、10万円/月台まで削減成功!
減らしすぎた感は否めませんが1度かかった料金は取り戻せません、最初はこれで出しましょう。

その後通常開発と並行してどのタイミングにリリースするかを決め、性能試験を実施し、
紆余曲折ありついにリリースすることができました!

おぉ!DatadogのAPM画面でデータが取れるようになっている…!

出して終わりではないので料金を継続して確認し見直ししやすい運用を整える必要もあります。

IF利用数の実績や増減がわかるダッシュボードを作成し、
増減が検知できるアラート準備…ダッシュボードは計算表(以下の図参照)と連携し、
クリック1つで現状と予算から適切なレート・フィルタの設定値が計算できるマクロも整理。
万端です。

ドキドキの初月の料金実績…(健康診断より緊張)
使い始めたことによる増加はあるが、問題なし!
というわけで無事にAPM導入できたのでした。

導入効果

そんなこんなでAPM導入から早半年近くが経ちます。
念入りに調査・準備した甲斐もありコストが思った以上にかかってしまうこともなく
無事に利用開始し今も順調に使い続けています。

実際にAPMを導入してみると、IF単位のリクエスト数や
レスポンスタイムが取得できるようになりました。
お客様が1日でどれくらい何の操作を行ったか、
問題が発生した時に原因となるIFが何だったのかがわかり分析も進めやすくなりました。

取得できる情報が増えたことでダッシュボードも見直しされました。
良いボードができる→よく見る→よく気づく→課題解決につながる
ということで担当内のモチベーションも上がったのではないかと思います。

ダッシュボードに関してはコストの急増をキャッチできるよう
前週・前月との利用量比較や利用数の多いIFがぱっとわかるようなものも準備しているので…

もっともっと使われるアプリになっても大丈夫!!

なはず。

まとめ

こうして振り返ると石橋を叩きつつ進めてきたとしみじみしておりますが、
準備しすぎて良くないことはない!のスタンスでやってきて良かったと思います。

これからもお金と向き合う日々は続きますがこれにてAPM導入はひと段落です。
この経験、この記事が読んで頂いた方のお役に立てれば幸いです!
最後まで読んで頂きありがとうございました!

(…仕事だけでなくそろそろ自分のクレカ決済額とも向き合わねば泣)


  1. SaaS型の運用監視ツールでAPMやログ分析が行えるサービス
  2. アプリケーションパフォーマンス管理。サービス、アプリケーションの稼働状況やトランザクションをモニタリングするツール