运维平台的建设思考-元数据管理(四)(r8笔记第16天)

对于服务器的一些信息,如果数据量大了之后总是感觉力不从心,需要了解,但是感觉得到的这些信息不够清晰明了。 比如我们得到一台服务器,需要知道最基本的硬件配置,内存情况,磁盘空间情况,哪些磁盘空间问题需要关注,哪些磁盘空间问题可以忽略,swap的使用情况 如何,服务器的操作系统版本,内核版本,上面运行有几个实例,是否启用了ASM,甚至服务器运行了多少天呢,这些信息看起来非常琐碎,也可以通过脚本得 到,但是一直以来感觉都是比较笼统模糊。 今天使用shell脚本进行了简单的改进。 我们来看看基本的效果情况。有了这些信息,元数据的管理总算是迈上了一个台阶。如果哪个磁盘空间又问题会单独显示出来一些信息。

要得到这样的结果,首先我们需要定义一个服务器列表,这个列表中会有一些服务器的基本信息,比如IP地址,服务器的业务归属,SN号,ILO IP等。剩下的信息就要靠自己来发掘了。 完整的脚本内容如下:

. ~/.bash_profile > /dev/null
BASEDIR="/home/hardcheck/tmp"
mkdir -p ${BASEDIR}/{tmplog,log} && cd ${BASEDIR}
DATE=`date +%Y%m%d%H%M`
LOG="hardcheck_${DATE}.log"
TMP_SCRIPT="newoscheck_${DATE}.sh"
 
exec 3>&1 4>&2 1>$LOG 2>&1
### 将服务器列表作为参数传递进来
SERVERLIST=$1
if [ -z "${SERVERLIST}" ] || [ ! -s "${SERVERLIST}" ] ; then
#cat /home/raidcheck/alldbserver-linux.txt|iconv -f GBK -t UTF8|grep  yangjr |grep -v Solaris|grep -v nopingdb|grep -v "#1">  db_list.all.lst
#SERVERLIST=$BASEDIR/db_list.all.lst
echo 'There is no conf files provided'
fi

SSH="ssh -oConnectionAttempts=3 -oConnectTimeout=5 -oStrictHostKeyChecking=no"
SCP="scp -oConnectionAttempts=3 -oConnectTimeout=5 -oStrictHostKeyChecking=no"

echo "#start hardcheck"
### {{{ 以下为真正的hardcheck检查,远程调用
while read line
do
  tmp_host=`echo $line|egrep -iv '^$|^#|Solaris|nopingdb'`
  IP=`echo $tmp_host|awk '{print $4}'|sed 's/;//g'`      
  SN=`echo $tmp_host|awk '{print $1}'`      
  OWNER=`echo $tmp_host|awk '{print $2}'`   
  DB_INFO=`echo $tmp_host|awk '{print $11}'`
  DB_TYPE=`echo $tmp_host|awk '{print $8}'` 
  ILO_INFO=`echo $tmp_host|awk '{print $5}'|sed 's/;//g'`
  add_info=`cat /home/hardcheck/tmp/check_os.sh |$SSH $IP`
  echo "$IP;$SN;$OWNER;$DB_INFO;$DB_TYPE;$ILO_INFO;$add_info" >> $TMP_SCRIPT
  #echo "$IP;$SN;$OWNER;$DB_INFO;$DB_TYPE;$ILO_INFO;$add_info"
done < ${SERVERLIST}
### }}}

### {{{ 邮件报警
cat $TMP_SCRIPT |tee $LOG|iconv -f GBK -t UTF8  > mail.txt
#### }}}

MAILTO="test@test.com"
/bin/bash $BASEDIR/beautymail.sh   -t  "DBIP;DB用途;负责人;主备库;数据库类型;ILO信息;系统版本;内核版本;数据库实例;ASM实例;剩余内存;剩余swap;内存;磁盘空 间;运行天数" -m ${MAILTO} -s "Disk Error Count Health Daily Check(${DATE})"  ${BASEDIR}/mail.txt

这个脚本会额外调用一个重要的脚本check_os.sh这个是系统层面的检测。最后通过邮件的形式发送到指定的邮箱。 check_os.sh脚本内容如下:

OS_VER=`cat /etc/issue|sed  -e 's/Red Hat Enterprise Linux Server  release/RHEL/g' -e 's/Red Hat Enterprise Linux AS release/RHEL/g' -e 's/  /_/g'|head -1`
OS_KER=`uname -r | awk -F. '{ printf("%d.%d\n",$1,$2); }'`

### MySQL版本
#MYSQL_VER=`mysql --disable-tee -N -e "select version()" < /dev/null`
MYSQL_EXISTS=`ps -ef|grep mysql|grep mysqld|grep -v grep |head -1`

### Oracle 版本
#export ORACLE_HOME=`cat /etc/oratab | tail -1 | awk -F: '{print $2}'`
#ORA_VER=`$ORACLE_HOME/bin/sqlplus -v`
ORA_LIST=`ps -ef|grep smon|grep -v grep|grep -v ASM|awk '{print $8}'|awk -F_ '{print $3}'`

### USE ASM
ASM_LIST=`ps -ef|grep smon|grep ASM|awk '{print $8}'|awk -F_ '{print $3}'`

### 内存剩余率
MEMORY_FREE=`/usr/bin/free|grep 'Mem:'|/bin/awk '{print $4/$2*100}'`
MEMORY_FREE=`echo "${MEMORY_FREE:0:5}%"`

