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, in 
    doData()
  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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です