Projet

Général

Profil

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

root / plugins / mongodb / mongo_lag @ c6f88968

Historique | Voir | Annoter | Télécharger (2,21 ko)

1 276169a6 Alban
#!/usr/bin/env python3
2 1199e0d0 Stefan Andersen
"""
3 276169a6 Alban
=head1 NAME
4 1199e0d0 Stefan Andersen
5 c6f88968 Lars Kruse
mongo_lag - MongoDB Replication Lag
6
7
Connects to a single mongo instance and retrieve replication lag for all connected members.
8 1199e0d0 Stefan Andersen
9 276169a6 Alban
=head1 APPLICABLE SYSTEMS
10
11 c6f88968 Lars Kruse
MongoDB 3.X and 4.X with pymongo installed.
12 276169a6 Alban
13
=head1 CONFIGURATION
14
15 c6f88968 Lars Kruse
Default for host is 127.0.0.1 and port 27017 and will work without being defined:
16 276169a6 Alban
17 8fc3d29d Alban
    [mongo_lag]
18 1199e0d0 Stefan Andersen
    env.host 127.0.0.1
19
    env.port 27017
20 8fc3d29d Alban
    env.username user
21
    env.password P@55w0rd
22 1199e0d0 Stefan Andersen
23 276169a6 Alban
=head1 AUTHOR
24
25 c6f88968 Lars Kruse
Stefan Andersen <stefan@stefanandersen.dk>
26
27
Updated by Alban Espie-Guillon <alban.espie@alterway.fr>
28 276169a6 Alban
29
=head1 LICENSE
30 c6f88968 Lars Kruse
31
The Beer Ware License (Revision 42)
32
<alban.espie@alterway.fr> wrote this file. As long
33
as you retain this notice you can do whatever you want
34
with this stuff. If we meet some day, and you think
35
this stuff is worth it, you can buy me a beer in return.
36
37
SPDX-License-Identifier: Beerware
38
39
=cut
40 1199e0d0 Stefan Andersen
"""
41 c6f88968 Lars Kruse
42 1199e0d0 Stefan Andersen
import os
43
import sys
44
import pymongo
45
46
def _get_members():
47
    host = os.environ.get('host', '127.0.0.1')
48
    port = os.environ.get('port', 27017)
49 8fc3d29d Alban
    username = os.environ.get('username', '')
50
    password = os.environ.get('password', '')
51 1357b818 Alban
    conn = pymongo.MongoClient(host, int(port))
52 8fc3d29d Alban
    if username:
53
        connAuth = conn['admin']
54
        connAuth.authenticate(username, password)
55 276169a6 Alban
56 923e134d Alban
    repl_status = conn.admin.command("replSetGetStatus")
57 1199e0d0 Stefan Andersen
58
    members = {}
59
    for member in repl_status['members']:
60 ea5dde3f jdponomarev
        if member['stateStr'] != 'ARBITER' :
61
            name = member['name'].split('.')[0]
62
            members[name] = {'state': member['state'], 'optimeDate': member['optimeDate']}
63 1199e0d0 Stefan Andersen
    return members
64
65
def run():
66
    members = _get_members();
67
    for member in members:
68
        if members[member]['state'] == 1:
69
            primary_optime = members[member]['optimeDate']
70
71
    for member in members:
72 6f7f6a09 Stefan Andersen
        lag = (primary_optime - members[member]['optimeDate']).seconds
73 276169a6 Alban
        print("{0}.value {1}".format(member, lag))
74 1199e0d0 Stefan Andersen
75
def config():
76 276169a6 Alban
    print("""graph_title MongoDB replication lag
77 1199e0d0 Stefan Andersen
graph_args --base 1000
78
graph_vlabel Replication lag (seconds)
79 99542938 dipohl
graph_category db
80 276169a6 Alban
""")
81 17f78427 Lars Kruse
82 1199e0d0 Stefan Andersen
    for member in _get_members():
83 276169a6 Alban
        print("{0}.label {0}".format(member))
84 1199e0d0 Stefan Andersen
85
if __name__ == "__main__":
86
    if len(sys.argv) > 1 and sys.argv[1] == "config":
87
        config()
88
    else:
89
        run()