そうだ関所を建てよう

こんにちは、新卒一年目が終わったばかりの山浦(arumi8go)と申します。
私は普段 VICOLLEというサービスのサーバーサイドエンジニアをやっています。

今回は、残念ながら体調不良で参加できなかったSpeeeKaiで話す予定だったRack MiddlewareとmongoDBを使用してログ管理をしようとした話をします。

SpeeeKaigiについてはこちらを参考にしてください。

tech.speee.jp

動機

VICOLLEの開発中にとある上司との会話で「どのタイミングでどのAPIが何回叩かれるか把握したい」という話から作り始めました。 また技術選定については触れたかったけど今までちゃんと触れていなかったRack MiddlewareとmongoDBを選び、一から学びつつゆっくり作りました。

機能

アクセスログ記録

この機能が今回のメイン機能となります。

f:id:arumi8go:20170306163520p:plain

上記の図のように飛んできたRequestを一度 Rack Middleware で受取りアクセスしようとしているパスやリクエストパラメータをmongoDBに記録します.

アクセスログ参照

こちらはログを参照するダッシュボードをRails Engineでマウントする形を取っています。

f:id:arumi8go:20170306164300p:plain

おしゃれな見た目でログが追える様になる予定でしたが、私のセンスの無さと時間の都合でダサダサなダッシュボードになっています……

アクセス制限

こちらの機能はおまけ的なモノですが、ダッシュボードのセキュリティについて考えているときに思いついて搭載しました。

f:id:arumi8go:20170306164713p:plain

上記の図のようにRequestがきたタイミングで予め指定したIPアドレスのブラックリストとホワイトリストを参照し該当するIPならRailsアプリケーションにRequestを通さずそのまま403を返すようになっています。

おわり

今回作っていて思ったのはもう少し難しい事にチャレンジしても良かったなということです。
学んだ知識を活かして難易度の高いテーマに挑んでいれば、もっと面白いものが作れ面白い発表ができたかなと!

ただこの関所くんもコツコツと改良を行っています。最終的にはコードを綺麗にしてGemにして公開できればいいなと思っています。

このつたない文章を最後まで読んでいただき有難う御座いました。 次のSpeeeKaiではもっと面白い発表を出来るように頑張ります。