Giter VIP home page Giter VIP logo

mysql_monitor's Introduction

MySQL Monitor面向研发人员图形可视化监控工具

image

2022-01-03 增加sys schema性能诊断报告 --- 重新拉取table_statistic.php文件覆盖即可

1)统计业务库里执行次数最频繁的前10条SQL语句

2)统计库里访问次数最多的前10张表

2022-02-05 提供podman镜像

获取镜像启动容器参见地址:https://blog.51cto.com/hcymysql/4984088

简介:

目前常用开源监控工具有nagios,zabbix,grafana,但这些是面向专业DBA使用的,而对于业务研发人员来说,没有专业的MySQL理论知识,并且上述监控工具均为纯英文界面,交互不直观,那么多的监控指标,你知道有哪些是研发最关心的吗?

所以每次都是DBA通知研发,系统哪块出了问题,这样的效率其实是低下的,我是希望把监控这块东西定制化,做成开发一眼就能看懂的指标项,纯中文页面,清爽直观,简约而不简单,出了问题报警信息直接第一时间推送给研发,效率会大大提升,同时也减少了DBA作为中间人传话的作用(传达室大爷角色)。

参考了天兔Lepus的UI风格,目前采集了数据库连接数(具体连接了哪些应用程序IP,账号统计)、QPS/TPS、索引使用率统计,同步复制状态/延迟监控。

采用远程连接方式获取数据,所以无需要在数据库服务器端部署相关agent或计划任务,可实现微信和邮件报警。

1、MySQL状态监控 image

2、点击活动连接数,可以查看具体的连接数统计信息 image

3、点击图表,可以查看历史曲线图 image

4、主从复制状态监控

image

5、微信报警

image

6、邮件报警

image

7、在MySQL 状态监控栏目下,点击数据库名,可以查看具体的表大小统计信息以及主键自增键值统计

image

注:sql_mode模式要去掉only_full_group_by,否则报错

ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 't.ENGINE' which is not functionally dependent on columns 
in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

mysql> SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

一、环境搭建

yum install httpd php php-mysqlnd php-json -y

yum install python-simplejson -y

service httpd start

注:必须依赖php-mysqlnd驱动扩展,系统自带的php-mysql要卸载掉,可参考下面的文章进行yum安装

Linux上安装php-mysqlnd扩展实例

http://www.php.cn/php-weizijiaocheng-387963.html

https://github.com/hcymysql/mysql_monitor/archive/master.zip安装包解压缩到 /var/www/html/目录下

cd /var/www/html/mysql_monitor/

chmod 755 ./mail/sendEmail

chmod 755 ./weixin/wechat.py

(注:邮件和微信报警调用的第三方工具,所以这里要赋予可执行权限755)

二、MySQL Monitor监控工具搭建

1、导入MySQL Monitor监控工具表结构(sql_db库)

cd /var/www/html/mysql_monitor/

mysql -uroot -p123456 < mysql_monitor_schema.sql

注:mysql_status_history表引擎可以更改为rocksdb引擎,支持数据压缩,这对于减小存储空间以及增快IO效率都有直接的帮助。

https://www.percona.com/blog/2018/04/30/a-look-at-myrocks-performance/

2、录入被监控主机的信息

mysql>insert into mysql_status_info(id,ip,dbname,user,pwd,port,monitor,send_mail,sen d_mail_to_list,send_weixin,send_weixin_to_list,alarm_threads_running,thresh old_alarm_threads_running,alarm_repl_status,threshold_warning_repl_delay) values (1,'127.0.0.1','sql_db','admin','hechunyang',3306,1,1,'[email protected],chu [email protected]',1,'hechunyang',NULL,NULL,NULL,NULL);

注,以下字段可以按照需求变更:

ip字段含义:输入被监控MySQL的IP地址

dbname字段含义:输入被监控MySQL的数据库名

user字段含义:输入被监控MySQL的用户名(最好给ALL管理员权限)

pwd字段含义:输入被监控MySQL的密码

port字段含义:输入被监控MySQL的端口号

monitor字段含义:0为关闭监控(也不采集数据,直接跳过);1为开启监控(采集数据)

send_mail字段含义:0为关闭邮件报警;1为开启邮件报警

send_mail_to_list字段含义:邮件人列表

send_weixin字段含义:0为关闭微信报警;1为开启微信报警

