diff --git a/dbMonitor.sh b/dbMonitor.sh new file mode 100644 index 0000000..c2fb383 --- /dev/null +++ b/dbMonitor.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 diff --git a/osMonitor.sh b/osMonitor.sh index c78f28a..779b68d 100644 --- a/osMonitor.sh +++ b/osMonitor.sh @@ -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) services $2 # servicesList service -;; + ;; Crontab) crontab $2 # user -esac \ No newline at end of file + ;; +esac