こんにちは。ハウスダストで喉がやられたきたけーです。
herokuでNodeアプリを公開するとき、ログまわりをどうしようかあれこれ考えたときのメモです。
papertrail addon
ログを管理するためにpapertrail addonを使います。
papertrailはログのアーカイブをS3に転送することも可能です。
loggly addonも検討したのですが、「日本語で検索できる」、「デフォルトでアラート通知ができる」という点で優れている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アプリを公開するとき、ログまわりをどうしようか考えたときのメモでした。