はじめに
STORES でECサービスのSREエンジニアをしている角田と申します。
hey アドベントカレンダー 2020 の12日目の記事です!
今回は STORES でサービス監視に利用しているDatadogの機能についてです。
Datadog には App Analytics という機能があります。 App AnalyticsはAPMの拡張機能なのですが、得られる情報や見た目もよく似ています。
以下では、
- App Analyticsを使うと何が出来るようになるのか?
- 料金は大丈夫なのか?
をお伝えしたいと思います。
APM
念の為のおさらいですが、APMは Application Performance Monitoring の略で、その名の通りアプリケーションのパフォーマンスを監視できる機能です。
APMを有効化すると Flame Graph や Span List が見られるようになり、
- アプリケーションのどの処理にどの程度時間がかかっているのか?
- DBや外部サービス等へのアクセスが何回程度行われるのか?
といったことを確認することが出来ます。
Flame Graph
Span List
App Analytics
App Analyticsを有効にすると Analytics という画面にデータが表示されるようになります。
- 簡単なグラフやランキング作成
- Service横断でのパフォーマンス分析
- Service はAPMの設定で指定する事が出来る観測単位で、適宜分割すると監視しやすくなります
- STORES ではいくつかサービスがあるので、その単位で分割しています
- Service はAPMの設定で指定する事が出来る観測単位で、適宜分割すると監視しやすくなります
などが出来ます。
App Analytics / Graph
App Analytics / Search
何が違うのか?
より詳細な検索
App Analyticsを有効化するとAPMだけで利用するよりも詳細な検索が出来るようになります。
App AnalyticsはAPMのデータ( Trace/Span )を検索しやすい状態にした Indexed Span というデータを作って利用します。 Indexed Spanは検索インデックスの様なもので、処理時間やURLパスなどで集計する事が出来ます。
上に挙げた App Analytics / Search
の画面のサイドバーで利用できるパラメータが確認できます。
色んな条件で検索してみてみるとそれだけで楽しいので1度触ってみてください。
より詳細なメトリクスの利用
Indexed Spanはメトリクスとしても利用できます。
APMだけでもいくつかのメトリクスが利用可能ですが、Service全体のスループットや特定アクションのエラーレートといった比較的マクロなものだけです。 ですがIndexed Spanがメトリクスとして使えると、
- 処理が2秒を超えるリクエストが一定数以上に増えた時にアラートを出して、素早く調査改善を行う
- エラーが多いアクションのランキングを作って、サービスの信頼性向上につなげる
といった細やかな監視、改善が出来るようになります。
実際に STORES では処理時間ワーストランキングを作成しSLI低下時の調査や性能改善に利用しています。
気をつけること
App Analyticsの利用で気をつけるべきは料金です。
リクエスト数に対して課金されるので、サービスの規模が拡大するにつれて無視できなくなります。 また全てのServiceでIndexed Spanが必要という訳でもありません。
Indexed SpanのSpan Filtering
料金が気になる場合にはIndexed Spanを作る割合を減らすことが出来ます。 これを Span Filterring と言い、全体のリクエストに対してIndexed Spanを生成する割合を指定します。
この設定をすると、APM(Trace/Span)は確認できるが、App Analyticsは確認できないというデータができます。
STORES の場合、
の様に調整することで、料金を抑えつつ必要な情報を確認できる状態にしています。
尚、Span Filteringをした場合に表示される統計情報は、減らされたデータからUp-Scaleしたものと実際の値の両方を見ることができます。
まとめ
- App AnalyticsはAPMに比べて
- より細やか検索や集計が出来る
- より細やかな監視、改善がしやすくなる
- App Analyticsの料金はSpan Filteringで適宜調整が出来る
以上です。 サービスの細やかな監視や、信頼性向上のために、ぜひ皆さんもApp Analyticsを積極的に使ってみてください!