MongoDB Munin Pluginを導入したけど、グラフが表示されずハマったのでメモしておきます。
プラグイン導入
MuninとMongoDBは導入済みで、プラグインは下記のように導入しました。
# cd /usr/local/src # wget -c http://github.com/erh/mongo-munin/tarball/master -O master.tar.gz # tar xvf master.tar.gz # cp -a erh-mongo-munin-08e7aeb/mongo_{conn,mem,ops} /usr/share/munin/plugins/ # ln -s /usr/share/munin/plugins/mongo_conn /etc/munin/plugins/mongo_conn # ln -s /usr/share/munin/plugins/mongo_mem /etc/munin/plugins/mongo_mem # ln -s /usr/share/munin/plugins/mongo_ops /etc/munin/plugins/mongo_ops # rm -fr erh-mongo-munin-08e7aeb # /etc/rc.d/init.d/munin-node restart ※「OK」と表示されればOK
プラグイン動作確認
munin-runで値が取れるか確認できるのでやってみました。
# munin-run mongo_conn # munin-run mongo_mem # munin-run mongo_ops
上記コマンド3つ共に下記のエラーがでました。
Traceback (most recent call last): File "/etc/munin/plugins/mongo_ops", line 56, indoData() File "/etc/munin/plugins/mongo_ops", line 33, in doData ss = getServerStatus() File "/etc/munin/plugins/mongo_ops", line 28, in getServerStatus raw = urllib2.urlopen(req).read() File "/usr/lib64/python2.6/urllib2.py", line 126, in urlopen return _opener.open(url, data, timeout) File "/usr/lib64/python2.6/urllib2.py", line 391, in open response = self._open(req, data) File "/usr/lib64/python2.6/urllib2.py", line 409, in _open '_open', req) File "/usr/lib64/python2.6/urllib2.py", line 369, in _call_chain result = func(*args) File "/usr/lib64/python2.6/urllib2.py", line 1190, in http_open return self.do_open(httplib.HTTPConnection, req) File "/usr/lib64/python2.6/urllib2.py", line 1165, in do_open raise URLError(err)
ソース確認
最終的にURLErrorと出ていて、Pythonのバグではないと思うので、その直前の/etc/munin/plugins/mongo_opsの28行目から上を眺めます。
def getServerStatus(): host = os.environ.get("host", "127.0.0.1") port = 28017 url = "http://%s:%d/_status" % (host, port)
http://127.0.0.1:28017/_status にアクセスしているようなので投げてみましたが、繋がらない。
$ curl http://127.0.0.1:28017/_status > curl: (7) couldn't connect to host
ググる
そもそもMongoDBはデフォルトでは27017番ポートを使っている。
28017番ポートは何ぞやとググってみたら、HTTPインターフェースだと解りました。
https://wiki.mongodb.com/pages/viewpage.action?pageId=7831865
設定ファイルにrest=yesを入れるとか、起動時に–restを付けるとかもやってみたけど上手く行かず。
結論
今回、MongoDBのインストールにepelを使ったが、これがrestに対応していない疑惑!
# yum --enablerepo=epel -y install mongodb mongodb-server
諦めて、10genのを導入したら、初期設定のままで上手く行きました。
# vi /etc/yum.repos.d/mongodb.repo
[mongodb] name=MongoDB Repository baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/ gpgcheck=0 enabled=1
# yum -y install mongo-10gen mongo-10gen-server