Permalink
Browse files

added alldb monitor

  • Loading branch information...
bibrost committed Jan 4, 2012
1 parent 3a0274a commit a3b2b89fd56d5f66cd568fd0cced9790cb9c263f
Showing with 380 additions and 0 deletions.
  1. +94 −0 mongo_collcount_alldb
  2. +99 −0 mongo_collsize_alldb
  3. +94 −0 mongo_indexsize_alldb
  4. +93 −0 mongo_storagesize_alldb
View
@@ -0,0 +1,94 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# vim: set sts=4 sw=4 encoding=utf-8
+
+# Copyright (c) 2010, Rene Jochum
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of the Rene Jochum nor the
+# names of its contributors may be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+from pymongo import Connection
+
+settings_host = '127.0.0.1'
+settings_port = 27017
+settings_db = 'mydb'
+
+
+def getCollstats():
+ con = Connection(settings_host, int(settings_port), slave_okay=True)
+
+ stats_tmp = {}
+ for dbname in con.database_names():
+ db = con[dbname]
+ for coll in db.collection_names():
+ if coll.startswith('system.'):
+ continue
+ stats = db.command("collstats", coll)
+ collname = coll.replace('.', '_')
+ if not stats_tmp.has_key(collname):
+ stats_tmp[collname] = 0
+ stats_tmp[collname] += long(stats['count'])
+
+ con.disconnect()
+
+ for collname, stats in sorted(stats_tmp.items()):
+ yield ("%s_count" % collname, stats,)
+
+
+def doData():
+ for coll, stats in getCollstats():
+ print "%s.value %s" % (coll, stats)
+
+
+def doConfig():
+
+ print "graph_title MongoDB total collection count"
+ print "graph_args --base 1000 -l 0"
+ print "graph_vlabel documents"
+ print "graph_category MongoDB"
+ print "graph_total total"
+
+ for k,v in getCollstats():
+ print "%s.label %s" % (k, k)
+ print "%s.min 0" % k
+ print "%s.draw LINE1" % k
+
+
+if __name__ == "__main__":
+ from sys import argv
+ from os import environ
+
+ # Could be done by a for loop
+ # but i think if's are faster
+ if 'HOST' in environ:
+ settings_host = environ['HOST']
+ if 'PORT' in environ:
+ settings_port = environ['PORT']
+ if 'DB' in environ:
+ settings_db = environ['DB']
+
+ if len(argv) > 1 and argv[1] == "config":
+ doConfig()
+ else:
+ doData()
View
@@ -0,0 +1,99 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# vim: set sts=4 sw=4 encoding=utf-8
+
+# Copyright (c) 2010, Rene Jochum
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of the Rene Jochum nor the
+# names of its contributors may be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+from pymongo import Connection
+
+settings_host = '127.0.0.1'
+settings_port = 27017
+settings_db = 'mydb'
+settings_collection = 'things'
+settings_fields = {'totalIndexSize': 'index', 'storageSize': 'storage', 'size': 'data'}
+
+
+def getCollstats():
+ con = Connection(settings_host, int(settings_port), slave_okay=True)
+
+ stats_tmp = {}
+ for dbname in con.database_names():
+ db = con[dbname]
+ for coll in db.collection_names():
+ if coll.startswith('system.'):
+ continue
+ stats = db.command("collstats", coll)
+ collname = coll.replace('.', '_')
+ if not stats_tmp.has_key(collname):
+ stats_tmp[collname] = 0
+ stats_tmp[collname] += long(stats['size'])
+ con.disconnect()
+
+ for collname, stats in sorted(stats_tmp.items()):
+ yield ("%s_size" % collname, stats,)
+
+
+def doData():
+ for coll, stats in getCollstats():
+ print "%s.value %s" % (coll, stats)
+
+
+def doConfig():
+
+ print "graph_title MongoDB total collection size"
+ print "graph_args --base 1024 -l 0"
+ print "graph_vlabel Kb"
+ print "graph_category MongoDB"
+ print "graph_total total"
+
+ for k,v in getCollstats():
+ print "%s.label %s" % (k, k)
+ print "%s.min 0" % k
+ print "%s.draw LINE1" % k
+
+
+if __name__ == "__main__":
+ from sys import argv
+ from os import environ
+
+ # Could be done by a for loop
+ # but i think if's are faster
+ if 'HOST' in environ:
+ settings_host = environ['HOST']
+ if 'PORT' in environ:
+ settings_port = environ['PORT']
+ if 'DB' in environ:
+ settings_db = environ['DB']
+
+ sp = argv[0].split('_')
+ if len(sp) > 1:
+ settings_collection = sp[-1]
+
+ if len(argv) > 1 and argv[1] == "config":
+ doConfig()
+ else:
+ doData()
View
@@ -0,0 +1,94 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# vim: set sts=4 sw=4 encoding=utf-8
+
+# Copyright (c) 2010, Rene Jochum
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of the Rene Jochum nor the
+# names of its contributors may be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+from pymongo import Connection
+
+settings_host = '127.0.0.1'
+settings_port = 27017
+settings_db = 'mydb'
+
+
+def getCollstats():
+ con = Connection(settings_host, int(settings_port), slave_okay=True)
+
+ stats_tmp = {}
+ for dbname in con.database_names():
+ db = con[dbname]
+ for coll in db.collection_names():
+ if coll.startswith('system.'):
+ continue
+ stats = db.command("collstats", coll)
+ collname = coll.replace('.', '_')
+ if not stats_tmp.has_key(collname):
+ stats_tmp[collname] = 0
+ stats_tmp[collname] += long(stats['totalIndexSize'])
+
+ con.disconnect()
+
+ for collname, stats in sorted(stats_tmp.items()):
+ yield ("%s_size" % collname, stats,)
+
+
+def doData():
+ for coll, stats in getCollstats():
+ print "%s.value %s" % (coll, stats)
+
+
+def doConfig():
+
+ print "graph_title MongoDB toral collection index sizes"
+ print "graph_args --base 1024 -l 0"
+ print "graph_vlabel Kb"
+ print "graph_category MongoDB"
+ print "graph_total total"
+
+ for k,v in getCollstats():
+ print "%s.label %s" % (k, k)
+ print "%s.min 0" % k
+ print "%s.draw LINE1" % k
+
+
+if __name__ == "__main__":
+ from sys import argv
+ from os import environ
+
+ # Could be done by a for loop
+ # but i think if's are faster
+ if 'HOST' in environ:
+ settings_host = environ['HOST']
+ if 'PORT' in environ:
+ settings_port = environ['PORT']
+ if 'DB' in environ:
+ settings_db = environ['DB']
+
+ if len(argv) > 1 and argv[1] == "config":
+ doConfig()
+ else:
+ doData()
View
@@ -0,0 +1,93 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# vim: set sts=4 sw=4 encoding=utf-8
+
+# Copyright (c) 2010, Rene Jochum
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of the Rene Jochum nor the
+# names of its contributors may be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+from pymongo import Connection
+
+settings_host = '127.0.0.1'
+settings_port = 27017
+settings_db = 'mydb'
+
+
+def getCollstats():
+ con = Connection(settings_host, int(settings_port), slave_okay=True)
+
+ stats_tmp = {}
+ for dbname in con.database_names():
+ db = con[dbname]
+ for coll in db.collection_names():
+ if coll.startswith('system.'):
+ continue
+ stats = db.command("collstats", coll)
+ collname = coll.replace('.', '_')
+ if not stats_tmp.has_key(collname):
+ stats_tmp[collname] = 0
+ stats_tmp[collname] += long(stats['storageSize'])
+ con.disconnect()
+
+ for collname, stats in sorted(stats_tmp.items()):
+ yield ("%s_size" % collname, stats,)
+
+
+def doData():
+ for coll, stats in getCollstats():
+ print "%s.value %s" % (coll, stats)
+
+
+def doConfig():
+
+ print "graph_title MongoDB total storage sizes"
+ print "graph_args --base 1024 -l 0"
+ print "graph_vlabel Kb"
+ print "graph_category MongoDB"
+ print "graph_total total"
+
+ for k,v in getCollstats():
+ print "%s.label %s" % (k, k)
+ print "%s.min 0" % k
+ print "%s.draw LINE1" % k
+
+
+if __name__ == "__main__":
+ from sys import argv
+ from os import environ
+
+ # Could be done by a for loop
+ # but i think if's are faster
+ if 'HOST' in environ:
+ settings_host = environ['HOST']
+ if 'PORT' in environ:
+ settings_port = environ['PORT']
+ if 'DB' in environ:
+ settings_db = environ['DB']
+
+ if len(argv) > 1 and argv[1] == "config":
+ doConfig()
+ else:
+ doData()

0 comments on commit a3b2b89

Please sign in to comment.