Blog
[Adtech Scala Meetup] Kamonを理解する
こんにちは、CA ProFit-Xの塚本(@s_tsuka)です。
最近、サイバーエージェント アドテクスタジオ内でScalaのMeetupが始まりました。
今は勉強会に近いですが、何でも話せる場にしたいね、ということでMeetupという形にしています。
先日開催されたScala Meetup 第2回では、普段利用しているKamonというJVM監視ツール(ライブラリ)の使い方や内部の構造について発表を行いました。
今回のこの記事ではKamonの内部についてスライドを交えながら簡単に触れていきたいと思います。
スライド
発表時に利用したスライドはこちらです。
[slideshare id=55734536&doc=20151120adtechscalameetupkamon-151202110655-lva1-app6891]
解説:使い方
スライド序盤(pp.1-19)では、Kamonの概要と使い方について説明しています。
Kamonの使い方については以前記事を書いておりますので、以下を御覧ください。
KamonとDatadogを使ってAkka actorのパフォーマンスを可視化する
てっとり早くKamonを試してみたい方は上記の記事内またはスライド内にサンプルアプリのURLを書いていますのでgit cloneしてお試しください。
Kamonの使い方は簡単で、Kamon.start()でKamonを開始した後でそれぞれHistogramやCounterなどをつくって、それらのオブジェクト経由で値を記録するだけです。
これはkamon-coreの機能です。coreの他に適宜kamon-log-reporterを使ってconsole出力させてみたり、kamon-datadogなどを使って外部に値を送信するなどを行ってみてください。
ちなみに外部に値を送信する拡張機能はKamonのプログラムが動くlocalマシン上にdd-agentなどの各種サービスのエージェントプログラムが動いていることを前提としています。
解説:実例
スライド中盤(pp.20-31)では我々ProFit-Xが実際にKamonを利用して値を収集・表示している様子を示しています。
Datadogという監視サービスを利用しているので、そちらに値を送信して可視化しています。
独自にデータをカウントアップするのはちょっとしたコードを書くだけで良いため、非常に簡単です。ProFit-Xチームでは大抵の場所にCounterやTracer, Histogramを仕込んでデータを送信しているため、詳細にシステムの挙動を把握することができます。(ただ、ある程度までは見れますが限界はあって、何か障害が発生するとほとんどのグラフは同じように推移するため、具体的にどこに問題が発生したかはエンジニアが当たりを付けたり、場合によって詳しく調査する必要があります。)
解説:内部構造
スライド終盤(pp.32-52)では、Kamonライブラリの内部構造について説明しています。
少しコードを読んでみてある程度理解はできてきました。スライドの各所にGitHub上へのリンクを貼ってあるので、興味がある方はそちらもごらんください。
内部的にActorを利用しているため、Actorの前提知識が必要ですが、それ以外は特に難しい仕組みは使っていないため、少し時間をかければ読めるようになると思います。Publisher, Subscriberのモデルを利用しているため、そこさえ把握してしまえば大体の挙動は把握できます。実際にTickMetricsSnapshotを作成している部分などにbreak pointを設定してstep実行してみると、各objectがどうなっているかよくわかると思います。
Kamon自体の挙動はPublisher, Subscriberがメインなのですが、肝心のHistogramや、どのように自動的に値を取得しているかはHdrHistogramというライブラリとAspectJというアスペクト指向ライブラリを別途理解する必要があるので大変です・・・(この部分までは見れませんでした。)
Scala本の出版社のTakezoeさんもそのようなことを仰っていました(笑)
Kamonの調査してたのに、ほぼAspectJとHdrHistgramとAtomicLongArrayのソース読んでた。全部ジャッバだった。
— Naoki Takezoe (@takezoen) 2015, 11月 5
もしご自身で拡張を作成したい方がいらしたら、最近追加されたOmuraさんのFluentdSenderなどが参考になるかもしれません。
My contribution is finally merged!! Yeaaah! これで、#Kamon でとった#Reactive なscalaアプリのメトリクスが #fluentd に流せます!! https://t.co/m4xsW6FVAo
— Shingo Omura (@everpeace) 2015, 10月 31
気になる点があればコンタクトを取ってみるのも良いかもしれません!
まとめ
Kamonの概要、利用例(Datadogへ値を送信して監視する例)、内部構造について説明しました。
みなさん、Kamonを利用して快適な監視ライフを送りましょう!
Author