Japan Container Days v18.12に参加してきました #containerdaysjp
はじめに
この記事は、Scala Advent Calendar 2018 の9日目のエントリーです。
8日目は、@yoshiyoshifujiiさんのAkka gRPCを試してみたでした。
10日目は、@j5ik2oさんです。
準備の期間を含めて約4ヶ月位 census-ecosystem/opencensus-scala に触れていたので振り返りつつ、 Japan Container Daysの参加した感想を書こうかと思います。
Japan Container Days v18.12
OpenCensusとJaegerで分散トレーシングを見てみよう
スライドは、こちらで公開してあります。
内容としては、Scala関西 Summit 2018へ参加してきました #scala_ks で話した内容からScalaの要素を削って、OpenCensusの内容を増やしました。
段取りを間違えてしまって、デモの時間を減らしてしまうという痛恨のミスを犯してしまったのが心残りです。
OpenCensus Scalaについて
census-ecosystem/opencensus-scala
Akka-HTTPで使う前にREADME.mdを見てもらうと、
どうやってRouterからSpan
を受け取って、Tracingを組み立てて行くことが出来るかが分かります。
あとは、自分が使いたいExporterの設定をapplication.conf
で有効にすることで、転送されるようになります。
0.6.1
で利用できるExporterは以下のとおりです。
- Stackdriver
- Logging
- Zipkin
- Instana
今回紹介したJaegerはZipkinと互換性があるので、転送先をJaegerのCollectorにすることで利用可能になります。
あくまでwrapperなので、census-instrumentation/opencensus-javaが対応していないExporterは、自分でCustom Exporterを作る必要があります。
その際は、Trace exporterを参考にしつつ、 census-instrumentation/opencensus-specsでSpanの中身をみつつ、 利用したいTracingのプロダクトのフォーマットにしていく必要があります。
また、Span
は伝播させる必要があるので、ReaderT
のような合成しやすい型と組み合わせて対応するといいと思われます。
import cats.data.ReaderT
// or
import scalaz.ReaderT
type ReaderSpanT[F[_], A] = ReaderT[F, Span[F], A]
Module for tagless-final & cats-effectのように、そもそも組み込んでしまうissueも上がっています。
Scalaの言語のチカラを活かして使いやすくすることが出来るので、今後も期待出来ると思われます。
おわりに
Playを含めて、フレームワーク側でOpenCensusを組み込むようになってくれるといいのですが、デファクトスタンダードがどうなっていくのかが不透明な現状では、 自分たちでフレームワークとアプリケーションを繋ぐアダプターを書くしか無いのが、導入の障壁になってしまっているように思われます。
運用も見据えて基盤となるレイヤーのことも考えつつコードを書く必要が出てきたり、 アプリケーションそのものが小さく素早くリリースできるようになったりと、 単にアプリケーションを書くだけでなく、いろいろなレイヤーの知識やこれまでの経験を改めて見直すが出来ました。
Japan Container Daysは、Cloud Native Days Tokyo に変わるそうです。
来年に開催される頃には、取り巻く環境がいろいろ変化していると思うので、また参加してみたいと思います。
スタッフ、スポンサーの皆様、ありがとうございました。