ghaperf で GitHub Actions のパフォーマンス分析
GitHub Actions のパフォーマンス分析のための CLI である ghaperf を作ったので紹介します。
ghaperf の特徴
GitHub Actions のパフォーマンス分析のためのツールは他にも色々ありますが、それらと比べて ghaperf は以下の点で優れています。
- Composite Action 内の step や log group まで掘り下げてボトルネックを特定できる
- metrics を蓄積するためのバックエンドが不要で簡単に使える。かつ統計的な分析もある程度可能
ボトルネックをより掘り下げて特定できる
他の多くの分析ツールではボトルネックとなっている job や step を特定することが出来ますが、 composite action 内の step まで調べることが出来ません。
そのため、 composite action 内のどこがボトルネックなのかは特定できず、パフォーマンス改善の際に問題になります。
そこで ghaperf は action のログをパースして Composite Action の step も含めた全ての step にかかっている時間を分析し、遅くなっている step 及び log group を特定します。
composite action に限らず、 run step や JavaScript Action, Docker Action などでも log が適切に grouping されていればより詳細な分析が可能になります。
markdown でレポートを生成
ghaperf は分析結果のレポートを markdown で生成します(サンプル)。
レポートには生の step や log group 名が出てくるので見にくさを感じる方もいるかもしれませんが、ボトルネックとなっている step や log group 名が分かるので、実際の job の log を step や log group 名で検索しコードと照らし合わせることで問題の箇所が特定できます。
統計的な分析
ghaperf は workflow を指定して N (上限は 1,000) 個の workflow run の結果を統計的に分析することも出来ます (特定の job や workflow run の分析も出来ます)。
他の分析ツールのように metrics を中長期に渡って蓄積して分析することは出来ませんが、現時点のパフォーマンスに関してはある程度統計的に分析ができます。
matrix job の名前を正規化して同じ job として分析することも出来ます。
バックエンド不要で簡単に使える
他の分析ツールでは BigQuery や OpenTelemetry のオブザーバビリティバックエンド など metrics を蓄積するバックエンドが必要で、分析できるようにするのに多少ハードルがあるものも多いですが、 ghaperf ではそれらは不要なため簡単に使うことが出来ます。
現在遅くなっている workflow のボトルネックを調査したいがまだ他のツールをセットアップしてない場合、とりあえず ghaperf を使って分析してみてみると良いでしょう。
ghaperf でボトルネックを特定して満足できれば態々他のツールをセットアップしなくても済むこともあるでしょう。
他のツールとの使い分け
ghaperf は他の分析ツールを置き換えることを目指していません。
それよりも、 composite action 内の step のボトルネックの特定といった、他のツールで解決出来ない課題を解決するために作りました。
ghaperf では metrics をバックエンドに送って蓄積するといったことは対応していませんが、他のツールで実現できていることを ghaperf で再実装する意味はあまりないのでやる予定は今のところありません(今後必要になったら実装するかもしれません)。
なので、他のツールと組み合わせて使うことを想定しています。
さいごに
以上、 GitHub Actions のパフォーマンス分析のための CLI である ghaperf の紹介でした。
具体的なインストール方法や使い方などは公式のドキュメントを読んでください。
Discussion