簡體   English   中英

使用 pyMongo 在 mongo 中獲取 replicationLag

[英]Get replicationLag in mongo with pyMongo

我正在嘗試使用來自db.rs.printSlaveReplicationInfo的 db.rs.printSlaveReplicationInfo 和pymongo來獲得復制延遲,但沒有得到任何正確的方法來這樣做。 我嘗試了以下,但沒有幫助。

>>>from pymongo import MongoClient
>>>client = MongoClient()
>>>db = client.test_database
>>>db.rs.printSlaveReplicationInfo                 
Collection(Database(MongoClient([u'10.0.0.19:10006', u'10.0.0.68:10002']), u'xyz'), u'rs.printSlaveReplicationInfo')
db.rs.printSlaveReplicationInfo()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib64/python2.7/site-packages/pymongo/collection.py", line 2413, in __call__
    self.__name.split(".")[-1])
TypeError: 'Collection' object is not callable. If you meant to call the 'printSlaveReplicationInfo' method on a 'Collection' object it is failing because no such method exists.
>>> db.rs                            
Collection(Database(MongoClient([u'10.0.0.19:10006', u'10.0.0.68:10002']), u'xyz'), u'rs')

有人能幫忙嗎? 或者怎么做?

提前致謝。

我找到了答案。這是完整的代碼:

(注意:您需要具有管理員權限才能運行此命令。)

uri = "mongodb://usernamen:password@host:port/admin"
conn = pymongo.MongoClient(uri)
db = conn['admin']
db_stats = db.command({'replSetGetStatus'  :1})


primary_optime = 0
secondary_optime = 0

for key in db_stats['members'] : 
    if key['stateStr'] == 'SECONDARY' :
        secondary_optime = key['optimeDate']
    if key['stateStr'] == 'PRIMARY' : 
        primary_optime =key['optimeDate']

print 'primary_optime : ' + str(primary_optime)
print 'secondary_optime : ' + str(secondary_optime)

seconds_lag = (primary_optime - secondary_optime ).total_seconds()
#total_seconds() userd to get the lag in seconds rather than datetime object
print 'secondary_lag : ' + str(seconds_lag)

optime reperesents 日期,直到該 mongo 節點有數據。

你可以在這里讀更多關於它的內容:

https://docs.mongodb.com/manual/reference/command/replSetGetStatus/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM