Projet

Général

Profil

Paste
Télécharger au format
Statistiques
| Branche: | Révision:

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()