Papertrailを試してみる

以前、インティメートマージャーの松田さんが↓のブログで、

MackerelPapertrailRundeckを紹介してて、特にpapertrailが気になっていたのですが、
先日aerobatic(https://www.aerobatic.com/)というGitにPushするだけで簡単に静的サイトをホスティング出来るサービスの↓の”AWS Lambda Powered Continuous Deployment”というブログを読んでいたら、
https://www.aerobatic.com/blog/lambda-continuous-deployment

↓って記述を見かけて、なんか良さそうだな、と。

Lambda does send stdout to CloudWatch which is ok for isolated testing, but because the logs aren’t searchable, quickly becomes unwieldy when troubleshooting a Lambda function receiving any sort of load.

AWS Lambdaは標準出力をCloudWatchに送ります。それはisolatedなテストを行うにはOKだけど、ログはSearchableではなく、トラブルシューティングの時などLambdaファンクションがそれなりのロードを受けると、すぐにかさばって扱いにくくなってしまいます。

Our solution is to send log events from the Lambda function to a 3rd party logging service. We use Papertrail and highly recommend it. The winston-papertrail module provides a winston transport that handles forwarding log entries to Papertrail.

私たちのソリューションはイベントログをLambdaファンクションから3rdパーティーのロギングサービスに送る、というものです。私たちはPapertrailを使っていて高くオススメしています。winston-papertrailモジュールは(Node.jsのロギングライブラリである)winston転送を提供し、ログエントリのPapertrailへのフォワーディングを行います。

ということで、さっそく試してみたいと思います。

まずは、https://papertrailapp.com/ でアカウントを作ります。まずはFree Planにしてみました。
Screen Shot 2016-04-03 at 19.10.23
条件的には↓のような感じ。ちょっと試すには十分な量かな、と。
– Free
– 100 MB/month
– Additional 5 GB first month
– 48 hours search
– 7 days archive
– Unlimited systems
– Unlimited users

また、papertrailは↓のようにS3バケットにexport出来たり、
http://help.papertrailapp.com/kb/how-it-works/permanent-log-archives/

S3+Amazon EMRを使って解析を行ったりすることもできて、多機能です。
http://help.papertrailapp.com/kb/analytics/introduction-to-hadoop-and-hive/
コレといって自分でソフトウェアをインストールしたりせず↓大量のログデータに対してこんな事が出来るなんて良い時代になったものです。

SELECT AVERAGE(response_time) FROM request_events GROUP BY request_path
SELECT SUM(data_transferred) FROM api_logs GROUP BY account_id WHERE ds > '2011-01-01' AND ds < '2011-01-31'

Papertrailを試す作業に戻ります。
Lambdaファンクションを作ります。適当にHello Worldとかで。
Screen Shot 2016-04-03 at 20.17.07

ローカルで↓のようなコードを書いて、

  1 console.log('Loading function');
  2
  3 var winston = require('winston');
  4 require('winston-papertrail').Papertrail;
  5
  6 exports.handler = function(event, context) {
  7     var logger = new winston.Logger({
  8         transports: [
  9             new winston.transports.Papertrail({
 10                 level: 'info',
 11                 hostname: 'xxxx',
 12                 host: 'logs4.papertrailapp.com',
 13                 port: xxxx
 14             })
 15         ]
 16     });
 17     logger.info("hoge");
 18     logger.info("foo");
 19     logger.info("bar");
 20     logger.info("buzz");
 21     context.succeed("done");
 22 };

npmでwinstonとwinston-papertrailをカレントディレクトリにインストールして

$ npm install winston
winston@2.2.0 node_modules/winston
├── cycle@1.0.3
├── stack-trace@0.0.9
├── eyes@0.1.8
├── isstream@0.1.2
├── async@1.0.0
├── pkginfo@0.3.1
└── colors@1.0.3
$ npm install winston-papertrail
winston-papertrail@1.0.2 node_modules/winston-papertrail
└── glossy@0.1.7

↓このディレクトリ内のファイルをzipで固めてLambdaにアップロードして実行します。

$ ls -l
total 8
-rw-r--r--  1 eiji  1896053708  502  4  3 19:44 hello.js
drwxr-xr-x  3 eiji  1896053708  102  4  3 19:46 node_modules
$ zip -r hello.zip ./*
  adding: hello.js (deflated 51%)
  adding: node_modules/ (stored 0%)
  adding: node_modules/winston/ (stored 0%)
  adding: node_modules/winston/CHANGELOG.md (deflated 67%)
  adding: node_modules/winston/lib/ (stored 0%)
 〜略〜

↓こんな感じ。
Screen Shot 2016-04-03 at 20.19.02

試しにもう一つログの突っ込み先を作ってみたり、してみたりして。
Screen_Shot_2016-04-03_at_20_10_07___Flickr_-_Photo_Sharing_

で、Lambdaファンクションをバンバン叩くと↓のように。
そりゃまぁ、ホントのホントにリアルタイムってわけにはいかないですが便利です。
Screen Shot 2016-04-03 at 20.20.53

こういう検索機能とか便利ですね〜(試しに”hoge”で…)
Screen Shot 2016-04-03 at 20.22.32

シェアする

  • このエントリーをはてなブックマークに追加

フォローする