Cloudantでお手軽CouchDB & Fluentdと連携
■Fluent meetup in Tokyo
最近Fluentdが盛り上がってますね.
先週のFluentd meetup in Japanというイベントでは、参加希望者180人以上、Ust視聴者累計500人以上と、相当な盛り上がりです.
ここではFluentdの紹介はしませんが、Fluentd本体については,作者の@frsyukiさんの資料が、Fluentdのプラグインについては@repeatedlyさんの資料がとても分かりやすくて素晴らしいです.
私も、去年あたりからfluentdのプラグインのfluent-plugin-couchという、fluentdでデータをCouchDBへ流すプラグインを書いていたので、Fluentd meetup in Tokyoの最後の枠で発表させて頂きました.
Fluentd meetupのイベント主催はmongodb-jp主催の@doryokujinさんだったということもあってか、参加者にMongoユーザが多かったですね.
セッションで、「MongoDBとは~」という説明無くMongoDBとFluentdの連携させる話が幾つか紹介されていましたが,殆どの参加者は平気なように見えました.
一方でCouchDBについては、プラグインの紹介以前に、CouchDBを触ったことのある方が相当少ない印象でした.
(実際、発表の中で、「CouchDBに触ったことのある方」と「MongoDBを触ったことのある方」に挙手していただいたのですが、120名ぐらい中、Couchに触れた事のある方は6~7名程度、MongoDBに触れたことのある方は50~60名程度と、圧倒的な差でした.)
そこで、個人的にはもっとCouchDBも触って欲しいなぁと思っているので、簡単に(多分2分ぐらいで)CouchDBを使う方法を紹介してみます.
ちゃんと検証するなら、Amazon EC2やオンプレミス環境でCouchDBをinstallして使うのも良いですが「試しにCouchDBに触れてみたい」のであれば、server/instanceの管理も不要で、料金もゼロ、installすら不要で使えるCloudantのCouchDBホスティングサービスが個人的にはオススメです.
- Cloudant社は、Y Combinator社の投資を受けたデータベースプラットホームの会社です。CouchDBのホスティングサービスや分析サービスの他にもBigCouchというApache CouchDBをforkしたプロジェクト(CouchDBにauto-shardingやクラスタ機能を統合拡張したもの)を進めていたりします.
■CloudantのCouchDBを使う
さて、では実際に登録から始めてみましょう.
cloudantのサイトに行きます
右上のSign Upから,新規登録画面へ.
プランの選択があります.
どのプランも30日のFree Trialができますが、クレジットカード情報の入力すら不要である無料のOxgenプランを選んでおきましょう.
250MBの容量と、月50万回のrequestが無料で使えます.
Sign Upしましょう.
UsernameはホストされるCouchDBのドメイン名になります.
アカウント情報を入力しましょう.
規約を読んだらSign Upで登録完了.
そのまま自動的にログイン後の画面に移ります.
これでもうCouchDBが使えるようになりました.
ここまで2分も掛からなかったのでは無いでしょうか.
画面の上の方に、「databaseが何も無いのでまず1つ最初に作ってね」と表示されています.
試しに"hello"というdatabaseを作ってみましょう.
database名を入れてcreateするだけです.
これでhelloというdatabaseが出来ました.
databaseのURL(databaseに対してRESTでリクエストを投げる先)は、
https://{登録アカウント名}.cloudant.com/hello
です.
また、Cloudantの管理画面以外にも、CouchDBビルトインのGUI(Futon)も見ることが出来ます.
https://{登録アカウント名}.cloudant.com/_utils
がそのURLです.
「CloudantのCouchDB」ではなく素の「Apache CouchDB」を扱うのでしたら、こちらの画面を見ることが多いかも知れません.
作ったdatabaseに対して操作をするにはどうすれば良いでしょうか.
これも同じく管理画面からもできますが、CouchDBはRESTfullなので、curlで全ての操作が出来ます.
実は、親切なことに画面の下の方にサンプルが書いています.
基本的に、登録したアカウント名とパスワードのBASIC認証でcurlすれば 良いということですね.
(※Database毎に、アカウント名/パスワード代わりに使えるAPI Keyというものを発行してPermission設定をすることも出来ます.)
ここまで来たら,もう普通のCouchDBとして好きに扱えるので,
下記入門記事や
http://www.atmarkit.co.jp/fdb/rensai/09_couchdb/02/couchdb01.html
CouchDB-jpで公開されているCouchDB: The Definitive Guideの翻訳
http://couchdb-jp.github.com/couchdb-guide/editions/1/ja/
等を読むと良いでしょう.非常に扱いやすいRESTfullなインタフェースです.
■fluent-plugin-couchを使ってドキュメントをfluentdで流し込んでみる
fluentdのinstallは済んでいるものとします.
$ gem install fluent-plugin-couch
これだけでfluent-plugin-couchのinstallは終了します.
では、このpluginを使って,先に使えるようにしたCloudantのCouchDBを使う様にに設定しましょう.
fluent.confに
<match couch.**> type couch database hello host {アカウント名}.cloudant.com port 443 protocol https user {アカウント名} password {パスワード} flush_interval 5s </match>
と書いて、fluentdを起動.
$ fluentd -c fluent.conf &
起動したら、標準入力をfluentdに流すfluent-catを使ってJSONメッセージを流します.
$ echo '{"message":"Hello Couch World!"}' | fluent-cat couch.doc
flush_intervalに5秒を設定したので、5秒以内にCouchDBの"hello"databaseにドキュメントが格納されます.
では、DocumentがCouchDBの"hello" databaseに入ったことを確認してみましょう.
$ curl -k -X GET 'https://{アカウント名}:{パスワード}@{アカウント名}.cloudant.com/hello/_all_docs'
と打つと、
{"total_rows":1,"offset":0,"rows":[ {"id":"7f3c2976786c09222735ef2c8f630520","key":"7f3c2976786c09222735ef2c8f630520","value":{"rev":"1-a4b14dac5db8e4f764aef016e42bc41b"}} ]}
というようなJSONが返ってきます. database内に格納されているdocumentの数を表す"total_rows"の値が1になっているので、databaseにdocumentが挿入されています.
- document IDとkeyは、CouchDBのデフォルトのinsertの動きでは自動採番されるようになっています.明示的に指定することも出来るのですが、pluginの動作としては自動採番としています. 挿入時のkeyに使用するフィールドを指定出来るようにすることは、今後の機能拡張対象です.
中身を見る時には、documentのIDを指定して、
$ curl -k -X GET 'https://{アカウント名}:{パスワード}@{アカウント名}.cloudant.com/hello/7f3c2976786c09222735ef2c8f630520'
とすれば、
{"_id":"7f3c2976786c09222735ef2c8f630520","_rev":"1-a4b14dac5db8e4f764aef016e42bc41b","message":"Hello Couch World!","etime":"2012-02-11T17:04:56Z"}
という風に、documentの中身のJSONが返ってきます.
WebUIのFutonで見ることもできます. (Cloudantの管理画面でも見れますが.)
https://cloudant.com/futon/database.html?{アカウント名}%2Fhello
documentのKeyをクリックすれば、documentの中身を見ることができます.
勿論、中身はJSONです.
(どちらの画面でも、Value/Souce領域をクリックするとそのままドキュメントの編集もできます.)
今回のテーマは、お手軽にCloudantのCouchDBの環境を手に入れる&Fluentdからデータを流しこむ準備までなので、具体的な集計・解析の例まで紹介しませんでした.
その内、CouchDBを使ったリアルタイム集計の話などするかも知れません.
Time to relax!