皆さん、こんにちは。アピリオ北嵐です。今回のTipsはHerokuアプリケーションを使う上でなくてはならないアドオンであるPapertrailを取り上げてみたいと思います。PapertrailはHerokuアプリが出力するログを管理するアドオンであり、データを保存するためのディスクを持たないHerokuはこのPapertrailなしではログを保持・保管することができません。Herokuサーバー上でのテストが始まるITフェーズ以降では、Papertrailを使ってログを参照する頻度は高いので、しっかりと使いこなす必要があると言えます。
1. Papertrailに出力されるログの種類
Papertrailに出力されるログはアプリケーションが出力するログだけではなく、Heroku上の様々なコンポーネントがここにログを出力します。代表的なものを下記に示します。
プログラムの種類 | 説明 |
app/web | Dyno上で稼働するアプリケーションが出力したログ |
app/api | Dyno上へのデプロイ状況、環境変数の変更など |
app/heroku-postgres | Heroku Postgresサーバーが出力したログ |
app/heroku-redis | Heroku Redisサーバーが出力したログ |
app/herokuconnect | Heroku Connectが出力したログ |
heroku/router | HTTPサーバーレベルの入出力ログ |
heroku/web | Dnyo自体の稼働状況を示すログ |
通常、Papertrailのログには上記に示したような各コンポーネントのログが混在する状態で出力されます。そのため、効率的にログを参照するためには少し工夫する必要があります。
2. タイムゾーンの指定
3. ログの検索
複数のキーワードをAND条件で繋ぎたい場合は、スペースで区切ります。 例:heroku/router POST OR条件で繋ぎたい場合は OR で繋ぎます。 例:heroku/router OR heroku/postgres キーワードにスペースを含めたい場合はダブルクォーテーションで囲みます。 例:"ERROR 12" app/web 特定のキーワードを含めたくない場合は、文字列の前にーを付けます。 例:heroku/router -200
予め準備されたキーワードを選択リストから選ぶこともできます。また、カスタムキーワードをこのリストに登録することも可能です。
キーワード | 表示されるログ |
Deploys | Dyno上へのデプロイ状況、環境変数の変更など。app/api プログラムが出力したログ |
Dyno state changes | 各Dynoの稼働状況(ステータス) |
Platform errors | Heroku DynoやHeroku Routerが出力するエラーログ(H12 タイムアウトなど) |
Scheduler jobs | Heroku Schedulerが起動したアプリケーションが出力するログ |
Web app output | Dyno上のアプリケーションが出力するログ |
Papertrailには大量のログが出力されるため、検索による絞り込みだけでは目的とするログをうまく参照できません。そんな時に役立つのが特定の時間帯のログを表示する機能です。画面下の時計アイコンのあるボタンをクリックして表示させたい時間を指定します。タイムゾーンが指定してあれば、日本時間を入力できます。
よく使うのは、検索により目的のログが出力された時間を特定し、その時間帯のログを上記機能を使って表示する方法です。大量のログが出力されると目的のログを見つけることが面倒になりますので、この時間指定の機能は是非覚えておいて下さい。
5. ログの省略
6. アラートの送信
>1時間単位のログの取得 > ## には現在から遡って取得するログファイルの数を指定 > ==api-token== には自分のユーザーのAPI Tokenを指定 seq 1 ## | xargs -I {} date -u -v-{}H +%Y-%m-%d-%H | \ xargs -I {} curl --progress-bar -f --no-include -o {}.tsv.gz \ -L -H "X-Papertrail-Token: ==api-token==" https://papertrailapp.com/api/v1/archives/{}/download >1日単位のログの取得 > ## には現在から遡って取得するログファイルの数を指定 > ==api-token== には自分のユーザーのAPI Tokenを指定 seq 1 ## | xargs -I {} date -u -v-{}d +%Y-%m-%d | \ xargs -I {} curl --progress-bar -f --no-include -o {}.tsv.gz \ -L -H "X-Papertrail-Token: ==api-token==" https://papertrailapp.com/api/v1/archives/{}/download
ログが1日単位で保管されているか、1時間単位で保管されているかで、実行するコマンドの書式が異なります。##には取得するファイル数を指定して下さい。例えば1日単位で保存されている場合に60を指定すると、今日から遡って60日分(当日分はアーカイブされていないので除く)のファイルがgzip形式の圧縮ファイルとしてダウンロードされます。
ダウンロードされた大量の.gzファイルは下記のコマンドで一括解凍できます。
find . -name "*.gz" -print0 | xargs -0 -n1 gzip -d
8. ログの共有とグルーピング
通常、1つのHerokuアプリに1つのPapertrailの契約(subscription)を紐付けますが、複数のアプリで1つの契約を共有することもできます。共有したい場合は、既存アプリのPapertrailアドオンの設定から「Attach to another app」を選び、Herokuアプリを選択します。
共有しているアプリは「Dashboard」から確認することができます。また、共有しているアプリの中から一部のアプリのログのみを表示させたい場合は、”グループ”機能を使用します(画面右のMyGroupに登録済みのグループが表示されます)。複数のアプリケーションを1つの契約に紐付けるケースでは便利な機能 です。
9. コマンド操作
heroku addons:open papertrail -a アプリ名
上記のコマンドでブラウザが開き、当該アプリのログ画面が開きます。
いかがでしたでしょうか。 たかがログ管理とは言えないほど、様々な機能が提供されているPapertrailです。Herokuの監視および障害解析時には欠かせないツールですので、しっかりと使いこなして効率的にログを参照できるようにして下さい。
著者について
Naoki Kitaarashi のコンテンツをもっと見る