zoukankan      html  css  js  c++  java
  • 使用Zabbix + Python对Mysql监控

    一、背景介绍

    随着公司业务的变迁,公司的开发数据库以mysql为主了。mysql服务器层面的监控,例如CPU、内存、硬盘空间等就用zabbix自带的linux模板即可。数据库层面zabbix也自带了一个模板,但是它需要将mysql的密码写到my.cnf文件中,这样不安全,因此决定自己写一个。原先我写过一个用python去监控oracle的博客使用zabbix监控oracle数据库,对于mysql的监控大同小异,只需要简单改改监控项即可。

    二、监控方式

    Zabbix服务端的环境为:CentOS 6.10, Zabbix 3.4.15, Python 3.6.8。被监控的mysql 版本为8.0.x。监控采用外部检查(External Check)的方式,即从zabbix服务端执行python脚本,去查询被监控的mysql信息。这种方式的好处是监控脚本放在zabbix服务端,后面想修改模板和脚本只需要在zabbix服务端修改一次即可,被监控端不用做任何操作,省心。

    三、监控项规划

    确定好了监控方式,接下来就开始对监控项进行规划。

    1. os层

    port:mysql端口是否正常监听,检测不到监听端口,报警
    proc:mysqld进程是否存在,检测不到mysqld进程,报警
    以上两个监控项通过zabbix agent采集信息(需要在被监控机安装zabbix-agent)

    2. db层

    主库和从库都包括的监控项:
    readonly:是否只读,状态发生改变时报警
    uptime:运行时间,uptime减少表示数据库发生了重启,报警
    queries:检查qps
    select: 查询的sql次数
    update: 更新的sql次数
    delete: 删除的sql次数
    insert: 插入的sql次数
    slow_queries: 慢查询次数
    threads_running: 正在运行的线程数,设定100,超过该值报警,根据自己需求适当调整
    threads_limit: 线程限制,设定90%,超过该值报警,根据自己需求适当调整

    只在从库有的监控项:
    从库采用自动发现的方式,即执行“show slave status”有结果就表明这个是从库
    slave_io_running:从库的io线程,如果不为YES,报警
    slave_sql_running: 从库的sql线程,如果不为YES,报警
    seconds_behind_master:从库落后主库的时间,设定10分钟,超过该值报警,根据自己需求适当调整

    四、实践

    1. 我假设你已经有了zabbix服务端,因此这里略过如何搭建zabbix。

    2. 在zabbix服务端安装python3(略),并安装argparse, inspect, pymysql包。

    3. 将附件中的mysqlmon.py放入/usr/lib/zabbix/externalscripts下,同时赋权限chmod 755 mysqlmon.py,注意修改mysqlmon.py的第一行#!/usr/local/python3/bin/python3,这里要改成你自己的python执行路径。

    4. 将附件的mysql_template.xml导入到zabbix中(我是基于zabbix 3.4.15写的模板,其它zabbix版本可能会出现模板导不进去的情况)。
      微信截图_20211206155400.png

    5. 添加服务器,链接到模板Template-Db-Mysql-ExternalCheck-Customize。
      微信截图_20211206155513.png

    6. 在被监控的mysql中创建监控用户,用户只需要有show view, replication client权限即可。
      grant show view, replication client on . to xxx;

    7. 修改主机中的宏(address,username,password填写被监控mysql的信息)
      微信截图_20211206154759.png

    后面就能看到相关图形和报警了
    微信截图_20211206173047.png

    微信截图_20211206162033.png

    如果想自己添加一个监控项,则只需要在mysqlmon.py添加一个方法,方法名与key的参数名一致即可(下面是一个示例,我用红框圈出来的地方)
    微信截图_20211206180756.png

    微信截图_20211206173644.png

    如果大家在使用过程中碰到了问题以及想添加其它的监控项,欢迎大家在博客下面留言,我后续对这个模板进行改进。

    五、附件

    下面附件下载都为txt后缀,需要手工修改
    mysqlmon.py下载地址
    mysql_template.xml下载地址

  • 相关阅读:
    多级弹出菜单jQuery插件ZoneMenu
    jquery投色子动画
    推荐一个内容滚动jquery插件
    足球宝贝来了,任你旋转(CSS3)
    jQuery切换网页皮肤保存到Cookie实例
    程序员用HTML5给女朋友制作的3D相册
    jquery模拟LCD 时钟
    jQuery刮彩票兑奖效果
    滚动变色的文字js特效
    jQuery实现右上角点击后滑下来的竖向菜单
  • 原文地址:https://www.cnblogs.com/ddzj01/p/15686694.html
Copyright © 2011-2022 走看看