herokuでNodeアプリを公開するとき、ログまわりをどうしようか考えたときのメモ

こんにちは。ハウスダストで喉がやられたきたけーです。

herokuでNodeアプリを公開するとき、ログまわりをどうしようかあれこれ考えたときのメモです。

papertrail addon

ログを管理するためにpapertrail addonを使います。
papertrailはログのアーカイブをS3に転送することも可能です。 loggly addonも検討したのですが、「日本語で検索できる」、「デフォルトでアラート通知ができる」という点で優れているpapertrailを選択しました。

papertrail

ログまわりのモジュール

モジュールの選択。
標準出力やファイルなど複数の対象に書き込めるwinstonというモジュールを検討したのですが、herokuのloggingのドキュメント

Anything written to standard out (stdout) or 
standard error (stderr) is captured into your logs.  
This means that you can log from anywhere in your application code 
with a simple output  statement.  

とあるように、標準出力、標準エラー出力をログとしてキャプチャしてくれます。
デプロイ先がherokuに限定されているならば、標準のutilモジュールconsoleモジュールで十分ではないでしょうか。他所に移すこともありえるならばwinston使うとか、ログのrotateをどうするか等を考えないといけないですね。

追記: consoleモジュールはIOでブロックしてしてしまうので、winstonのようなノンブロッキングなモジュールを利用したほうがよいです。

S3との連携

S3と連携するときは、「アーカイブを保存するbucketの作成」と「papertrail側での設定」の2つの作業が必要になります。ここを参考にしながら設定を行いました。

アーカイブを保存するbucketの作成

S3 Management Consoleでアーカイブを保存するbucketを作成します。
bucketを適当な名前で作成して、「Properties」→「Permissions」から新しく項目を作成します。 「Grantee」にaws あっとまーく papertrailapp.comと入力、「Upload / Delete」にチェックをつけて保存します。

papertrail側での設定

herokuのアプリ一覧の画面から、アーカイブを保存したいアプリ名→「Papertrail」addonと順に選択していき、papertrailの「Account Settings」画面に移動します。画面の一番下に「Archive Copy」という欄があるので、bucket名とDicretory名(デフォルトはpapertrail/logs/:id)を入力して、保存します。
これで連携の手順は完了です。

以上、herokuでNodeアプリを公開するとき、ログまわりをどうしようか考えたときのメモでした。