root / plugins / mongodb / mongo_lag @ 17f78427
Historique | Voir | Annoter | Télécharger (1,78 ko)
| 1 |
#!/usr/bin/env python |
|---|---|
| 2 |
""" |
| 3 |
MongoDB Replication Lag |
| 4 |
~~~~~~~~~~~~~~~~~~~~~~~ |
| 5 |
|
| 6 |
Connects to a single mongo instance and retrieve |
| 7 |
replication lag for all connected members. |
| 8 |
|
| 9 |
munin-node.conf: |
| 10 |
[mongodb_lag] |
| 11 |
env.host 127.0.0.1 |
| 12 |
env.port 27017 |
| 13 |
|
| 14 |
:author: Stefan Andersen <stefan@stefanandersen.dk> |
| 15 |
:license: The Beer Ware License (Revision 42) |
| 16 |
<stefan@stefanandersen.dk> wrote this file. As long |
| 17 |
as you retain this notice you can do whatever you want |
| 18 |
with this stuff. If we meet some day, and you think |
| 19 |
this stuff is worth it, you can buy me a beer in return. |
| 20 |
""" |
| 21 |
import os |
| 22 |
import sys |
| 23 |
import pymongo |
| 24 |
|
| 25 |
def _get_members(): |
| 26 |
host = os.environ.get('host', '127.0.0.1')
|
| 27 |
port = os.environ.get('port', 27017)
|
| 28 |
conn = pymongo.MongoClient(host,port) |
| 29 |
repl_status = conn.admin.command("replSetGetStatus")
|
| 30 |
|
| 31 |
members = {}
|
| 32 |
for member in repl_status['members']: |
| 33 |
if member['stateStr'] != 'ARBITER' : |
| 34 |
name = member['name'].split('.')[0]
|
| 35 |
members[name] = {'state': member['state'], 'optimeDate': member['optimeDate']}
|
| 36 |
return members |
| 37 |
|
| 38 |
def run(): |
| 39 |
members = _get_members(); |
| 40 |
for member in members: |
| 41 |
if members[member]['state'] == 1: |
| 42 |
primary_optime = members[member]['optimeDate'] |
| 43 |
|
| 44 |
for member in members: |
| 45 |
lag = (primary_optime - members[member]['optimeDate']).seconds |
| 46 |
print "{0}.value {1}".format(member, lag)
|
| 47 |
|
| 48 |
def config(): |
| 49 |
print """graph_title MongoDB replication lag |
| 50 |
graph_args --base 1000 |
| 51 |
graph_vlabel Replication lag (seconds) |
| 52 |
graph_category db |
| 53 |
""" |
| 54 |
|
| 55 |
for member in _get_members(): |
| 56 |
print "{0}.label {0}".format(member)
|
| 57 |
|
| 58 |
if __name__ == "__main__": |
| 59 |
if len(sys.argv) > 1 and sys.argv[1] == "config": |
| 60 |
config() |
| 61 |
else: |
| 62 |
run() |
