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

140 views

Published on

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

Published in: Software
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
140
On SlideShare
0
From Embeds
0
Number of Embeds
28
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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-

×