SlideShare a Scribd company logo
KamonとDatadogによる
リアクティブアプリケーションの
監視の事例
松村 郁⽣ (ikuo)
ソフトウェアエンジニア @ CyberAgent, Inc.
紹介の流れ
• 技術環境 / 選んだ経緯
• アプリケーション監視の事例
• Kamonの計測モデル
• 監視の例
• 受信メッセージ数, Kinesisアプリの遅延,

外部接続の応答時間, アプリのボトルネック
• つまづいた点と解決策, Tips
• タグの組合せ数を抑える(フィルタ, リソース解放)
技術環境 / 選んだ経緯
スマホ向け広告の配信を最適化するプラットフォーム (SSP)
リリース:
 2015年3⽉
 (1年半の運⽤)
配信規模:
 ⽉間数⼗億imp
広告問合せの接続数:
 数⼗デマンド
サーバ側 技術環境
Scala/Akka
Docker
EC2/Elastic Beanstalk, DynamoDB, Kinesis, etc.
Kamon
Datadog
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]
ThoghtWorks

Technology 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-

More Related Content

PDF
Kamonを理解する
PPTX
Telemetry事始め
PDF
ネットワーク自動化ツール紹介(Ansible・NAPALM編)
PDF
AnsibleとNAPALMでネットワークをテストする
PPTX
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
PDF
ネットワーク自動化、なに使う? ~自動化ツール紹介~(2017/08/18追加開催)
PDF
Custom Scan API - PostgreSQL Unconference #3 (18-Jan-2014)
PDF
ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)
Kamonを理解する
Telemetry事始め
ネットワーク自動化ツール紹介(Ansible・NAPALM編)
AnsibleとNAPALMでネットワークをテストする
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
ネットワーク自動化、なに使う? ~自動化ツール紹介~(2017/08/18追加開催)
Custom Scan API - PostgreSQL Unconference #3 (18-Jan-2014)
ネットワーク自動化、なに使う? ~自動化ツール紹介~ (2017/07/21開催)

Viewers also liked (20)

PDF
Make your programs Free
PPTX
究極のPHP本完成
PPTX
Arquitectura barroca
PDF
Sbtのマルチプロジェクトはいいぞ
PDF
How Scala code is expressed in the JVM
PDF
ScalaMatsuri 2016
PPTX
Scala Refactoring for Fun and Profit (Japanese subtitles)
PDF
Functional Programming For All - Scala Matsuri 2016
PDF
Contributing to Scala OSS from East Asia #ScalaMatsuri
PDF
あなたのScalaを爆速にする7つの方法(日本語版)
PDF
バッチを Akka Streams で再実装したら100倍速くなった話 #ScalaMatsuri
PDF
Akka Cluster and Auto-scaling
PDF
Tracing Microservices with Zipkin
PDF
Going bananas with recursion schemes for fixed point data types
PDF
Van laarhoven lens
PDF
Why Reactive Matters #ScalaMatsuri
PDF
Reducing Boilerplate and Combining Effects: A Monad Transformer Example
PDF
Zen of Akka
PDF
Deadly Code! (seriously) Blocking & Hyper Context Switching Pattern
PDF
Reactive integrations with Akka Streams
Make your programs Free
究極のPHP本完成
Arquitectura barroca
Sbtのマルチプロジェクトはいいぞ
How Scala code is expressed in the JVM
ScalaMatsuri 2016
Scala Refactoring for Fun and Profit (Japanese subtitles)
Functional Programming For All - Scala Matsuri 2016
Contributing to Scala OSS from East Asia #ScalaMatsuri
あなたのScalaを爆速にする7つの方法(日本語版)
バッチを Akka Streams で再実装したら100倍速くなった話 #ScalaMatsuri
Akka Cluster and Auto-scaling
Tracing Microservices with Zipkin
Going bananas with recursion schemes for fixed point data types
Van laarhoven lens
Why Reactive Matters #ScalaMatsuri
Reducing Boilerplate and Combining Effects: A Monad Transformer Example
Zen of Akka
Deadly Code! (seriously) Blocking & Hyper Context Switching Pattern
Reactive integrations with Akka Streams
Ad

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

PPTX
アプリケーション開発と分析のための Log Analytics
PDF
SORACOM UG 信州 #3 | About SORACOM & Updates
PDF
SORACOM Technology Camp 2018 アドバンストラック4 | スモールスタートの次の一手は?成長できるIoTシステムの実例と回避した...
PDF
アドテク×Scala×パフォーマンスチューニング
PDF
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
PDF
AlloyDB のデータ分析基盤での活用におけるポテンシャルとは?
PDF
Migrating tocloudnativeapplicationwithusingelasticapm
PDF
実践で学んだLog Analytics
PDF
SORACOM UG 農業活用コミュニティ #1 | IoT向け通信プラットフォーム「SORACOM」ご紹介
PDF
[Developers Summit 2018] Microsoft AIプラットフォームによるインテリジェント アプリケーションの構築
PDF
Amazon EKSによるスケーラブルなCTR予測システム
PDF
Microsoft open tech night 2020 feb18
PDF
JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...
PPTX
機械学習 - MNIST の次のステップ
PDF
Apm enables python app observability
PDF
IoT時代におけるストリームデータ処理と急成長の Apache Flink
PPTX
Visual Studio App Centerで始めるCI/CD(Android)
PPTX
Azure Machine Learning services 2019年6月版
PDF
【18-C-4】Google App Engine - 無限の彼方へ
PPTX
明治大学理工学部 特別講義 AI on Azure
アプリケーション開発と分析のための Log Analytics
SORACOM UG 信州 #3 | About SORACOM & Updates
SORACOM Technology Camp 2018 アドバンストラック4 | スモールスタートの次の一手は?成長できるIoTシステムの実例と回避した...
アドテク×Scala×パフォーマンスチューニング
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
AlloyDB のデータ分析基盤での活用におけるポテンシャルとは?
Migrating tocloudnativeapplicationwithusingelasticapm
実践で学んだLog Analytics
SORACOM UG 農業活用コミュニティ #1 | IoT向け通信プラットフォーム「SORACOM」ご紹介
[Developers Summit 2018] Microsoft AIプラットフォームによるインテリジェント アプリケーションの構築
Amazon EKSによるスケーラブルなCTR予測システム
Microsoft open tech night 2020 feb18
JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...
機械学習 - MNIST の次のステップ
Apm enables python app observability
IoT時代におけるストリームデータ処理と急成長の Apache Flink
Visual Studio App Centerで始めるCI/CD(Android)
Azure Machine Learning services 2019年6月版
【18-C-4】Google App Engine - 無限の彼方へ
明治大学理工学部 特別講義 AI on Azure
Ad

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