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