Este artigo apresenta um código simples que pode ser usado para auxiliar na verificação de status do replicaset MongoDB utilizando python.
Requisitos:
- Python 2.7 ou posterior
- Pymongo
Abaixo o script Python usado:
Nesse exemplo estamos considerando que temos 3 servidores no conjunto de replicaset com os seguintes nomes (SVRMONGO030, SVRMONGO031 e SVRMONGO032) e usamos um usuário criado somente com a role clusterMonitor.
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import io
from sys import exit
from pymongo import MongoClient
#funcao de limpeza do terminal
def cleanScreen():
# For Windows
if os.name == 'nt':
os.system('cls')
# For macOS and Linux
else:
os.system('clear')
#funcao de verificacao do status do replicaset mongodb
def replsetstatus():
print('\n###############################################################\n')
#client = MongoClient('mongodb://127.0.0.1:27017/') #localhost
user = 'user.cluster.monitor' #user cluster monitor
pwd = 'pwd.user.cluster.monitor' #password user cluster monitor
client = MongoClient('mongodb://' + user + ':' + pwd + '@ipdns_server01:27017,ipdns_server02:27017,ipdns_server03:27017/')
db = client ['admin']
nserver = [0, 1, 2]
rs_stats = db.command({'replSetGetStatus': 1})
for x in nserver:
hostnameSrv = 'SVRMONGO03' + str(x)
IpSrv = rs_stats["members"][x]["name"]
health = rs_stats["members"][x]["health"]
state = rs_stats["members"][x]["state"]
statusRepl = rs_stats["members"][x]["stateStr"]
optimeDate = rs_stats["members"][x]["optimeDate"]
if statusRepl == "PRIMARY":
syncSourceHost = "IsPrimary"
else:
syncSourceHost = rs_stats["members"][x]["syncSourceHost"]
print ("\nHost: {0} \nIP Server: {1} \nstateStr: {2} \nstate: {3} \nhealth: {4} \noptimeDate: {5} \nsyncSourceHost: {6} \n".format(str(hostnameSrv), str(IpSrv), str(statusRepl), str(state), str(health), str(optimeDate), str(syncSourceHost)))
print('\n###############################################################\n')
client.close()
## função inicial
def main():
cleanScreen()
replsetstatus()
input("Pressione Enter para nova verificacao. ")
main()
#inicio da aplicacao
if __name__ == "__main__":
main()
Abaixo uma versão mais simples do script que pode ser usado em conjunto com o Zabbix para monitoramento de status do replicaset e envio de alertas pelo Zabbix em casos que o status do replicaset de determinado servidor for diferente do previamente esperado, por exemplo, casos em que o primário caia ou se torne um secundário e outro assuma como primário, basta fazer a chamada do script pelo Zabbix usando o recurso de UserParameter passando na chamada do script o indicador de cada servidor que no caso do nosso exemplo é:
0 - (SVRMONGO030)
1 - (SVRMONGO031)
2 - (SVRMONGO032)
Exemplos:
python verifyStatusReplSet.py 0
python verifyStatusReplSet.py 1
python verifyStatusReplSet.py 2
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from pymongo import MongoClient
def replsetstatus(nserver):
# VARIAVEL DE INDICACAO DO SERVIDOR - nserver
# 0 - (SVRMONGO030) | 1 - (SVRMONGO031) | - 2 (SVRMONGO032)
# VARIAVEIS DE CONEXAO
user = 'user.cluster.monitor'
pwd = 'pwd.user.cluster.monitor'
client = MongoClient('mongodb://' + user + ':' + pwd + '@ipdns_server01:27017,ipdns_server02:27017,ipdns_server03:27017/')
db = client ['admin']
rs_stats = db.command({'replSetGetStatus': 1})
statusRepl= rs_stats["members"][nserver]["stateStr"]
print (str(statusRepl))
if __name__ == "__main__":
nserver = int(sys.argv[1])
replsetstatus(nserver)
Até a próxima !!!
Top comments (0)