码迷,mamicode.com
首页 > 数据库 > 详细

mysql监控

时间:2016-11-06 07:48:28      阅读:398      评论:0      收藏:0      [点我收藏+]

标签:cal   写入   page   connect   sql命令   table   show   系统   and   

  Mysql监控属于DB监控的模块之一,包括采集、展示、监控告警。本文主要介绍Mysql监控的主要指标和采集方法。

  Mysql监控和Redis监控的逻辑类似,可参考文章《Redis监控》。

  DBA前台添加Mysql监控时系统会调用自动调度平台接口将Mysql监控的加密账户密码和ip端口等信息发送至目标,同时发送采集Agent。

  一、采集指标和命令

  1、Mysql服务运行状态

约定所有Mysql服务都必须以ip1(内网ip)来绑定,每个机器只有一个ip1,可以有多个端口,即多个Mysql Server。采集程序读取ip端口信息文件来判断server是否存在。

sockParam=`ps aux | grep -P "mysqld.*--port=${port}" | grep -oP " --socket.*\.sock"`  # 空则获取不到该服务器端口mysql socket配置,请检查mysql配置是否正确
MYSQL="/usr/local/mysql/bin/mysql -hlocalhost --port=${port} ${sockParam} -u${user} -p${password} "
MYSQL_ADMIN="/usr/local/mysql/bin/mysqladmin -hlocalhost --port=${port} ${sockParam} -u${user} -p${password} "
curStatus=`${MYSQL} -e"show global status"`   # 空则是获取不到该服务器mysql状态,请检查mysql是否正常运行
if [ -z "${curStatus}" ]
then
    portExists=0
else
    echo "${curStatus}" >> ${curFile}
    portExists=1

  2、连接数

${MYSQL_ADMIN} processlist -v | wc -l

 

  3、线程数

grep Threads_connected ${curFile} | awk {print $2}

  4、慢查询数

grep Slow_queries ${curFile} | awk -F   {print $2}

需要计算两次的慢查询次数得到差值,等于最近1分钟的慢查询次数。上次数据保存在last.cache。

  5、打开表数

grep Open_tables ${curFile} | awk -F   {print $2}

  6、每秒执行select数

grep Com_select ${curFile} | awk -F   {print $2}

需要计算两次的慢查询次数得到差值除以时间差,等于最近1分钟的执行数量。上次数据保存在last.cache。  

  7、每秒执行delete数

grep Com_delete ${curFile} | grep -v multi | awk -F   {print $2}

需要计算两次的慢查询次数得到差值除以时间差,等于最近1分钟的执行数量。上次数据保存在last.cache。

  8、每秒执行insert数

grep Com_insert ${curFile} | grep -v select | awk -F   {print $2}

需要计算两次的慢查询次数得到差值除以时间差,等于最近1分钟的执行数量。上次数据保存在last.cache。

  9、每秒执行update数

grep Com_update ${curFile} | grep -v multi | awk -F   {print $2}

需要计算两次的慢查询次数得到差值除以时间差,等于最近1分钟的执行数量。上次数据保存在last.cache。

  10、每秒钟执行replace数

grep Com_replace ${curFile} | grep -v select | awk -F   {print $2}

需要计算两次的慢查询次数得到差值除以时间差,等于最近1分钟的执行数量。上次数据保存在last.cache。 

  11、每秒钟执行的 Innodb_rows_deleted

grep Innodb_rows_deleted ${curFile} | awk -F   {print $2}

需要计算两次的慢查询次数得到差值除以时间差,等于最近1分钟的执行数量。上次数据保存在last.cache。  

  12、每秒钟执行的 Innodb_rows_inserted

grep Innodb_rows_inserted ${curFile} | awk -F   {print $2}

需要计算两次的慢查询次数得到差值除以时间差,等于最近1分钟的执行数量。上次数据保存在last.cache。  

  13、每秒钟执行的 Innodb_rows_read

grep Innodb_rows_read ${curFile} | awk -F   {print $2}

需要计算两次的慢查询次数得到差值除以时间差,等于最近1分钟的执行数量。上次数据保存在last.cache。

  14、每秒钟执行的 Innodb_rows_updated

grep Innodb_rows_updated ${curFile} | awk -F   {print $2}

需要计算两次的慢查询次数得到差值除以时间差,等于最近1分钟的执行数量。上次数据保存在last.cache。

  15、每秒钟执行的 innodb rows total

expr ${innodbRowsDeletedPS} + ${innodbRowsInsertedPS} + ${innodbRowsReadPS} + ${innodbRowsUpdatedPS}

