mysql 数据库监控

master
newrain 3 years ago
parent b0724c7288
commit 42dd7397b7
  1. 99
      dbMonitor.sh
  2. 98
      osMonitor.sh

@ -0,0 +1,99 @@
#!/usr/bin/bash
# os check
# build 2021-06-16
replPasswd=$1 # zabbix传参
replUser=root
cmdPath=/usr/bin/mysql
slowLog=/var/log/mysql/slow.log
slowTmp=/tmp/.slowLog
# mysql ms monitor
#1、数据库存活
function Heartbeat() {
$cmdPath -u$replUser -p$replPasswd -e 'select user' &>/dev/null
echo $?
}
#7、主从同步情况
function Twins() {
result=$($cmdPath -u$replUser -p$replPasswd -e 'show slave status\G' 2>/dev/null | grep 'Running:')
echo $result | grep Yes >/dev/null && s=0 || s=1 && echo $s
}
#2、增删改查次数 QPS、TPS
function Crud() {
local _result _uptime
_uptime=$($cmdPath -N -u$replUser -p$replPasswd -e "show global status like 'Uptime'" 2>/dev/null | awk '{print $2}')
if [ $1 == 'QPS' ] || [ $1 == 'qps' ] || [ $1 == 'Qps' ]; then
_select=$($cmdPath -N -u$replUser -p$replPasswd -e "show global status like 'Com_select'" 2>/dev/null | awk '{print $2}')
_update=$($cmdPath -N -u$replUser -p$replPasswd -e "show global status like 'Com_update'" 2>/dev/null | awk '{print $2}')
_insert=$($cmdPath -N -u$replUser -p$replPasswd -e "show global status like 'Com_insert'" 2>/dev/null | awk '{print $2}')
_delete=$($cmdPath -N -u$replUser -p$replPasswd -e "show global status like 'Com_delete'" 2>/dev/null | awk '{print $2}')
_result=$(($_select + $_update + $_insert + $_delete))
echo "scale=5;a=${_result}/${_uptime};if (length(a)==scale(a)) print 0;print a " | bc
elif [ $1 == 'TPS' ] || [ $1 == 'tps' ] || [ $1 == 'Tps' ]; then
_commit=$($cmdPath -N -u$replUser -p$replPasswd -e "show global status like 'Com_commit'" 2>/dev/null | awk '{print $2}')
_rollback=$($cmdPath -N -u$replUser -p$replPasswd -e "show global status like 'Com_rollback'" 2>/dev/null | awk '{print $2}')
_result=$(($_commit + $_rollback))
echo "scale=5;a=${_result}/${_uptime};if (length(a)==scale(a)) print 0;print a " | bc
else
_result=$($cmdPath -N -u$replUser -p$replPasswd -e "show global status like 'Com_${1}'" 2>/dev/null | awk '{print $2}')
echo $_result
fi
}
#4、慢查询日志
function SlowLog() {
#slowlog config my.cnf
#[mysqld]
#slow_query_log = ON
#slow_query_log_file = /var/log/mysql/slow.log
#long_query_time = 5
newLines=$(cat $slowLog | wc -l)
datetime=$(date +%y%m%d%H)
if [ -f $slowTmp ]; then
oldLines=$(cat $slowTmp)
diff=$(($newLines - $oldLines))
tail -n $diff $slowLog
else
echo -n $newLines >$slowTmp
fi
if [ $(du -s $slowLog | awk '{print $1}') -ge 2000 ]; then
cat $slowLog >/var/log/mysql/slow${datetime}.log && echo -n >$slowLog && echo -n 0 >$slowTmp
fi
}
#5、数据库最大连接数
function Config() {
_result=$($cmdPath -N -u$replUser -p$replPasswd -e "show variables like \"$1\"" 2>/dev/null | awk '{print $2}')
echo $_result
}
#8、数据库登陆主机为%的用户
function RemoteUser(){
_result=$($cmdPath -N -u$replUser -p$replPasswd -e "select User from mysql.user where Host='%';" 2>/dev/null | awk '{print $2}')
echo $_result
}
case $2 in
heartbeat)
Heartbeat
;;
crud)
Crud $3 # insert update delete select commit rollback qps tps
;;
twins)
Twins
;;
slowlog)
SlowLog
;;
config)
Config $3 # max_connections innodb_buffer_pool_size ...
;;
*)
echo 999
;;
esac

