📈

Herokuで稼働しているアプリケーションのメトリクスを収集する

2022/10/21に公開

Herokuの無料プランが11月28日に終了 します。

Herokuからの移行先はいくつかあります。

自分は移行先の1つとして Fly.io を検討しています。Fly.ioには完全無料枠がありますが、使用できるメモリがHerokuの半分の256MBとなっています。
メモリがHerokuの半分でもアプリケーションが動作するか、確認したいと思いました。

この記事では、Herokuからの移行先を検討するために、以下のことを行います。

  • Herokuの実験的機能Heroku Labsの log-runtime-metrics機能 を使って、ログにメトリクスを出す
  • ログをPapertrailで溜める
  • ログをダウンロード・整形する
  • Spreadsheetで可視化する

手順

  1. Herokuのlog-runtime-metrics機能を有効にする

    heroku labs:enable log-runtime-metrics
    heroku restart
    
  2. ログにメトリクスが出ているか確認する

    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
    
  3. HerokuのアドオンにPapertrailを追加する

    Papertrailは無料プランを使うよう設定しました。無料プランだと7日間、ログを溜められます。有料プランにすると1年間溜められるそうです。

    heroku addons:create papertrail:choklad
    
  4. ログを溜める

  5. 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 が保存されます。

  6. 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
    
  7. tsvファイルを可視化する

    あとは煮るなり焼くなり。自分はSpreadsheetに貼り付けて、グラフにしました。

参考URL

https://devcenter.heroku.com/ja/articles/log-runtime-metrics

https://elements.heroku.com/addons/papertrail

https://www.papertrail.com/help/permanent-log-archives/

Discussion