Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

1,732 views

Published on

http://datadog.connpass.com/event/41367 dd_sushi でのUser Talkの発表資料です。

Published in: Software
  • Be the first to comment

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

  1. 1. KamonとDatadogによる リアクティブアプリケーションの 監視の事例 松村 郁⽣ (ikuo) ソフトウェアエンジニア @ CyberAgent, Inc.
  2. 2. 紹介の流れ • 技術環境 / 選んだ経緯 • アプリケーション監視の事例 • Kamonの計測モデル • 監視の例 • 受信メッセージ数, Kinesisアプリの遅延,
 外部接続の応答時間, アプリのボトルネック • つまづいた点と解決策, Tips • タグの組合せ数を抑える(フィルタ, リソース解放)
  3. 3. 技術環境 / 選んだ経緯
  4. 4. スマホ向け広告の配信を最適化するプラットフォーム (SSP) リリース:  2015年3⽉  (1年半の運⽤) 配信規模:  ⽉間数⼗億imp 広告問合せの接続数:  数⼗デマンド
  5. 5. サーバ側 技術環境 Scala/Akka Docker EC2/Elastic Beanstalk, DynamoDB, Kinesis, etc. Kamon Datadog EMR + Spot Spark AWS Kamon 監視系 広告配信系 集計系 …
  6. 6. インフラ構成の省⼒化,伸びる環境に投資 2014年末に選定 AWS Docker (環境G) (環境O) Google Trends goo.gl/cB8ll4
  7. 7. • 健全な基礎 • Actor Model (1973) • ⾮同期メッセージ通信 →
 弾⼒性, 耐障害性, 即応性[REM] • エコシステム • 社内事例, JVMベース • 背圧制御, 永続化, クラスタ, シャーディング などの拡張 ⾼性能 TechEmpower Web Framework Benchmarks EC2最新版 (Round11), Nov. 2015, json [WFB]
  8. 8. ThoghtWorks
 Technology Radar
 Nov. 2016 [TTR] “Architectures based on asynchronous message passing introduce complexity and make the overall system harder to understand”
  9. 9. 計測: 理解しやすくする1つのアプローチ • 元々 “Reactive Application Monitoring”のコンセプト • Scala/Akka⽤の OSS 計測ライブラリ
  10. 10. • 当時から Kamon, Docker に対応 • 監視系の省⼒化と費⽤とのバランス • + “トレンド” 2014年末 に選定 Google Trends
 goo.gl/yQVIiY Datadog ツールS
  11. 11. ツールM (国内) goo.gl/hq5vth ツールZ ツールn ツールN ツールm goo.gl/yzb3jd 2014年末 に選定 Google Trends
 goo.gl/yQVIiY Datadog ツールS
  12. 12. Kamonの計測モデルと アプリケーション監視の例
  13. 13. Kamonの計測モデルと構成要素 • Core • Metrics - 計測対象(Entity)から計測値(EntityRecorder) へのマップ • Tracing - 複数の計測対象間の相互作⽤の記録 • Integrations • Scala{,z}, Akka, Logback, Annotation, Exexutors, Play, Spray, JDBC, ElasticSearch, System Metrics • Backends • Datadog, JMX 他多数
  14. 14. 計測器 計測対象(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つの計測器と監視の例
  15. 15. 1. 受信メッセージ数の監視 (Counter) host-a でノード障害
 (コンテナにrestartかかる) host-bにfailover Kamon.metrics.counter(“my-event”).increment()
  16. 16. 2. Kinesisアプリの遅延の監視 (Histogram) 社内勉強会の資料[SMK] (@s_tsuka) より Kamon.metrics.histogram(“my-delay”).record(v)
  17. 17. 3. 経過時間の取得 Tracer.withNewContext(“my-proc”, autoFinish=true) { // 計測対象コード } 内部的には Histogram
  18. 18. 3. 外部接続の応答時間の監視 (Tracer)
  19. 19. 4. アプリのボトルネックの監視 (MinMaxCounter) リリースから半年時点
  20. 20. ボトルネック解消 リリースから1年半
  21. 21. つまづいた点と解決策, Tips
  22. 22. タグの組合せ数の制限 (Datadog) タグの組合せ毎にCustom Metricがカウントされる デフォルトでは「ホスト数 x 100個」まで* Metirc毎のタグ⼀覧 Datadog UI > Metric > Summary (*) Datadog Integrationは含まず …
  23. 23. タグの組合せ数の注意点 (Kamon) • タグの組合せ毎にKamonのEntityが⽣成される • ⽣成されたEntityは⾃動では削除されない Kamon.metrics.counter( name = "pageview", tags = Map(“url” -> url) ).increment() メモリ リーク • 対策 • 限られた値を取るものしかタグには使わない • LRUキャッシュなどで不要なEntityは明⽰的に remove する
  24. 24. タグの組合せ数の注意点 (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/
  25. 25. Actorの⼤量⽣成の対策 (kamon-akka) • akka-actorのフィルタで計測対象から除外する • 必要なら別の形で計測を仕込む • e.g. ClusterShardingStats でActor総数を取る // application.conf kamon.metric.filters.akka-actor { includes = [ “**” ] excludes = [ “*/user/**/my-actor-*”, “*/system/**” ] }
  26. 26. フィルタの効果 before after
  27. 27. グラフへのコメント
  28. 28. 外部チャットにポスト
  29. 29. まとめ • Kamonと組合せたScala/Akkaアプリの監視について Datadogを選んだ経緯、1年半の運⽤の中から事例・Tips を紹介しました • タグの組合せが増えすぎないように、フィルタやリソー ス解放などに留意しています • Kamonの使い⽅詳細や内部の仕組みについては
 是⾮弊社のブログ[SBK]・勉強会資料[SMK]もご覧下さい
  30. 30. 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-

×