@ -4,133 +4,139 @@
# build 2021-06-16
#1、磁盘根分区剩余百分比 #返回数值,并添加触发器报警
function disk(){
function disk() {
local _part _disk
_part=$(lsblk -b |grep "centos-root"|awk '{print $(NF-3)}'|awk -F'G' '{print $1}')
_disk=$(lsblk -b |grep sda|grep disk|awk '{print $(NF-2)}'|awk -F'G' '{print $1}')
echo "scale=2;a=${_part}/${_disk};if (length(a)==scale(a)) print 0;print a " |bc
_part=$(lsblk -b | grep "centos-root" | awk '{print $(NF-3)}' | awk -F'G' '{print $1}')
_disk=$(lsblk -b | grep sda | grep disk | awk '{print $(NF-2)}' | awk -F'G' '{print $1}')
echo "scale=2;a=${_part}/${_disk};if (length(a)==scale(a)) print 0;print a " | bc
}
#2、内存剩余百分比 #返回数值
function memory(){
function memory() {
local _memFree _memTotal
_memFree=$(free -b |awk 'NR==2{print $4}')
_memTotal=$(free -b |awk 'NR==2{print $2}')
echo "scale=2;a=${_memFree}/${_memTotal};if (length(a)==scale(a)) print 0;print a " |bc
_memFree=$(free -b | awk 'NR==2{print $4}')
_memTotal=$(free -b | awk 'NR==2{print $2}')
echo "scale=2;a=${_memFree}/${_memTotal};if (length(a)==scale(a)) print 0;print a " | bc
}
#3、swap使用情况 #返回数值
function swap(){
free -m |awk 'NR==3{print $3}'
function swap() {
free -m | awk 'NR==3{print $3}'
}
#4、cpu 1、5、15分钟负载 #返回数值或其他类型
function cpuLoad(){
function cpuLoad() {
case $1 in
1)
uptime |awk '{print $(NF-2)}'|awk -F',' '{print $1}'
;;
uptime | awk '{print $(NF-2)}' | awk -F',' '{print $1}'
;;
5)
uptime |awk '{print $(NF-1)}'|awk -F',' '{print $1}'
;;
uptime | awk '{print $(NF-1)}' | awk -F',' '{print $1}'
;;
15)
uptime |awk '{print $(NF)}'|awk -F',' '{print $1}'
uptime | awk '{print $(NF)}' | awk -F',' '{print $1}'
;;
esac
}
#5、/etc/passwd /etc/shadow /etc/sodoers 等文件修改情况 #返回任意类型,并添加触发器报警
function fileMD5(){
[ ! -f /tmp/md5.hash ] && md5sum /etc/passwd /etc/shadow /etc/sudoers > /tmp/md5sum && echo "数据收集中"
md5sum -c /tmp/md5.hash |grep -E "FAILED|失败"
function fileMD5() {
[ ! -f /tmp/md5.hash ] && md5sum /etc/passwd /etc/shadow /etc/sudoers >/tmp/md5sum && echo "数据收集中"
md5sum -c /tmp/md5.hash | grep -E "FAILED|失败"
}
#6、系统启动时间 #返回任意类型
function uptime(){
function uptime() {
local _uptime _idletime
_uptime=$(cat /proc/uptime |awk '{print ($1/60)}') # 单位为分钟
_idletime=$(cat /proc/uptime |awk '{print ($2/60)}') # 系统空闲时间
_uptime=$(cat /proc/uptime | awk '{print ($1/60)}') # 单位为分钟
_idletime=$(cat /proc/uptime | awk '{print ($2/60)}') # 系统空闲时间
case $1 in
upTime)
echo $_uptime
;;
;;
idleTime)
echo $_idletime
;;
;;
idle)
echo "scale=2;a=${_idletime}/${_uptime};if (length(a)==scale(a)) print 0;print a " |bc
echo "scale=2;a=${_idletime}/${_uptime};if (length(a)==scale(a)) print 0;print a " | bc
;;
esac
}
#7、系统连接数 #返回数值
function conns(){
function conns() {
case $1 in
all)
netstat -an | grep ESTABLISHED | wc -l
;;
;;
[1-9]*)
lsof -i:$1 |wc -l
lsof -i:$1 | wc -l
;;
esac
}
#8、系统开启端口数量 #返回任意类型,需要知道是哪些端口
function ports(){
function ports() {
local p
case $1 in
portList)
p="`ss -tnul | grep -v Netid |awk '{print $5}'|awk -F ':' '{print $NF}'|sort -n|uniq`"
p="$(ss -tnul | grep -v Netid | awk '{print $5}' | awk -F ':' '{print $NF}' | sort -n | uniq)"
echo $p
;;
;;
port)
ss -tnul | grep -v Netid |awk '{print $5}'|awk -F ':' '{print $NF}'|sort -n|uniq|wc -l
ss -tnul | grep -v Netid | awk '{print $5}' | awk -F ':' '{print $NF}' | sort -n | uniq | wc -l
;;
esac
}
#9、系统开机启动服务 #返回任意类型
function services(){
function services() {
local s
case $1 in
servicesList)
s="`ls /etc/systemd/system/multi-user.target.wants/`"
s="$(ls /etc/systemd/system/multi-user.target.wants/)"
echo $s
;;
;;
service)
ls /etc/systemd/system/multi-user.target.wants/ |wc -l
ls /etc/systemd/system/multi-user.target.wants/ | wc -l
;;
esac
}
#10、计划任务 #返回文本
function crontab(){
function crontab() {
sudo crontab -l -u $1
}
case $1 in
Disk)
disk
;;
;;
Memory)
memory
;;
;;
Swap)
swap
;;
;;
CPULoad)
cpuLoad $2 # 1 5 15
;;
;;
FileMD5)
fileMD5
;;
;;
Uptime)
uptime $2 # upTime idleTime idle
;;
;;
Conns)
conns $2 # all [1-9]*
;;
;;
Ports)
ports $2 # portList port
;;
;;
Services)
services $2 # servicesList service
;;
;;
Crontab)
crontab $2 # user
;;
esac
Loading…
Cancel
Save