fluentd+mongo-plugin+MongoDBでコレクション名にハマったけど、僕がバカなだけでした。
fluentd+mongo-plugin+MongoDBでオシャレにログを貯めこんでみようと思いました。
構築はこちらのblogを参考にほぼそのままポチっただけ。
http://d.hatena.ne.jp/wyukawa/20120207/1328625443
まず下準備
fluentdで構造化した場合にログ出しているホストのfluentdでこんなタグを付けているログ。
2012-04-17T19:20:28+09:00 apache_log.hoge_server.192.168.1.10 {〜〜割愛〜〜}
まあ、文字列+数値.数値的なタグで、これを
<store> type mongo # mongodb db + collection database apache collection apache tag_mapped # mongodb host + port host localhost port 27017 # interval flush_interval 1s </store>
こんなconfigでfluentdからMongoDBに入れていったんですね。
ここからが本題
で、ちゃんとMongoDBに入ったかなーと思い確認しようとmongoコマンドを打ってシェルから実行すると・・・・
> show collections; system.indexes apache_log.hoge_server.192.168.1.10 > db.apache_log.hoge_server.192.168.1.10.find(); Tue Apr 17 20:27:06 SyntaxError: missing ; before statement (shell):1
でsyntax errorになる。コレクション名の「apache_log.hoge_server.192.168.1.10」に各種クォーテーション付けて括ってみても駄目。
公式リファレンス見ると禁止文字とか無いし!そもそもコレクション出来ているし!俺悪くないし!!とかわーぎゃー言っていて、同じ問題が海外でもあるよーってblog見せて貰って、あーこれbugだわー俺ぐらいのスーパーハカーは分かるわーこれメジャーアップデート待つしか無いわーとか思って
教えてもらった同じ問題。海外の人も困っていた。URL
で、どうなったかというと
で、60秒くらいで
@oranie db["hoge.fuga.127.0.0.1"].find() とかではどうなりますか?
2012-04-17 20:04:48 via YoruFukurou to @oranie
で、試すと・・・・・・・おおおおお!!!!!出来た!!!!
さすがid:sfujiwaraさんや!やっぱり違うぜ!いやーこれはMongoDB上級者じゃないと分からないんだなー、とめでたしめでたしだったと思いきや、さっき自分でつぶやいた海外のblogにも
This works for me when my collection names include special characters: db["3mLgQAYJCq6_20110802"].findOne();
と記載が・・・・・・・・・・・・・・・・・・・・・
結論:ちゃんとググって良く読みましょう。
本当にお騒がせしましたm(_ _)m
MongoDBのコレクション名が数値で終わると初心者には危険ですね!