root / plugins / mongodb / mongo_lag @ 9121b90e
Historique | Voir | Annoter | Télécharger (1,79 ko)
| 1 | 1199e0d0 | Stefan Andersen | #!/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 | d1ca9856 | Nicolas Casar Gonzalez | conn = pymongo.MongoClient(host,port) |
| 29 | 1199e0d0 | Stefan Andersen | repl_status = conn.admin.command("replSetGetStatus")
|
| 30 | |||
| 31 | members = {}
|
||
| 32 | for member in repl_status['members']: |
||
| 33 | ea5dde3f | jdponomarev | if member['stateStr'] != 'ARBITER' : |
| 34 | name = member['name'].split('.')[0]
|
||
| 35 | members[name] = {'state': member['state'], 'optimeDate': member['optimeDate']}
|
||
| 36 | 1199e0d0 | Stefan Andersen | 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 | 6f7f6a09 | Stefan Andersen | lag = (primary_optime - members[member]['optimeDate']).seconds |
| 46 | ea5dde3f | jdponomarev | print "{0}.value {1}".format(member, lag)
|
| 47 | 1199e0d0 | Stefan Andersen | |
| 48 | def config(): |
||
| 49 | print """graph_title MongoDB replication lag |
||
| 50 | graph_args --base 1000 |
||
| 51 | graph_vlabel Replication lag (seconds) |
||
| 52 | graph_category MongoDB |
||
| 53 | """ |
||
| 54 | 6f7f6a09 | Stefan Andersen | |
| 55 | 1199e0d0 | Stefan Andersen | for member in _get_members(): |
| 56 | 6f7f6a09 | Stefan Andersen | print "{0}.label {0}".format(member)
|
| 57 | 1199e0d0 | Stefan Andersen | |
| 58 | if __name__ == "__main__": |
||
| 59 | if len(sys.argv) > 1 and sys.argv[1] == "config": |
||
| 60 | config() |
||
| 61 | else: |
||
| 62 | run() |
