ixixixixixixi

ixixiのblogです. twitterは@ixixi

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のサイトに行きます

https://cloudant.com/

f:id:ixixixi:20120212001139p:plain

右上のSign Upから,新規登録画面へ.

プランの選択があります.

f:id:ixixixi:20120212001031p:plain

どのプランも30日のFree Trialができますが、クレジットカード情報の入力すら不要である無料のOxgenプランを選んでおきましょう.

250MBの容量と、月50万回のrequestが無料で使えます.

Sign Upしましょう. 

f:id:ixixixi:20120212001226p:plain

UsernameはホストされるCouchDBのドメイン名になります.

アカウント情報を入力しましょう.

f:id:ixixixi:20120212001651p:plain

規約を読んだらSign Upで登録完了.

そのまま自動的にログイン後の画面に移ります.

f:id:ixixixi:20120212001722p:plain

これでもうCouchDBが使えるようになりました.

 

CouchDBはRESTfullなDBですが、ホストされているCouchDBのURLは真ん中の 「Your URL」と表示されている https://{登録アカウント名}.cloudant.com です.
f:id:ixixixi:20120212002327p:plain

ここまで2分も掛からなかったのでは無いでしょうか.

 
 
折角なので、少しだけWebの管理画面を触ってみましょう.
最初は、documentを入れる単位であるdatabaseは勿論ありません.

画面の上の方に、「databaseが何も無いのでまず1つ最初に作ってね」と表示されています.

f:id:ixixixi:20120212002453p:plain

試しに"hello"というdatabaseを作ってみましょう.

database名を入れてcreateするだけです.

f:id:ixixixi:20120212003054p:plain

これでhelloというdatabaseが出来ました.

databaseのURL(databaseに対してRESTでリクエストを投げる先)は、

https://{登録アカウント名}.cloudant.com/hello

です. 

f:id:ixixixi:20120212003147p:plain

また、Cloudantの管理画面以外にも、CouchDBビルトインのGUI(Futon)も見ることが出来ます. 

https://{登録アカウント名}.cloudant.com/_utils

がそのURLです.

「CloudantのCouchDB」ではなく素の「Apache CouchDB」を扱うのでしたら、こちらの画面を見ることが多いかも知れません.

f:id:ixixixi:20120212004128p:plain 

作ったdatabaseに対して操作をするにはどうすれば良いでしょうか.

これも同じく管理画面からもできますが、CouchDBはRESTfullなので、curlで全ての操作が出来ます.

実は、親切なことに画面の下の方にサンプルが書いています. 

f:id:ixixixi:20120212003044p:plain

基本的に、登録したアカウント名とパスワードのBASIC認証curlすれば 良いということですね.

(※Database毎に、アカウント名/パスワード代わりに使えるAPI Keyというものを発行してPermission設定をすることも出来ます.)

ここまで来たら,もう普通のCouchDBとして好きに扱えるので,

CouchDBそのものに対するcurlでの操作については,

下記入門記事や

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

f:id:ixixixi:20120212022545p:plain

documentのKeyをクリックすれば、documentの中身を見ることができます.

f:id:ixixixi:20120212022633p:plain

勿論、中身はJSONです.

(どちらの画面でも、Value/Souce領域をクリックするとそのままドキュメントの編集もできます.)

f:id:ixixixi:20120212022718p:plain 

今回のテーマは、お手軽にCloudantのCouchDBの環境を手に入れる&Fluentdからデータを流しこむ準備までなので、具体的な集計・解析の例まで紹介しませんでした.

その内、CouchDBを使ったリアルタイム集計の話などするかも知れません. 

 

Time to relax!