KamonとDatadogによるリアクティブアプリケーションの監視の事例

30
KamonとDatadogによる リアクティブアプリケーションの 監視の事例 松村 郁⽣ (ikuo) ソフトウェアエンジニア @ CyberAgent, Inc.

Transcript of KamonとDatadogによるリアクティブアプリケーションの監視の事例

KamonとDatadogによる リアクティブアプリケーションの

監視の事例

松村 郁⽣ (ikuo) ソフトウェアエンジニア @ CyberAgent, Inc.

紹介の流れ

• 技術環境 / 選んだ経緯

• アプリケーション監視の事例

• Kamonの計測モデル

• 監視の例

• 受信メッセージ数, Kinesisアプリの遅延, 外部接続の応答時間, アプリのボトルネック

• つまづいた点と解決策, Tips

• タグの組合せ数を抑える(フィルタ, リソース解放)

技術環境 / 選んだ経緯

スマホ向け広告の配信を最適化するプラットフォーム (SSP)

リリース:  2015年3⽉  (1年半の運⽤)

配信規模:  ⽉間数⼗億imp

広告問合せの接続数:  数⼗デマンド

サーバ側 技術環境

Scala/Akka

Docker

EC2/Elastic Beanstalk, DynamoDB, Kinesis, etc.

Kamon

Datad

og

EMR + Spot

Spark

AWS

Kamon

監視系

広告配信系 集計系

インフラ構成の省⼒化,伸びる環境に投資

2014年末に選定

AWS

Docker

(環境G)(環境O)

Google Trends goo.gl/cB8ll4

• 健全な基礎

• Actor Model (1973)

• ⾮同期メッセージ通信 → 弾⼒性, 耐障害性, 即応性[REM]

• エコシステム

• 社内事例, JVMベース

• 背圧制御, 永続化, クラスタ, シャーディング などの拡張

⾼性能

TechEmpower Web Framework Benchmarks EC2最新版 (Round11), Nov. 2015, json [WFB]

ThoghtWorksTechnology Radar Nov. 2016 [TTR]

“Architectures based on asynchronous message passing introduce complexity and make the overall system harder to understand”

計測: 理解しやすくする1つのアプローチ

• 元々 “Reactive Application Monitoring”のコンセプト • Scala/Akka⽤の OSS 計測ライブラリ

• 当時から Kamon, Docker に対応 • 監視系の省⼒化と費⽤とのバランス • + “トレンド”

2014年末 に選定

Google Trends goo.gl/yQVIiY

Datadog

ツールS

ツールM (国内)

goo.gl/hq5vth

ツールZ

ツールn

ツールNツールm

goo.gl/yzb3jd

2014年末 に選定

Google Trends goo.gl/yQVIiY

Datadog

ツールS

Kamonの計測モデルと アプリケーション監視の例

Kamonの計測モデルと構成要素

• Core • Metrics - 計測対象(Entity)から計測値(EntityRecorder)

へのマップ • Tracing - 複数の計測対象間の相互作⽤の記録

• Integrations • Scala{,z}, Akka, Logback, Annotation, Exexutors,

Play, Spray, JDBC, ElasticSearch, System Metrics • Backends

• Datadog, JMX 他多数

計測器 計測対象(Entity)の例 紹介する監視の例

Counter akka-actor.errors 1. 受信メッセージ数

Histogram

akka-actor.time-in-mailbox 2. Kinesisアプリの遅延

tracer.elapsed-time 3. 外部接続の応答時間

MinMaxCounter akka-actor.mailbox-size 4. アプリのボトルネック

Gauge system-metrics.thread-count -

Kamonの4つの計測器と監視の例

1. 受信メッセージ数の監視 (Counter)

host-a でノード障害 (コンテナにrestartかかる)

host-bにfailover

Kamon.metrics.counter(“my-event”).increment()

2. Kinesisアプリの遅延の監視 (Histogram)

社内勉強会の資料[SMK] (@s_tsuka) より

Kamon.metrics.histogram(“my-delay”).record(v)

3. 経過時間の取得

Tracer.withNewContext(“my-proc”, autoFinish=true) { // 計測対象コード }

内部的には Histogram

3. 外部接続の応答時間の監視 (Tracer)

4. アプリのボトルネックの監視 (MinMaxCounter)

リリースから半年時点

ボトルネック解消

リリースから1年半

つまづいた点と解決策, Tips

タグの組合せ数の制限 (Datadog)

タグの組合せ毎にCustom Metricがカウントされる デフォルトでは「ホスト数 x 100個」まで*

Metirc毎のタグ⼀覧 Datadog UI > Metric > Summary

(*) Datadog Integrationは含まず

タグの組合せ数の注意点 (Kamon)

• タグの組合せ毎にKamonのEntityが⽣成される • ⽣成されたEntityは⾃動では削除されない

Kamon.metrics.counter( name = "pageview", tags = Map(“url” -> url) ).increment()

メモリ リーク

• 対策 • 限られた値を取るものしかタグには使わない • LRUキャッシュなどで不要なEntityは明⽰的に remove する

タグの組合せ数の注意点 (kamon-akka)

• Actorのパス毎にKamonのEntityが⽣成される • Actorを⼤量に⽣成する設計パターンがある*

• e.g. Cameoパターン, Cluster Sharding

context.actorOf( MyActor.props, name = “my-actor-” + randomUUID.toString )

(*)もともとAkkaは 数百万Actor/JVM を想定している “~2.5 million actors per GB of heap”, http://akka.io/

Actorの⼤量⽣成の対策 (kamon-akka)

• akka-actorのフィルタで計測対象から除外する • 必要なら別の形で計測を仕込む

• e.g. ClusterShardingStats でActor総数を取る

// application.conf kamon.metric.filters.akka-actor { includes = [ “**” ] excludes = [ “*/user/**/my-actor-*”, “*/system/**” ] }

フィルタの効果

before

after

グラフへのコメント

外部チャットにポスト

まとめ

• Kamonと組合せたScala/Akkaアプリの監視についてDatadogを選んだ経緯、1年半の運⽤の中から事例・Tipsを紹介しました

• タグの組合せが増えすぎないように、フィルタやリソース解放などに留意しています

• Kamonの使い⽅詳細や内部の仕組みについては 是⾮弊社のブログ[SBK]・勉強会資料[SMK]もご覧下さい

Reference

• [REM] Reactive Manifesto v2.0, http://www.reactivemanifesto.org/ja • [WFB] TechEmpower Web Framework Benchmarks, Round11, JSON

serialization, EC2, https://www.techempower.com/benchmarks/ (graph script: goo.gl/IpyQ4T )

• [TTR] ThoughtWorks, Technology Radar Nov. 2016, https://www.thoughtworks.com/radar/techniques

• [SBK] KamonとDatadogを使ってAkka actorのパフォーマンスを可視化する, CyberAgent AdTech Studio ScalaBlog, https://adtech.cyberagent.io/scalablog/2015/09/24/kamon_datadog_akka_performance/

• [SMK] Kamonを理解する, AdTech Scala Meetup, http://www.slideshare.net/shuyatsukamoto/kamon-55734536

• [DCM] Datadog FAQ, Limit on the number of custom metrics, https://help.datadoghq.com/hc/en-us/articles/204271775-What-is-a-custom-metric-and-what-is-the-limit-on-the-number-of-custom-metrics-I-can-have-