mysql 数据库监控

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

Loading…
Cancel
Save