3この記事は1960文字で約5分で読めますGoの勉強をしておかないと社内でニートになってしまうので、お勉強を兼ねてGoのWebフレームワークのEchoを使ったアプリケーションを作成中です。そのなかでボトルネック調査をする必要があったので、Opentracing形式のトレースアプリケーションであるJaegerをローカル環境で使ってみたいと思います。Framework)です。frameworkだそうです。特徴を洗い出してみます。はやいGoのなかでもパフォーマンスがいいと言われているGinに比べても十分な速度がでていることが公式のGitHubにのってました。Ginは34.4kとGinの方が人気なのは間違いありませんので、プロジェクトによって見極める必要はありそうです。Goの場合は標準のnet/httpライブラリがそこそこ優秀なので簡単なAPI作成であればWAF不要論もあります。公式ドキュメントが優秀Echoの場合、Ginに比べて公式のドキュメントが充実しているような気がしました。気のせいかもしれません。Ginの方はドキュメントにDISQUSのコメント欄があります。これはいいアイディアですね。Echoの公式ドキュメントGinの公式ドキュメントさて、Echoがいいという話はこんなところにして早速jaegerの実装してみます。Inc.がOSSとして公開した分散トレーシングシステムです。クライアントが提供されていることが魅力です。トレーシングの結果収集もOpenTracingとしてドキュメントがありますので、別言語にも移植できそうです。(Nimに移植しますかね・・・。)ともかく、かっこいいですね。tracingJaegerの実装と関係ないコードは省いてます。handler.GetColor())log.Fatal(e.Start(":9090"))}echo.New()したあとに、echo-contribで提供されているjaegerteacingを呼びます。これだけで、各APIの呼び出しをrouterごとに記録できるようになっています。spanという機能を使うことで実現できます。/get/:usernameというAPIのハンドラーを見てみます。childspanを指定してます。jaegerで結果を見るjaegerを起動します。dockerを使います。(あらかじめDockerコンテナが動く環境を作っておきます。jaegertracing/all-in-one:1.9不要な開放ポートがありますが、めんどくさいのでドキュメントそのままです。起動すると、jaegerUIがhttp://localhost:16686/で立ち上がります。さきほど作ったEchoサーバーも立ち上げます。main.goAPIをコールしてみるとTracingされているのがわかります。/get/:usernameというAPIのコールも出ています。parameterなのですが、APIコール時にtubone24というユーザー名を設定しコールしたことがわかります。1.04sかかってますね・・・。childspanも無事記録してます。バックエンド(GitHub)へのコールはそこまで0.48msとそこまで遅くはないみたいです。別のところにボトルネックがあるんですかね・・。結論jaegerでトレーシングが簡単にできましたが、ボトルネック発見は難しいということがよくわかりました。