### SWAP剩余率
SWAP_FREE=`/usr/bin/free|grep 'Swap:'|/bin/awk '{print $4/$2*100}'`
SWAP_FREE=`echo "${SWAP_FREE:0:5}%"`

### 磁盘空间使用率
df -hT|egrep -v 'Filesystem|/dev/shm'|while read line; do echo -e "`echo  $line|awk '{print $7}'`:`echo $line|awk '{print $5}'`:`echo $line|awk  '{print $6}'`"; done > /tmp/tmpdisk
cat /tmp/tmpdisk|while read line
do
  if [ `echo $line|awk -F':' '{print $3}'|sed 's/%//g'` -lt 80 ] ; then
    tmpline=`echo $line|sed 's/\///g'`
    sed -i "/$tmpline/d" /tmp/tmpdisk
  fi
done
if [ -s /tmp/tmpdisk ] ; then
  DISK_STAT=`cat /tmp/tmpdisk|sed -e ":a;N;s/\n/,/;ta"`
else
  DISK_STAT='OK'
fi
#rm -f /tmp/tmpdisk

### DB内存设置%
MEMORY_TOTAL=`/usr/bin/free|grep 'Mem:'|/bin/awk '{printf("%.f\n",$2*1000/1024/1024/1024)}'`
#MEMORY_MYSQL=`mysqladmin var|grep innodb_buffer_pool_size|awk -F'|' '{print $3}'|sed 's/ //g'`
#MYSQL_PERC=`mysql --disable-tee -N -e "select (${MEMORY_MYSQL}/${MEMORY_TOTAL}*100)"`
#MYSQL_PERC=`echo "${MYSQL_PERC:0:5}%"`

### DB服务时长
#if [ `/usr/bin/mysqladmin extended-status|grep -w Uptime|awk '{print $4}'` -lt 86400 ] ; then
#  UPTIME=`/usr/bin/mysql --disable-tee -e '\s'|grep Uptime|awk -F':'  '{print $2}'|sed -e 's/\t//g'|sed -e 's/\t//g;s/\([0-9][0-9]*\) /\1/g;s/  /_/g'`
#else
#  UPTIME='OK'
#fi
UPTIME=`uptime |awk '{print $3}'`
echo  $OS_VER";" $OS_KER";" $ORA_LIST";" $ASM_LIST";" $MEMORY_FREE";" $SWAP_FREE";" $MEMORY_TOTAL";" $DISK_STAT ";"  $UPTIME

相关链接:

运维平台的建设思考-元数据管理(一)

运维平台的建设思考-元数据管理(二)

运维平台的建设思考-元数据管理(三)

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2016-02-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏沃趣科技

MySQL InnoDB Update和Crash Recovery流程

1、首先介绍了Redo,Undo,Log Sequence Number (LSN),Checkpoint,Rollback Pointer (ROLL_PTR...

5777
来自专栏小狼的世界

Linux下数据备份的一般方法

一个应用中有很多的重要数据,为了在数据灾难发生后我们能够及时、迅速、准确的恢复我们的应用到一个比较合适的位置,我们必须定期的对我们的数据资料进行备份,今天所要讨...

1641
来自专栏小白鼠

分布式事务数据库事务CAP定理BASE理论分布式事务案例

断电了,该怎么处理?通过日志的方式!在执行事务的时候数据库首先会记录下这个事务的redo操作日志,然后才开始真正操作数据库,在操作之前首先会把日志文件写入磁盘,...

1332
来自专栏杨建荣的学习笔记

曲折的10g,11g中EM的安装配置过程(r4笔记第98天)

今天在本地搭了一套oracle环境,首先安装数据库的时候顺带了EM,结果安装好之后想修改监听器的端口,把原本15521的端口换成别的,结果在目录中修改了几个参数...

2873
来自专栏信安之路

RedTeam 技巧集合

1、利用目标用户使用的 user agent 来隐藏自身的恶意流量,比如像 Outlook 软件的 UA。

1542
来自专栏FreeBuf

解码Gh0st RAT变种中的网络数据

在今年3月份的一次取证调查中,我们找回了一些文件。经过我们初步的判定,这些文件极有可能与一个知名组织Iron Tiger有关。

1433
来自专栏信安之路

轻松理解 Kerbreos 的认证过程

前几天在给人解释 Windows 是如何通过 Kerberos 进行 Authentication 的时候,讲了半天也别把那位老兄讲明白,还差点把自己给绕进去。

1710
来自专栏.NET技术

.net core实践系列之短信服务-Sikiro.SMS.Job服务的实现

本篇会继续讲解Sikiro.SMS.Job服务的实现,在我写第一篇的时候,我就发现我当时设计的架构里Sikiro.SMS.Job这个可以选择不需要,而使用MQ代...

1072
来自专栏FreeBuf

干货 | 如何用Solr搭建大数据查询平台

? 0x00 开头照例扯淡 自从各种脱裤门事件开始层出不穷,在下就学乖了,各个地方的密码全都改成不一样的,重要帐号的密码定期更换,生怕被人社出祖宗十八代的我,...

9737
来自专栏散尽浮华

centos7.4下Jira6环境部署及破解操作记录(完整版)

废话不多说,以下记录了Centos7针对Jira6的安装,汉化,破解的操作过程,作为运维笔记留存.

6174

扫码关注云+社区

领取腾讯云代金券