阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL监控主要指标及采集方法

385次阅读
没有评论

共计 5611 个字符,预计需要花费 15 分钟才能阅读完成。

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

MySQL 监控和 Redis 监控的逻辑类似,可参考文章《Redis 监控主要指标及采集方法 http://www.linuxidc.com/Linux/2016-11/136783.htm》。

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} -e’show 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

注:Seconds_Behind_Master,该值作为判断主从延时的指标,那么它又是怎么得到这个值的呢,同时,它为什么又受到很多人 的质疑?

Seconds_Behind_Master 是通过比较 sql_thread 执行的 event 的 timestamp 和 io_thread 复制好的 event 的 timestamp(简写为 ts) 进行比较,而得到的这么一个差值。我们都知道的 relay-log 和主库的 bin-log 里面的内容完全一样,在记录 sql 语句的同时会被记录上当时的 ts,所以比较参考的值来自于 binlog,其实主从没有必要与 NTP 进行同步,也就是说无需保证主从时钟的 一致。你也会发现,其实比较真正是发生在 io_thread 与 sql_thread 之间,而 io_thread 才真正与主库有关联,于是,问题就出来了,当主库 I / O 负载很大或是网络阻塞,io_thread 不能及时复制 binlog(没有中断,也在复制),而 sql_thread 一直都能跟上 io_thread 的脚本,这时 Seconds_Behind_Master 的值是 0,也就是我们认为的无延时,但是,实际上不是,你懂得。这也就是为什 么大家要批判用这个参数来监控数据库是否发生延时不准的原因,但是这个值并不是总是不准,如果当 io_thread 与 master 网络很好的情况下,那么 该值也是很有价值的。

之前,提到 Seconds_Behind_Master 这个参数会有负值出现,我们已经知道该值是 io_thread 的最近跟新的 ts 与 sql_thread 执行到 的 ts 差值,前者始终是大于后者的,唯一的肯能就是某个 event 的 ts 发生了错误,比之前的小了,那么当这种情况发生时,负值出现就成为可能。

28、检测采集 Agent 心跳情况

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-11/136788.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计5611字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7800374
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...
星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的 NAS 中! 大家对「数据安全感」的需求越来越高 ...
星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛 NAS-5:飞牛 NAS 中的 Docker 功能介绍 大家好,我是星哥,今天给大家带来如何在...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...