📈
Herokuで稼働しているアプリケーションのメトリクスを収集する
Herokuからの移行先はいくつかあります。
自分は移行先の1つとして Fly.io を検討しています。Fly.ioには完全無料枠がありますが、使用できるメモリがHerokuの半分の256MBとなっています。
メモリがHerokuの半分でもアプリケーションが動作するか、確認したいと思いました。
この記事では、Herokuからの移行先を検討するために、以下のことを行います。
- Herokuの実験的機能Heroku Labsの log-runtime-metrics機能 を使って、ログにメトリクスを出す
- ログをPapertrailで溜める
- ログをダウンロード・整形する
- Spreadsheetで可視化する
手順
-
Herokuのlog-runtime-metrics機能を有効にする
heroku labs:enable log-runtime-metrics heroku restart
-
ログにメトリクスが出ているか確認する
heroku logs -t
メトリクスが出ていれば、20秒に1回の頻度で以下のような形式のログが出力されるはずです。
source=app.1 dyno=heroku.123456789.00000000-0000-0000-0000-000000000000 sample#load_avg_1m=2.46 sample#load_avg_5m=1.06 sample#load_avg_15m=0.99 source=app.1 dyno=heroku.123456789.00000000-0000-0000-0000-000000000000 sample#memory_total=54.45MB sample#memory_rss=48.75MB sample#memory_cache=5.70MB sample#memory_swap=0.00MB sample#memory_pgpgin=27085pages sample#memory_pgpgout=19278pages sample#memory_quota=512.00MB
-
HerokuのアドオンにPapertrailを追加する
Papertrailは無料プランを使うよう設定しました。無料プランだと7日間、ログを溜められます。有料プランにすると1年間溜められるそうです。
heroku addons:create papertrail:choklad
-
ログを溜める
-
Papertrailに溜まったログをダウンロードする
mkdir logs && cd logs curl -sH 'X-Papertrail-Token: YOUR-HTTP-API-KEY' https://papertrailapp.com/api/v1/archives.json | grep -o '"filename":"[^"]*"' | egrep -o '[0-9-]+' | awk '$0 >= "YYYY-MM-DD" && $0 < "YYYY-MM-DD" { print "output " $0 ".tsv.gz" print "url https://papertrailapp.com/api/v1/archives/" $0 "/download" }' | curl --progress-bar -fLH 'X-Papertrail-Token: YOUR-HTTP-API-KEY' -K-
-
YOUR-HTTP-API-KEY
には https://papertrailapp.com/account/profile のAPI Tokenを入力してください。 -
YYYY-MM-DD
にはダウンロードするログの開始日、終了日を入力します。- 全てダウンロードするなら、
$0 >= "YYYY-MM-DD" && $0 < "YYYY-MM-DD"
を削ってください。
- 全てダウンロードするなら、
-
カレントディレクトリに
logs
ディレクトリを作成し、その中にYYYY-MM-DD-HH.tsv.gz
が保存されます。
-
-
tsv形式に整形する
今回はメモリ使用量(
memory_total
)を見たいので、そこだけgrepして、日時 memory_total
のtsv形式で保存しました。gzip -cd *.tsv.gz | grep memory_total | awk -F\t '{printf "%s\t%s\n", $2, $10}' | sed 's/\(.*\)\t.*memory_total=\([0-9]*\.[0-9]*\)MB.*/\1\t\2/g' > ../memory_total.tsv
-
tsvファイルを可視化する
あとは煮るなり焼くなり。自分はSpreadsheetに貼り付けて、グラフにしました。
参考URL
Discussion