概要
PyroscopeというContinous Profilingのツールを導入してみた。
Continous Profilingについてはこちら参照。 What is continuous profiling?
今年に入ってからGrafanaが買収したらしい。
Grafana Labs が Pyroscope を買収してコード プロファイリング機能を追加
買収してからは、Grafana Pyroscopeが正式名称?ぽい。
Grafanaにプラグインが用意されているので連携することもできるが、Pyroscope単体にもUIが用意されている。
Demoが用意されているので触ってみると何が見れるか分かりやすいかも。
OSSとしてコードが公開されているので実装が気になる場合は見に行くこともできる。
導入
構成について先に目を通しておくと良い。
1. Pyroscope Serverの導入
DockerHubにイメージがプッシュされているのでこちらを利用することができる。
Dockerの導入ガイドはこちら。
Kubernetesの導入ガイドもある。
2. アプリケーション側でプロファイリングの有効化
アプリケーション側でプロファイリングの設定およびエージェントのインストール。
基本はPush型での対応になるが、Goの場合はPull型の対応があり、Pyroscopeサーバーでターゲットの管理ができる。
GoでPull型で導入する場合は、次のようにターゲットを管理することができる。
ここでは設定していないが、データ保持期間は設定したほうが良さそう。デフォルトでは無制限に保持するらしい。 cf. Data retention
サンプルコード
examplesに色々例が用意されている。
自分の管理しているアプリケーションで導入した例は下記。
ハマったところ
パスワード認証の初期設定
PyroscopeにはAPI KEYやOAuth2、パスワード認証の仕組みが用意されている。
パスワード認証で初期の認証情報設定をする際にドキュメントを読み違えて少しハマった。
初期の認証情報をセットするには次のような感じで設定ファイルに記載する。
ちゃんと読むとconfiguring-built-in-admin-userのところで記載があるのだが、CLIでしか設定変更できないものだと勘違いしてムダにハマってしまった...。
pprof
Pyroscope側の話ではなく、Goのアプリケーション側の話だが、pprofの設定でハマった。
それについてはDefaultServeMux以外でpprofを使う方法に記事を書いたのでそちらを参照。
所感
OSSで利用できるプロファイルングツールを以前から探し求めていたのだが、Pyroscopeは導入がしやすく、使いやすいUIが用意されていて良さそう。GoならPull型も対応していて良い。