send_weixin_to_list字段含义:微信公众号

threshold_alarm_threads_running字段含义:设置连接数阀值(单位个)

threshold_warning_repl_delay字段含义:设置主从复制延迟阀值(单位秒)

3、修改conn.php配置文件

vim /var/www/html/mysql_monitor/conn.php

$con = mysqli_connect("127.0.0.1","admin","hechunyang","sql_db","3306") or die("数据库链接错误".mysql_error());

改成你的MySQL Monitor监控工具表结构(sql_db库)连接信息

4、修改邮件报警信息

cd /var/www/html/mysql_monitor/mail/

vim mail.php

system("./mail/sendEmail -f [email protected] -t '{$this->send_mail_to_list}' -s smtp.139.com:25 -u '{$this->alarm_subject}' -o message-charset=utf8 -o message-content-type=html -m '报警信息:
{$this->alarm_info}' -xu [email protected] -xp '123456' -o tls=no");

改成你的发件人地址,账号密码,里面的变量不用修改。

5、修改微信报警信息

cd /var/www/html/mysql_monitor/weixin/

vim wechat.py

微信企业号设置移步 https://github.com/X-Mars/Zabbix-Alert-WeChat/blob/master/README.md 看此教程配置。

6、定时任务每分钟抓取一次

crontab -l

*/1 * * * * cd /var/www/html/mysql_monitor/; /usr/bin/php /var/www/html/mysql_monitor/check_mysql_repl.php > /dev/null 2 >&1

*/1 * * * * cd /var/www/html/mysql_monitor/; /usr/bin/php /var/www/html/mysql_monitor/check_mysql_status.php > /dev/null 2 >&1

check_mysql_status.php(用来采集被监控端MySQL状态信息和触发报警——单进程)

parallel_check_mysql_status.php (2022-01-05 新增并发多进程采集被监控端MySQL状态信息和触发报警,默认并发10个进程,建议使用)

check_mysql_repl.php(用来采集被监控端MySQL主从复制信息和触发报警)

7、更改页面自动刷新频率

vim mysql_status_monitor.php

vim mysql_repl_monitor.php

http-equiv="refresh" content="600"

默认页面每600秒自动刷新一次。

8、页面访问

http://yourIP/mysql_monitor/mysql_status_monitor.php

http://yourIP/mysql_monitor/mysql_repl_monitor.php

加一个超链接,可方便地接入你们的自动化运维平台里。

mysql_monitor's People

Contributors

hcymysql avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

mysql_monitor's Issues

我安装好了,可以进web界面了,但是什么数据都没有

您好,我按照步骤安装好了,能进入到web监控界面了,但是什么信息都没有
输入ip地址,选择数据库和端口号,搜索也没有返回任何记录
image

是我的配置有问题?
mysql_status_info这个表的dbname是被监控ip的数据schema_name吗?还是只是一个实例名的名称?(一个实例下有好多个schema是不是就要insert很多行呢?)

另外有比较简便的沟通方式吗,比如微信或者QQ

master gtid_mode 辨认错误

檔案文件:mysql_repl_monitor.php
代码 line 77 用 Auto_Position 来判断是否启用 gtid
但 master 执行 show slave status 回传是空的,代表不会得到 Auto_Position 值,导致代码判断 master 未启用 gtid

建议将 sqls array 改成
SHOW GLOBAL VARIABLES WHERE variable_name REGEXP 'server_id$|^read_only|gtid_mode'
而代码 line 77 可以移除,直接在后续的 insert 语句中改成 .end($re)['gtid_mode']. 即可

可以进web界面了,但是什么数据都没有

按照楼上的解决方法,修改dbname随便一个名称,还是不行的
连接数据库没有任何问题,权限也没有问题
image
能从mysql_status_info获取到数据库名称,说明数据库连接一定没啥问题,辛苦大佬看下啥原因呢?

role 判断错误

MySQL 状态监控
image

MySQL 主从复制监控
image

同样的设定,250.5 是主,但在主从复制监控却显示为从。
250.5 执行 show slave status 结果为空,不应该抓到主库位置。
是否代码有哪边判断错误了?

监控repl脚本无法跑出数据

麻烦大佬帮看下
php mysql_repl_monitor.php,执行的时候无法跑出数据。数据库表中也没有数据
image

php check_mysql_status.php 数据库状态脚本正常

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.