前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用shell批量监控磁盘坏块(二) (r7笔记第80天)

使用shell批量监控磁盘坏块(二) (r7笔记第80天)

作者头像
jeanron100
发布2018-03-16 17:58:40
9180
发布2018-03-16 17:58:40
举报

之前分享了第一篇 使用shell批量监控磁盘坏块(一),今天来简单说说这个需求的实现内容 。 首先主要思路是通过中控的机器来发送监控的细节,然后返回结果。

首先就是我们需要有一个服务器列表,里面会有这些需要的元数据信息。 比如列表如下: 192.127.133.13 某某服务中心主库 jeanron Primary Linux Oracle N xxx 192.127.133.12 某某服务备库 jeanron Standby Linux Oracle N xxxx 192.127.133.18 某某业务主库 jeanron Primary Linux Oracle N xxxx 192.127.133.52 某某业务备库 jeanron Primary Linux Oracle N xxxx 通过这个列表就可以开始分析了。脚本实现内容如下: . ~/.bash_profile > /dev/null BASEDIR="/home/hardcheck" mkdir -p ${BASEDIR}/{tmplog,log} && cd ${BASEDIR} DATE=`date +%Y%m%d%H%M` LOG="hardcheck_${DATE}.log" TMP_SCRIPT="hardcheck_${DATE}.sh" exec 3>&1 4>&2 1>$LOG 2>&1 将服务器列表作为参数传递进来,为了考虑字符兼容性,统一采用utf8来处理 SERVERLIST=$1 if [ -z "${SERVERLIST}" ] || [ ! -s "${SERVERLIST}" ] ; then cat /home/jeanron/alldbserver-linux.txt|iconv -f GBK -t UTF8|grep jeanron|grep -v Solaris|grep -v nopingdb|grep -v "#1"> db_list.all.lst SERVERLIST=$BASEDIR/db_list.all.lst fi SSH="ssh -oConnectionAttempts=3 -oConnectTimeout=5 -oStrictHostKeyChecking=no" echo "#start hardcheck" {{{ 以下为真正的hardcheck检查,远程调用 while read line do tmp_host=`echo $line|egrep -iv '^$|^#|Solaris|AIX'` --排除solaris,AIX的检测 IP=`echo $tmp_host|awk '{print $1}'` DB=`echo $tmp_host|awk '{print $2}'` OWNER=`echo $tmp_host|awk '{print $3}'` STD_TYPE=`echo $tmp_host|awk '{print $4}'` DB_TYPE=`echo $tmp_host|awk '{print $6}'` ILO_INFO=`echo $tmp_host|awk '{print $8}'` echo "echo \"$IP;$DB;$OWNER;$STD_TYPE;$DB_TYPE;$ILO_INFO\"" >> $TMP_SCRIPT echo "${SSH} $IP \"/opt/MegaRAID/MegaCli/MegaCli64 -CfgDsply -a0|grep Error;/opt/MegaRAID/MegaCli/MegaCli64 -PDList -aALL|grep Firmware|grep -v Level|grep -v Up|grep -v Online \" " >>$TMP_SCRIPT done < ${SERVERLIST} }}} {{{ 邮件报警 sh $TMP_SCRIPT |tee $LOG |grep -v "Error Count: 0"| grep -v \;\;\;\;\;> mail.txt MAILTO="jeanron100@hotmail.com" /bin/bash $BASEDIR/beautymail.sh -t "DBIP;DB用途;负责人;主备库;数据库类型;ILO信息" -m ${MAILTO} -s "Disk Error Count Health Daily Check(${DATE})" ${BASEDIR}/mail.txt 里面有几个地方可以改进一下,对于命令的报告形式,发现还是有一个脚本非常不错,beautymail.sh 内容如下,对于格式美化还是非常给力的,我们只需要输入一个基本格式的数据,就会输出一个格式化后的结果内容,非常给力。 输出的结果类似下面的效果。

脚本内容如下,当然也是参考了很多的出处,我只是引用一下。 source /etc/profile > /dev/null . ~/.bash_profile > /dev/null title='' topline="" html='/tmp/info.html' mail='jeanron100@hotmail.com' subject='【报警输出优化】Test' while getopts "a:T:t:H:m:s:h" Option do case $Option in a) addfile="$OPTARG";; T) title="$OPTARG";; t) topline="$OPTARG";; H) html="$OPTARG";; m) mail="$OPTARG";; s) subject="$OPTARG";; h) echo -e "beautymail V2.0 copyright To make your mail more human-readable\n\ Usage: beautymail [-a addfile] [-T title-in-mail] [-t topline] [-H html-location] [-m mail-addr] [-s subject] content-file\n\ Options: -a: 设置邮件里加附件,addfile需要附件的绝对路径 -T: 设置邮件里表格上方的说明文字 -t: 设置表格中首行,即各列的含义,如-t \" 日志类型;日志量;文件数 \", 注意是用英文分号隔开的多列 -m: 指定收件人 -s: 邮件主题 " exit esac done shift $(($OPTIND - 1)) function init(){ chars=$(echo $topline|wc -c) width=$(echo $chars*50|bc) cat >$html<<EOF <font color = green ><b>数据情况: ${title}</b></font> </form> <table width=$width border="1"> </table> EOF topline=$(echo $topline |sed -e 's/^/<b>/' -e 's/;/<\/b>;<b>/g' -e 's/$/<\/b>/') write2table "$topline" yellow } function write2table() { sed -i '$i\<tr>\n<\/tr>' $html # line=$(echo "$1"|awk -F';' '{i=1; while (i<=NF) {print $i;i++}}') # for colume in $line;do echo "$1"|awk -F';' '{i=1; while (i<=NF) {print $i;i++}}'|while read colume do wcl=$(cat $html|wc -l) insert=$(echo ${wcl}-1|bc) # echo $insert $colume # echo if [ -n $2 ] ; then sed -i "$insert i\ <td bgColor=$2>$colume<\/td>" $html else sed -i "$insert i\ <td>$colume<\/td>" $html fi done } init [ -z $1 ] && echo 'At least need a log file to mail' && exit 2 cp -p $1 $1.tmp dos2unix $1.tmp # && sed -i -e 's/ /;/g' -e 's/\t/;/g' $1 #for i in $(cat $1);do 按行处理 cat $1.tmp |while read line do write2table "$line" done rm -f ${1}.tmp #发送带附件的HTML格式正文的函数 (对于非txt或者cvs格式的文件,例如excel的xls,需要单独修改Type:搜MIMEtype) #$1: mail_from #$2: mail_to #$3: subject #$4: content mimetype, such as "text/plain" #$5: content #$6: attach mimetype, such as "text/csv" #$7: attach display name #$8: attach file path function SendMailMultiMediaAttach(){ local MSG_FILE="/tmp/mail.tmp" sub=$(echo $3|iconv -f GB2312 -t UTF-8) echo "From: $1" > $MSG_FILE echo "To: $2" >> $MSG_FILE echo "Subject: $sub" >> $MSG_FILE echo "Mime-Version: 1.0" >> $MSG_FILE echo 'Content-Type: multipart/mixed; boundary="GvXjxJ+pjyke8COw"' >> $MSG_FILE echo "Content-Disposition: inline" >> $MSG_FILE echo "" >> $MSG_FILE echo "--GvXjxJ+pjyke8COw" >> $MSG_FILE echo "Content-Type: $4" >> $MSG_FILE echo "Content-Disposition: inline" >> $MSG_FILE echo "" >> $MSG_FILE echo "$5" >> $MSG_FILE echo "" >> $MSG_FILE echo "" >> $MSG_FILE if [ ! -z $8 ];then echo "--GvXjxJ+pjyke8COw" >> $MSG_FILE echo "Content-Type: $6" >> $MSG_FILE echo "Content-Transfer-Encoding: base64" >> $MSG_FILE echo "Content-Disposition: attachement; filename=$7" >> $MSG_FILE echo "" >> $MSG_FILE echo "" >> $MSG_FILE /usr/bin/base64 $8 >> $MSG_FILE fi cat $MSG_FILE | /usr/lib/sendmail -t } ##! @TODO: 发送邮件 ##! @AUTHOR: http://neoremind.net/2011/02/linux_sendmail_attachment_mutt/ ##! @VERSION: 1.0 ##! @IN: ##! @OUT: function sendMail() { echo "Sending $subject mail from $from to $to" from="root@$(hostname)" to="$1" #subject="$2" subject="=?UTF-8?B?`echo -n $2|base64`?=" content_type="text/html;charset=utf-8" MAIL_HTML="$3" body="$(cat $MAIL_HTML)" attach_type="text/csv" attach_path="$4" attach_name=$(echo "$attach_path"|awk -F'/' '{print $NF".txt"}') SendMailMultiMediaAttach "$from" "$to" "$subject" "$content_type" "$body" "$attach_type" "$attach_name" "$attach_path" echo "Send mail done." } echo $addfile if [ -z "$addfile" ];then sendMail "$mail" "$subject" "$html" else sendMail "$mail" "$subject" "$html" "$addfile" fi #mutt -e 'my_hdr Content-Type: text/html' "$mail" -s "$subject" < "$html";

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-01-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档