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-

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