oranie's blog

旧:iをgに変えると・・・なんだっけ・・・

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だわー俺ぐらいのスーパーハカーは分かるわーこれメジャーアップデート待つしか無いわーとか思って

とか( ー`дー´)キリッとつぶやいた訳です。

で、どうなったかというと

で、60秒くらいで

というお答えを頂きました。


で、試すと・・・・・・・おおおおお!!!!!出来た!!!!
さすがid:sfujiwaraさんや!やっぱり違うぜ!いやーこれはMongoDB上級者じゃないと分からないんだなー、とめでたしめでたしだったと思いきや、さっき自分でつぶやいた海外のblogにも

This works for me when my collection names include special characters:

db["3mLgQAYJCq6_20110802"].findOne();

と記載が・・・・・・・・・・・・・・・・・・・・・


結論:ちゃんとググって良く読みましょう。


本当にお騒がせしましたm(_ _)m

MongoDBのコレクション名が数値で終わると初心者には危険ですね!