Pages

2011/07/11

[logger > syslog] の代わりに [mongoimport > mongodb] を使ってみる。

loggerでsyslogに書くように、echoひとつでmongodbにもストアできる。
 


 

godではwatch対象アプリの標準出力をコマンドに渡せる、loggerでsyslogへというのが定番のよう。
でもsyslogってのも今更感があったのでmongoimportに渡してみたらmongodbに直行してくれた。
 


さて、mongoimportをつかって適当な文字列をmongodbにストアするには、下記のようにする。

# echo hogehoge | mongoimport -d logger -c rawdata --type tsv -f value
connected to: 127.0.0.1
imported 1 objects


通常インポートに使う文字列はjsonだが、typeをtsvにしているので指定した1つのフィールドに収めてimportしてするという次第。

ドキュメントを確認する。

> db.rawdata.find()
{ "_id" : ObjectId("4e198edee39b019df5a93157"), "value" : "hogehoge" }



ちなみにタブがあったら"field1","field2".. と勝手にずれる。


csvでカンマ区切りもいける。

# echo hogehoge,piyopiyo | mongoimport -d logger -c rawdata --type csv -f value1,value2
connected to: 127.0.0.1
imported 1 objects

> db.rawdata.find()
{ "_id" : ObjectId("4e198edee39b019df5a93157"), "value" : "hogehoge" }
{ "_id" : ObjectId("4e198f10e39b019df5a93158"), "value1" : "hogehoge", "value2" : "piyopiyo" }




god のコンフィグでこんな感じにすると、STDOUTとSTDERRがmongodbに入っていった。
 


w.log_cmd = 'mongoimport -d logger -c rawdata --type tsv -f value'
w.err_log_cmd = 'mongoimport -d logger -c rawdata_err --type tsv -f value'

 




そのあとどうするかは特に決めてないが、、MRするか。
 

1 件のコメント:

syslog-ngでsyslogをmongodbに直行させる | SawanoBlog 2G さんのコメント...

[...] 少々前に似たような記事、logger代わりにmongoimportを上げた。 [...]

コメントを投稿