iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Python脚本监控mysql数据库,P
  • 606
分享到

Python脚本监控mysql数据库,P

脚本数据库Python 2023-01-31 07:01:49 606人浏览 薄情痞子
摘要

任务:应帅气的领导要求,需要监控生产环境Mysql和monGo数据库服务。不仅要connect successful还要进行数据交互进一步确认数据库服务正常。 思路:mysql和mongo 数据库ip、端口、用户名、密码、认证库(mongo

任务:应帅气的领导要求,需要监控生产环境Mysql和monGo数据库服务。不仅要connect successful还要进行数据交互进一步确认数据库服务正常。

思路:
mysql和mongo 数据库ip、端口、用户名、密码、认证库(mongo)分别写在mysqldb_message.txt和mongoDB_message.txt两个文件中。查询脚本db_test.py,邮件脚本sendEmail.py
.
.


格式如下:

mysqldb_message.txt
host:192.168.0.32 user:test passwd:123456 port:3306
host:192.168.0.222 user:test passwd:123456 port:3307
host:192.168.1.101 user:cctest passwd:Yj7netlkj port:3990

.
.

mongodb_message.txt
host:192.168.1.101 user:errorbook passwd:wangyue port:37017 authDB:admin
host:127.0.0.1 user:qinGCong passwd:qingcong port:27017 authDB:admin

.
.
查询脚本db_test.py:
需要注意的是:

.
1、由于python3.6,pymongo模块中的MongoClient函数连接mongo数据库时,超时参数connecttimeOutMS并不会生效(亲测),并且如果仅仅用MongoClient连接mongo数据库而不对数据库内的数据进行交互,那么无论MongoClient返回的是正确的连接对象还是发生了错误,python3.6均不会报错。所以,必须要对数据库数据进行交互,才能确定数据库服务是否正常
.
2、由于mongo超时时间大概在30多秒左右,因此引入Python提供的超时函数timeout_decorator.timeout(),但此函数对不同的操作系统用法不一样。此脚本在windows环境下运行会报错。

#!/usr/bin/env python
#encoding: utf-8
#author: 847907826@qq.com
#注意,需要在linux环境下Python3以上版本执行,且需要安装pymysql、pymongo、timeout_decorator模块

import re
import time
import pymysql
import timeout_decorator
from pymongo import MongoClient
import sys
sys.path.append('/tools/scripts')   # /tools/scripts脚本目录,导入进sys.path中为后续才能调用send_mail函数
from sendEmail import send_mail     

#定义host、user、passwd、port、auth_db列表,用与存储数据库信息
host = []
user = []
passwd = []
port = []
auth_db = []

#mysql配置信息文件路径
mysql_file = '/tools/scripts/mysqldb_message.txt'
#data fORMat: host:192.168.1.101 user:errorbook passwd:wangyue port:37017 authDB:admin

mongo_file = '/tools/scripts/mongodb_message.txt'
# data format: host:172.17.0.2 user:root passwd:123456 port:3306

#获取mysql_db的配置信息
def get_message_mysqldb():
        print("读取mysql数据库详细信息文件中,请稍后....")
        # time.sleep(1)
        with open(mysql_file, 'r') as source:
                lines = source.read().splitlines()  # splitlines 去除空行,即不保留每行结尾的\n,否则读取的每行中末尾均有\n
                i = 0
                for char in lines:
                        if char.strip() != '':  # 去掉字符串前后的空格
                                char = re.split('[ :]', lines[i])  # 以空格和分号作为空格符进行分割
                                num = 1
                                host.append(char[num])
                                user.append(char[num + 2])
                                passwd.append(char[num + 4])
                                port.append(char[num + 6])
                        i = i + 1
        print("读取完成\n---------------------------")
        return host, user, passwd, port

#获取mongodb_db的配置信息
def get_message_mongodb():
        with open(mongo_file, 'r') as source:
                lines = source.read().splitlines()
                i = 0
                for char in lines:
                        if char.strip() != '':  # 去掉字符串前后的空格
                                char = re.split('[ :]', lines[i])  # 以空格和分号作为空格符进行分割
                                num = 1
                                host.append(char[num])
                                user.append(char[num + 2])
                                passwd.append(char[num + 4])
                                port.append(char[num + 6])
                                auth_db.append(char[num + 8])
                        i = i + 1
        return host, user, passwd, port, auth_db

#连接mysql数据库
def mysqldb_connect_and_test(ip, user, passwd, port):
        print("连接mysql数据库{0}中,请稍后....".format(ip))
        # time.sleep(1)
        try:
                # print("ip:{0}, user:{1}, passwd:{2}, port:{3}".format(ip, user, passwd, port))
                conn = pymysql.connect(host=ip,
                                                             user=user,
                                                             passwd=passwd,
                                                             port=int(port),
                                                             charset='utf8',
                                                             connect_timeout=3)
                print("连接成功,执行测试语句中...")
                with conn.cursor() as cur:
                        sql = 'select 1 from dual'
                        a = str(cur.execute(sql))
                        print("successful! 进一步确认数据库服务正常。执行结果-->a: {0}".format(a))

        except Exception:
                print("发生异常,数据库连接失败,服务器ip:{0}".format(ip), Exception)
                send_mail("监控中心<monitor@7net.cc>", ["吴青聪<qingcong@7net.cc>"], [], "测试email", "(测试)邮件内容:python检测到mysql数据库异常,服务器为{0}".format(host), "")
        else:
                print("连接成功:{0}\n".format(ip))

#连接mongodb数据库
@timeout_decorator.timeout(3)
def mongodb_connect_and_test(ip, user, passwd, port, auth_db):
        print("请稍等,连接mongodb中...")
        try:
                client = MongoClient(ip, int(port))
                # 利用server_info()判断mongodb状态
                dbnames = client.server_info()  #
                print(dbnames)
                #利用authenticate判断mongodb状态
                db = client[auth_db]
                result = db.authenticate(user, passwd)

        except Exception as es:
                print("Error!连接失败,服务器ip:{0}".format(ip), es)
                send_mail("监控中心<monitor@7net.cc>", ["吴青聪<qingcong@7net.cc>"], [], "测试email", "(测试)邮件内容:python检测到mongo数据库异常,服务器为{0}".format(host), "")
        else:
                print("Successful!连接mongodb成功,测试语句执行成功")
                client.close()

#清空列表变量
def clear_list():
        host.clear()
        user.clear()
        passwd.clear()
        port.clear()

def main():
        # 检查mysql
        print("检查mysql数据库:")
        get_message_mysqldb()
        index = 0
        for ip in host:
                print("------------------------")
                mysqldb_connect_and_test(ip, user[index], passwd[index], port[index]) 
                index = index + 1

        clear_list()  # 清空变量列表

        #检查mongodb
    print("\n检查mysql数据库:")
        get_message_mongodb()
        index = 0
        for ip in host:
                print("------------------------")
                # print("ip:{0}, user:{1}, passwd:{2}, port:{3}".format(ip, user[index], passwd[index], port[index]))
                mongodb_connect_and_test(ip, user[index], passwd[index], port[index], auth_db[index])
                index = index + 1

if __name__ == '__main__':
        main()

发送邮件脚本sendEmail.py:

#!/usr/bin/env python
#encoding: utf-8

import smtplib  # 加载smtplib模块
import traceback
from email.header import Header
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr

login_name = 'monitor@7net.cc'  # 发件人邮箱账号,为了后面易于维护,所以写成了变量
login_pass = '******'           # 邮箱密码,此处隐藏^_^
smtp_port = 465

def _format_addr(s):
name, addr = parseaddr(s)
return formataddr(( \
        Header(name, 'utf-8').encode(), \
        addr))
# addr.encode('utf-8') if isinstance(addr, unicode) else addr))

def send_mail(sender, recps, Ccs, subject, htmlmsg, fileAttachment):
# 参数分别是:发送人邮箱、收件人邮箱、抄送人邮箱、主题、内容、附件,如果看不懂此处代码,知道如何使用即可

smtpserver = 'smtp.exmail.qq.com'

receivers = recps + Ccs

try:
        # msg = MIMEText(htmlmsg, 'html', 'utf-8')
        msg = MIMEMultipart()

        msg.attach(MIMEText(htmlmsg, 'html', 'utf-8'))

        # msg['Subject'] = subject
        msg['Subject'] = Header(subject, 'utf-8').encode()
        # msg['From'] = sender
        msg['From'] = _format_addr(sender)

        Recp = []
        for recp in recps:
                Recp.append(_format_addr(recp))

        ccs = []
        for cc in Ccs:
                ccs.append(_format_addr(cc))

        msg['To'] = ','.join(Recp)
        msg['Cc'] = ','.join(ccs)

        # if fileAttachment!='' :
        #     # 附件
        for file in fileAttachment:
                part = MIMEApplication(open(file, 'rb').read())
                attFileName = file.split('/')[-1]
                part.add_header('Content-Disposition', 'attachment', filename=attFileName)
                msg.attach(part)
        # part = MIMEApplication(open(fileAttachment, 'rb').read())
        # part.add_header('Content-Disposition', 'attachment', filename=fileAttachment)
        # msg.attach(part)

        smtp = smtplib.SMTP_SSL()
        smtp.connect(smtpserver, smtp_port)
        smtp.login(login_name, login_pass)
        #      smtp.login(username, passWord)
        smtp.sendmail(sender, receivers, msg.as_string())
        smtp.quit()
        print('SendEmail success')
except:
        traceback.print_exc()
您可能感兴趣的文档:

--结束END--

本文标题: Python脚本监控mysql数据库,P

本文链接: https://www.lsjlt.com/news/191523.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python脚本监控mysql数据库,P
    任务:应帅气的领导要求,需要监控生产环境mysql和mongo数据库服务。不仅要connect successful还要进行数据交互进一步确认数据库服务正常。 思路:mysql和mongo 数据库ip、端口、用户名、密码、认证库(mongo...
    99+
    2023-01-31
    脚本 数据库 Python
  • python 监控mysql脚本
    #!/usr/bin/env python #-*- coding: UTF-8 -*- from __future__ import print_function from mysql import connector import lo...
    99+
    2023-01-31
    脚本 python mysql
  • zabbix监控mysql数据库
    这篇文章主要介绍“zabbix监控mysql数据库”,在日常操作中,相信很多人在zabbix监控mysql数据库问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”zabbix监控...
    99+
    2024-04-02
  • 数据库中如何实现表空间监控脚本
    小编给大家分享一下数据库中如何实现表空间监控脚本,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! -----查询表空间使用情况  SELECT...
    99+
    2024-04-02
  • 监控Oracle数据库的常用shell脚本怎么写
    本篇文章给大家分享的是有关监控Oracle数据库的常用shell脚本怎么写,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来...
    99+
    2024-04-02
  • 用python备份mysql数据库的脚本
    一、前言             刚刚开始学python,还在看一套简单的python教学视频,但还未看完,简单的写了个mysql备份脚本,也算是第一个python脚本的×××座哈~~,因为才刚刚才开始,对python 的class 、fu...
    99+
    2023-01-31
    脚本 备份 数据库
  • 转:MySQL主从、字典死锁、连接数的Python监控脚本
    #!/usr/bin/python ...
    99+
    2024-04-02
  • 监控mysql数据库主从状态
    python版本2.6.6#!/usr/bin/pythonimport MySQLdbdef check_mysql():    status = True &nb...
    99+
    2024-04-02
  • zabbix 监控数据库
    #!/bin/sh  MYSQL_PWD=" -usense -p*******" ARGS=1  if [ $# -ne "...
    99+
    2024-04-02
  • Mysql索引如何使用监控脚本
    这篇文章将为大家详细讲解有关Mysql索引如何使用监控脚本,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 开启变量:默认是关闭的,它在内存中...
    99+
    2024-04-02
  • MySQL 5.6大查询和大事务监控脚本(Python 2)
    可以配置在Zabbix里面,作为监控的模版 #!/usr/bin/env python # import MySQLdb,MySQLdb.cursors import s...
    99+
    2024-04-02
  • python oracle数据库备份脚本
    学习python,将shell备份脚本改成了python脚本练手.python oracle备份脚本一例如下。#!/usr/bin/env python   # -*- coding: utf-8 -*-  import time impo...
    99+
    2023-01-31
    脚本 备份 数据库
  • Zabbix+Python如何监控Oracle数据库
    小编给大家分享一下Zabbix+Python如何监控Oracle数据库,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、规划监控项监控数据库的目的是为了保障数据库稳定运行,一旦出现故障,dba能够及时发现并介入处理,监控项...
    99+
    2023-06-04
  • 网卡流量监控脚本,python实现
    使用-h获取帮助在Python2.7版本以上执行脚本获取:https://github.com/raysuen/AdapterMonitor内容:#!/usr/bin/env python# _*_coding:utf-...
    99+
    2023-06-05
  • python简单的监控脚本-利用sock
    python简单的监控脚本-利用socket、psutil阻止远程主机运行特定程序 psutil是一个跨平台的库(http://code.google.com/p/psutil/),能够轻松的实现获取系统运行的进程和系统利用率(CPU、内...
    99+
    2023-01-30
    脚本 简单 python
  • MySQL 数据库的监控方式小结
    目录1、连接数(Connects)2、缓存(bufferCache)3、锁(lock)4、慢SQL5、statement6、吞吐(Database throughputs)7、数据库参数(serverconfig)8、慢...
    99+
    2023-04-06
    MySQL 监控方式 MySQL 监控
  • MySQL数据库的监控方式小结
    目录1、连接数(Connects)2、缓存(bufferCache)3、锁(lock)4、慢SQL5、statement6、吞吐(Database throughputs)7、数据库...
    99+
    2023-05-14
    MySQL 监控方式 MySQL 监控
  • MySQL数据库监控指标有哪些
    本篇文章为大家展示了MySQL数据库监控指标有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、performance_schema性能模式的 events_s...
    99+
    2024-04-02
  • 如何实现监控MySQL服务shell脚本
    这篇文章给大家分享的是有关如何实现监控MySQL服务shell脚本的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1)端口判断法==>仅适合数据库本地使用法1:if条件判断方法[root@oldboy&nbs...
    99+
    2023-06-09
  • MySQL数据库的性能监控方法
    本篇内容主要讲解“MySQL数据库的性能监控方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL数据库的性能监控方法”吧! SHOW STATUS; ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作