一、mysql监控
1、Orzdba
2、Tcprstat
3、pt-query-digest
是用于分析mysql慢查询的一个工具,它可以分析binlog、General log、slowlog,也可以通过SHOWPROCESSLIST或者通过tcpdump抓取的MySQL协议数据来进行分析。可以把分析结果输出到文件中,分析过程是先对查询语句的条件进行参数化,然后对参数化以后的查询进行分组统计,统计出各查询的执行时间、次数、占比等,可以借助分析结果找出问题进行优化。
4、prometheus + grafana监控mysql
GitHub网址:https://github.com/prometheus/prometheus
软件下载地址:https://prometheus.io/download/
Prometheus是一个开源的系统监控和报警的工具包,最初由SoundCloud发布。组件:
Prometheus 主程序,主要是负责存储、抓取、聚合、查询方面。
Alertmanager 程序,主要是负责实现报警功能。
Pushgateway 程序,主要是实现接收由Client push过来的指标数据,在指定的时间间隔,由主程序来抓取。
*_exporter 这类是不同系统已经实现了的集成。
prometheus部署
1、下载安装包prometheus-1.6.2.linux-amd64.tar.gz
https://github.com/prometheus/prometheus/releases/tag/v1.6.2
2、解压
tar -xvf prometheus-1.6.2.linux-amd64.tar.gz
cd prometheus-1.6.2.linux-amd64
3、配置prometheus.yml
scrape_interval: 15s # 默认15秒到目标处抓取数据
4、启动
nohup ./prometheus -config.file=prometheus.yml &
或
nohup /opt/prometheus-1.6.2.linux-amd64/prometheus &
5、WEB页面访问http://localhost:9090/ ,可以看到Prometheus的首页页面。
grafana部署
1、安装grafana
wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-4.2.0-1.x86_64.rpm
sudo yum install initscripts fontconfig -y
sudo rpm -Uvh grafana-4.2.0-1.x86_64.rpm
2、启动服务service grafana-server start
3、访问页面http://localhost:3000 ,默认账号、密码admin/admin
4、Prometheus 和 Grafana 的对接
创建Prometheus数据源:
1)点击Grafana徽标打开边栏菜单。
2)点击边栏中的“数据源”。
3)点击“添加新的”。
4)选择“Prometheus”作为类型。
5)设置适当的Prometheus服务器URL(例如http://localhost:9090/)
6)根据需要调整其他数据源设置(例如,关闭代理访问)。
7)点击“添加”保存新的数据源。
5、zabbix监控mysql性能
监控思路
先在zabbix主机上面配置好mysql服务器的信息,添加好zabbix自带的 MySQL模版,然后去mysql服务器上安装agent,再添加mysql监控脚本(chk_mysql.sh),zabbix通过调用chk_mysql.sh这个脚本来获取mysql的运行信息。可以监控如下内容:OPS(增删改查)、mysql请求流量带宽,mysql响应流量带宽
编写check_mysql.sh脚本
# vim /usr/local/zabbix-2.4.4/scripts/chk_mysql.sh
脚本如下:
#!/bin/bash # 用户名 MYSQL_USER='zabbix' # 密码 MYSQL_PWD='123456' # 主机地址/IP MYSQL_HOST='127.0.0.1' # 端口 MYSQL_PORT='3306' # 数据连接 MYSQL_CONN="/usr/bin/mysqladmin -u${MYSQL_USER} -p${MYSQL_PWD} -h${MYSQL_HOST} -P${MYSQL_PORT}" # 参数是否正确 if [ $# -ne "1" ];then echo "arg error!" fi # 获取数据 case $1 in Uptime) result=`${MYSQL_CONN} status|cut -f2 -d":"|cut -f1 -d"T"` echo $result ;; Com_update) result=`${MYSQL_CONN} extended-status |grep -w "Com_update"|cut -d"|" -f3` echo $result ;; Slow_queries) result=`${MYSQL_CONN} status |cut -f5 -d":"|cut -f1 -d"O"` echo $result ;; Com_select) result=`${MYSQL_CONN} extended-status |grep -w "Com_select"|cut -d"|" -f3` echo $result ;; Com_rollback) result=`${MYSQL_CONN} extended-status |grep -w "Com_rollback"|cut -d"|" -f3` echo $result ;; Questions) result=`${MYSQL_CONN} status|cut -f4 -d":"|cut -f1 -d"S"` echo $result ;; Com_insert) result=`${MYSQL_CONN} extended-status |grep -w "Com_insert"|cut -d"|" -f3` echo $result ;; Com_delete) result=`${MYSQL_CONN} extended-status |grep -w "Com_delete"|cut -d"|" -f3` echo $result ;; Com_commit) result=`${MYSQL_CONN} extended-status |grep -w "Com_commit"|cut -d"|" -f3` echo $result ;; Bytes_sent) result=`${MYSQL_CONN} extended-status |grep -w "Bytes_sent" |cut -d"|" -f3` echo $result ;; Bytes_received) result=`${MYSQL_CONN} extended-status |grep -w "Bytes_received" |cut -d"|" -f3` echo $result ;; Com_begin) result=`${MYSQL_CONN} extended-status |grep -w "Com_begin"|cut -d"|" -f3` echo $result ;; *) echo "Usage:$0(Uptime|Com_update|Slow_queries|Com_select|Com_rollback|Questions|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|Com_begin)" ;; esac
安装mysql
[root@test3 /]# yum -y install mysql mysql-server
初始化数据库
[root@test3 /]# /etc/init.d/mysqld start
[root@test3 /]# mysqladmin -uroot -h 127.0.0.1 password 123456
[root@test3 /]# mysql -u root -p
Enter password:
创建一个登陆mysql的用户
mysql> GRANT USAGE ON*.*TO'zabbix'@'localhost'IDENTIFIED BY'zabbix';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye
修改zabbix_agentd.conf
增加自定义key,在最后一行增加如下:
# 获取mysql版本
UserParameter=mysql.version,mysql -V
# 获取mysql性能指标,这个是上面定义好的脚本
UserParameter=mysql.status[*],/usr/local/zabbix2.4.4/scripts/chk_mysql.sh $1
# 获取mysql运行状态
UserParameter=mysql.ping,mysqladmin -uzabbix -p123456 -P3306 -h127.0.0.1 ping | grep -c alive
备注:请注意修改你的数据库信息,以及zabbix路径信息
重启zabbix
# killall zabbix-agentd
# /usr/local/zabbix-2.4.4/bin/zabbix_agentd
或者
# service zabbix_agentd restart
MySQL模板
模板是zabbix系统提供的,进入zabbix web后台,configuration-->hosts-->点击你的主机name-->选择template选项卡,选择模板“Template App MySQL”,最后点击update即可
数据查看
如果配置没有异常,那么可以在graph中查看到2张监控图,分别为请求流量带宽、响应流量带宽、ops,点击monitoring-->graphs-->选择你的主机,分别选择Graph“MySQL bandwidth”、“MySQL operations”,监控图分别如下(图片可以点击放大查看):
zabbix监控mysql
二、oracle监控
1、AWR报告 AWR是Oracle的一个组件,需要安装,可以结合toad一起使用
2、tcprstat
3、doDBA tools
在Oracle数据库中提供了「AWR,ASH,SQL Monitor」等众多诊断工具,可以一眼望穿数据库正在做什么,甚至都可以知道在过去30天内任何一个时间区间的性能负载和当时数据库正在做什么。在MySQL中虽然有像「zabbix,PMM」等优秀的监控工具,但它们只能反映数据库历史的一些性能数据曲线,例如,TPS高了,临时表使用多了,有InnoDB Deadlocks,但对于MySQL当时的Doing,我只能说不够直接。
doDBA tools是一个基于控制台的远程监控工具,它不需要在本地/远程系统上安装任何软件,它可以实时收集操作系统、MySQL、InnoDB的实时性能状态数据,并可以生成Doing日志文件,来帮助你快速了解/优化系统及MySQL数据库。
特点
●基于golang语言开发
●可收集Linux、MySQL相关性能数据
●可本地或远程收集,可多台
●mytop --Like Linux TOP
●基于并发生成Doing日志,复现现场
●可记录到日志文件
doDBA tools 工作原理
远程收集系统信息是通过ssh(用户名密码或建立信任)的方式连接到远程服务器上收集,收集的方法都是通过读取Linux的proc下的等meminfo,diskstats,uptime,net,vmstat ,cpuinfo ,loadavg等文件,这和pmm,zabbix收集方式一致。
远程收集MySQL信息是通过 MySQL tcp连接到MySQL数据库上收集,只需要授予连接用户PROCESS、SELECT权限即可。
系统信息和MySQL信息的收集可以分离,如果只想收集系统信息,只需要提供系统用户名密码即可,如果只收集MySQL可以只提供MySQL连接信息,如果是rds用户,可以使用-rds参数,在使用mytop时会自动忽略系统信息的收集。
如何使用
Github主页:https://github.com/dblucyne/dodba_tools
下载下来就可以直接使用,不依赖于任何环境。
使用实例
1. 收集Linux性能数据
./doDBA -h=10.1.x.xx -sys
2. 收集MySQL性能数据
./doDBA -h=10.1.x.xx -mysql
3. 收集InnoDB性能数据
./doDBA -h=10.1.x.xx -innodb
4. 收集MySQL及Linux性能数据
./doDBA -h=10.1.x.xx -myall
5. mytop --like linux top
./doDBA -h=10.1.x.xx -mytop
6. 借助Shell收集多台
cat ip.txt
10.1.x.x1
10.1.x.x2
Shell
cat ip.txt | while read ip;
do
echo $ip;
./doDBA -h=$ip -mysql -log
done
7. 收集到日志文件
./doDBA -h=10.1.x.xx -mysql -log
8. 开启Doing功能
使用【-t】参数可以基于Threads_running的数量设置阈值,设置后可记录「processlist,engine innodb status」信息到dodba.log日志中,--复现现场。
./doDBA -h=10.1.x.xx -myall -t=3
9. 查看Doing日志
tail -f dodba.log