等于前面四个Innodb_rows_*执行次数的总和

  16、每秒处理命令数 qps

expr ${mysqlSelectNumPS} + ${mysqlInsertNumPS} + ${mysqlUpdateNumPS} + ${mysqlDeleteNumPS} + ${mysqlReplaceNumPS}

等于前面五个mysql命令Com_*的数量总和

  17、每秒接收字节数 KByte/s

grep Bytes_received ${curFile} | awk -F   {print $2}

需要计算两次的慢查询次数得到差值除以时间差,等于最近1分钟的执行数量,除以1024得到单位KByte/s。上次数据保存在last.cache。

  18、每秒发送字节数

grep Bytes_sent ${curFile} | awk -F   {print $2}

需要计算两次的慢查询次数得到差值除以时间差,等于最近1分钟的执行数量,除以1024得到单位KByte/s。上次数据保存在last.cache。

  19、可立即获得锁的次数

grep Table_locks_immediate ${curFile} | awk -F   {print $2}

需要计算两次的慢查询次数得到差值,等于最近1分钟的可立即获得锁数量。上次数据保存在last.cache。

  20、不可立即获得锁的次数

grep Table_locks_waited ${curFile} | awk -F   {print $2}

需要计算两次的慢查询次数得到差值,等于最近1分钟的不可立即获得锁数量。上次数据保存在last.cache。

  21、一行锁定需等待时间

grep Innodb_row_lock_waits ${curFile} | awk -F   {print $2}

需要计算两次的慢查询次数得到差值,等于最近1分钟的一行锁定需等待时间。上次数据保存在last.cache。

  22、 当前脏页数

grep Innodb_buffer_pool_pages_dirty ${curFile} | awk -F   {print $2}

  23、要求清空的缓冲池页数

grep Innodb_buffer_pool_pages_flushed ${curFile} | awk -F   {print $2}

需要计算两次的慢查询次数得到差值,等于最近1分钟的要求清空的缓冲池页数。上次数据保存在last.cache。

  24、Innodb 写入日志字节数 KByte

grep Innodb_os_log_written ${curFile} | awk -F   {print $2}

需要计算两次的慢查询次数得到差值,等于最近1分钟的写入日志字节数,除以1024得到KByte。上次数据保存在last.cache。

  25、占用内存大小 MByte

pid=`ps aux | grep mysqld | grep -Ev safe|grep | awk {print $2} `
mem=`cat /proc/${pid}/status | grep VmRSS | awk {print $2}`
mysqlMem=`echo "scale=2;${mem} / 1024" | bc`

除以1024得到MByte

  26、handler socket每秒处理数

curHsTableLock=`grep Hs_table_lock ${curFile} | awk {print $2}`
preHsTableLock=`grep Hs_table_lock ${preFile} | awk {print $2}`
if [ -n "${curHsTableLock}" ]
then
    hsQPS=`echo "scale=0;(${curHsTableLock} - ${preHsTableLock}) / ${intervalTime}" | bc`
else
    hsQPS=0
fi

  27、主从同步和状态

#主从信息
#是否为从服务器
slave_running=`grep Slave_running ${curFile} | awk {print $2}`
if [ "${slave_running}A" = "ONA" ]
then
    slaveRunning=1
    slaveStatus=`${MYSQL} -eshow slave status\G`
    echo "${slaveStatus}" > ${slaveFile}
    
    slaveIoRunning=`grep Slave_IO_Running ${slaveFile} | awk -F : {print $2}`
    slaveSqlRunning=`grep Slave_SQL_Running ${slaveFile} | awk -F : {print $2}`

    if [ "${slaveIoRunning}A" == "NoA" -o "${slaveSqlRunning}A" == "NoA" ]
    then
        slaveRunning=3
    fi
    
    secondsBehindMaster=`grep Seconds_Behind_Master ${slaveFile} | awk -F : {print $2}`
    if [ "${secondsBehindMaster}A" = "NULLA" ]
    then
        secondsBehindMaster=8888
    fi

    #是从库时 获取主库ip
    master=`grep Master_Host ${slaveFile} | awk -F : {print $2}`
    masterPort=`grep Master_Port ${slaveFile} | awk -F : {print $2}`
else
    master=""
    masterPort=""
    slaveRunning=0
    secondsBehindMaster=10000
fi

原创文章,转载请备注原文地址  http://www.cnblogs.com/lxmhhy/p/6034609.html

知识交流讨论请加qq:1130010617。谢谢合作。

mysql监控

标签:cal   写入   page   connect   sql命令   table   show   系统   and   

原文地址:http://www.cnblogs.com/lxmhhy/p/6034609.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!