Linux服务器系统自动巡检脚本生成html报告

本文主要是介绍Linux服务器系统自动巡检脚本生成html报告,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、 前言

1、在上一篇文章里给大家介绍oracle自动巡检脚本生成html报告,这篇文章介绍linux服务巡检脚本生成html报告。
2、脚本依然是简单脚本语句的堆积,方便大家二次编辑使用。
3、项目已经上传到我的github上
项目地址:oswatch.git

二、注意事项与报告部分截图

一定注意阅读git上的README.md说明,避免部分信息无法正常显示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、README.md

1、使用root用户执行
2、使用说明
1)、脚本中 ifconfig、mpstat、iostat命令有依赖,需要安装相关依赖包

yum -y install bc sysstat net-tools

2)、执行完巡检之后,将在脚本所在的路径下生成html巡检结果报告,如下
192.168.31.102os_linux_summary.html
3)、巡检项信息如下(其他统计项可根据实际需要自行添加)

1)、系统基本信息

2)、cpu信息

3)、ip网络信息

4)、cpu使用率

5)、连接数信息

6)、系统限制信息

7)、内存使用信息

8)、磁盘使用信息

9)、网络流量情况/系统资源变化

10)、cpu消耗情况前10排行

11)、cpu消耗按内存情况前10排行

12)、磁盘io情况

13)、系统定时任务列表

14)、系统定时任务脚本内容

四、脚本内容

#!/bin/bash
ipaddress=`ip a|grep "global"|awk '{print $2}' |awk -F/ '{print $1}'`
file_output=${ipaddress}'os_linux_summary.html'
td_str=''
th_str=''
#yum -y install bc sysstat net-tools
create_html_css(){echo -e "<html>
<head>
<style type="text/css">body        {font:12px Courier New,Helvetica,sansserif; color:black; background:White;}table,tr,td {font:12px Courier New,Helvetica,sansserif; color:Black; background:#FFFFCC; padding:0px 0px 0px 0px; margin:0px 0px 0px 0px;} th          {font:bold 12px Courier New,Helvetica,sansserif; color:White; background:#0033FF; padding:0px 0px 0px 0px;} h1          {font:bold 12pt Courier New,Helvetica,sansserif; color:Black; padding:0px 0px 0px 0px;} 
</style>
</head>
<body>"
}
create_html_head(){
echo -e "<h1>$1</h1>"
}
create_table_head1(){echo -e "<table width="68%" border="1" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">"
}
create_table_head2(){echo -e "<table width="100%" border="1" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">"
}
create_td(){td_str=`echo $1 | awk 'BEGIN{FS="|"}''{i=1; while(i<=NF) {print "<td>"$i"</td>";i++}}'`
}
create_th(){th_str=`echo $1|awk 'BEGIN{FS="|"}''{i=1; while(i<=NF) {print "<th>"$i"</th>";i++}}'`
}
create_tr1(){create_td "$1"echo -e "<tr>$td_str</tr>" >> $file_output
}
create_tr2(){create_th "$1"echo -e "<tr>$th_str</tr>" >> $file_output
}
create_tr3(){echo -e "<tr><td><pre style=\"font-family:Courier New; word-wrap: break-word; white-space: pre-wrap; white-space: -moz-pre-wrap\" >`cat $1`</pre></td></tr>" >> $file_output
}
create_table_end(){echo -e "</table>"
}
create_html_end(){echo -e "</body></html>"
}
NAME_VAL_LEN=12
name_val () {printf "%+*s | %s\n" "${NAME_VAL_LEN}" "$1" "$2"
}
get_physics(){name_val "巡检时间" "`date`"name_val "主机名" "`uname -n`"name_val "系统版本" "`cat /etc/{oracle,redhat,SuSE,centos}-release 2>/dev/null|sort -ru|head -n1`"name_val "内核版本" "`uname -r`"name_val "架构" "CPU=`lscpu|grep Architecture|awk -F: '{print $2}'|sed 's/^[[:space:]]*//g'`;OS=`getconf LONG_BIT`-bit"
}
get_cpuinfo () {file="/proc/cpuinfo"virtual=`grep -c ^processor "${file}"`physical=`grep 'physical id' "${file}" | sort -u | wc -l`cores=`grep 'cpu cores' "${file}" | head -n 1 | cut -d: -f2`model=`grep "model name" "${file}"|sort -u|awk -F: '{print $2}'`speed=`grep -i "cpu MHz" "${file}"|sort -u|awk -F: '{print $2}'`cache=`grep -i "cache size" "${file}"|sort -u|awk -F: '{print $2}'`SysCPUIdle=`vmstat | sed -n '$ p' | awk '{print $15}'`[ "${physical}" = "0" ] && physical="${virtual}"[ -z "${cores}" ] && cores=0cores=$((${cores} * ${physical}));htt=""if [ ${cores} -gt 0 -a $cores -lt $virtual ]; then htt=yes; else htt=no; finame_val "线程" "physical = ${physical}, cores = ${cores}, virtual = ${virtual}, hyperthreading = ${htt}"name_val "cpu型号" "${physical}*${model}"name_val "速度" "${virtual}*${speed}"name_val "缓存" "${virtual}*${cache}"name_val "CPU空闲率(%)" "${SysCPUIdle}%"
}
get_netinfo(){echo "interface | status | ipadds     |      mtu    |  Speed     |     Duplex" >>/tmp/tmpnet_h1_`date +%y%m%d`.txtfor ipstr in `ifconfig -a|grep ": flags"|awk  '{print $1}'|sed 's/.$//'`doipadds=`ifconfig ${ipstr}|grep -w inet|awk '{print $2}'`mtu=`ifconfig ${ipstr}|grep mtu|awk '{print $NF}'`speed=`ethtool ${ipstr}|grep Speed|awk -F: '{print $2}'`duplex=`ethtool ${ipstr}|grep Duplex|awk -F: '{print $2}'`echo "${ipstr}"  "up" "${ipadds}" "${mtu}" "${speed}" "${duplex}"\|awk '{print $1,"|", $2,"|", $3,"|", $4,"|", $5,"|", $6}'  >>/tmp/tmpnet1_`date +%y%m%d`.txtdone
}
get_cpuuse(){echo "#######################################  cpu使用率  #######################################" >>/tmp/tmp_cpuuse_`date +%y%m%d`.txtmpstat -P ALL 10 6 >>/tmp/tmp_cpuuse_`date +%y%m%d`.txt
}
get_connections (){filemax=`cat /proc/sys/fs/file-max`name_val "Number of concurrent connections" "${filemax}"
}
get_ulimitinfo(){echo "#######################################  系统限制最大进程数  #######################################" >>/tmp/tmp_ulimitinfo_`date +%y%m%d`.txtulimit -a >>/tmp/tmp_ulimitinfo_`date +%y%m%d`.txt
}
get_meminfo(){echo "Locator   |Size     |Speed       |Form Factor  | Type      |    Type Detail" >>/tmp/tmpmem3_h1_`date +%y%m%d`.txtdmidecode| grep -v "Memory Device Mapped Address"|grep -A12 -w "Memory Device" \|egrep "Locator:|Size:|Speed:|Form Factor:|Type:|Type Detail:" \|awk -F: '/Size|Type|Form.Factor|Type.Detail|^[\t ]+Locator/{printf("|%s", $2)}/^[\t ]+Speed/{print "|" $2}' \|grep -v "No Module Installed" \|awk -F"|" '{print $4,"|", $2,"|", $7,"|", $3,"|", $5,"|", $6}' >>/tmp/tmpmem3_t1_`date +%y%m%d`.txtfree -glht >>/tmp/tmpmem2_`date +%y%m%d`.txtmemtotal=`vmstat -s | head -1 | awk '{print $1}'`avm=`vmstat -s| sed -n '3p' | awk '{print $1}'`name_val "Mem_used_rate(%)" "`echo "100*${avm}/${memtotal}" | bc`%" >>/tmp/tmpmem1_`date +%y%m%d`.txt}
get_diskinfo(){echo "Filesystem        |Type   |Size |  Used  | Avail | Use%  | Mounted on | Opts" >>/tmp/tmpdisk_h1_`date +%y%m%d`.txtdf -ThP|grep -v tmpfs|sed '1d'|sort >/tmp/tmpdf1_`date +%y%m%d`.txtmount -l|awk '{print $1,$6}'|grep ^/|sort >/tmp/tmpdf2_`date +%y%m%d`.txtjoin /tmp/tmpdf1_`date +%y%m%d`.txt /tmp/tmpdf2_`date +%y%m%d`.txt\|awk '{print $1,"|", $2,"|", $3,"|", $4,"|", $5,"|", $6,"|", $7,"|", $8}' >>/tmp/tmpdisk_t1_`date +%y%m%d`.txt lsblk >>/tmp/tmpdisk1_`date +%y%m%d`.txt for disk in `ls -l /sys/block|awk '{print $9}'|sed '/^$/d'|grep -v fd`doecho "${disk}" `cat /sys/block/${disk}/queue/scheduler`  >>/tmp/tmpdisk2_`date +%y%m%d`.txt donepvs >>/tmp/tmpdisk3_`date +%y%m%d`.txtecho "======================  =====  =====  =====  =====  =====  ==========  =======" >>/tmp/tmpdisk3_`date +%y%m%d`.txtvgs >>/tmp/tmpdisk3_`date +%y%m%d`.txtecho "======================  =====  =====  =====  =====  =====  ==========  =======" >>/tmp/tmpdisk3_`date +%y%m%d`.txtlvs >>/tmp/tmpdisk3_`date +%y%m%d`.txt
}
get_topproc(){#os loadecho "#######################################  网络流量情况  #######################################" >>/tmp/tmpload_`date +%y%m%d`.txtsar -n DEV 10 6 >>/tmp/tmpload_`date +%y%m%d`.txtecho "#######################################  系统资源变化  #######################################" >>/tmp/tmpload_`date +%y%m%d`.txtvmstat -S M 10 6  >>/tmp/tmpload_`date +%y%m%d`.txt#top cpumpstat 1 5 >>/tmp/tmptopcpu_`date +%y%m%d`.txtecho "#######################################  消耗CPU前十排行  #######################################" >>/tmp/tmptopcpu_`date +%y%m%d`.txtps aux|head -1 >>/tmp/tmptopcpu_`date +%y%m%d`.txtps aux|grep -v PID|sort -rn -k +3|head  >>/tmp/tmptopcpu_`date +%y%m%d`.txt#top memecho "#######################################  消耗内存前十排行  #######################################" >>/tmp/tmptopmem_`date +%y%m%d`.txtps aux|head -1 >>/tmp/tmptopmem_`date +%y%m%d`.txtps aux|grep -v PID|sort -rn -k +4|head  >>/tmp/tmptopmem_`date +%y%m%d`.txtecho "TOP10 CPU Resource Process" >>/tmp/tmptopmem_`date +%y%m%d`.txttop -bn1 -o "%CPU"|sed  -n '1,17p' #top i/oecho "#######################################  磁盘io情况  #######################################" >>/tmp/tmptopio_`date +%y%m%d`.txtiostat -k -d 10 5  >>/tmp/tmptopio_`date +%y%m%d`.txt
}
get_crontablist(){crontab -l >>/tmp/tmp_crontab_`date +%y%m%d`.txtif [ -s /tmp/tmp_crontab_`date +%y%m%d`.txt ] ; then echo 'ths file is not empyt and file info'elseecho '#### 无定时任务 ####' >>/tmp/tmp_crontab_`date +%y%m%d`.txtfi
}
get_crontab_content(){crontab_content_log=/tmp/tmp_crontab_content_`date +%y%m%d`.txtcrontab -l|awk -F ' ' '{ print $NF}' >>$crontab_content_logcontrab_num=`crontab -l|awk -F ' ' '{ print $NF}'|wc -l`if [ $contrab_num -ne 0 ];thencount=1while [ $count -le $contrab_num ]doecho "#######################################  获取系统定时任务脚本 $count 内容开始  #######################################" >>/tmp/tmp_crontab_shellcontent_`date +%y%m%d`.txtcat `sed -n -e "${count}p" $crontab_content_log` >>/tmp/tmp_crontab_shellcontent_`date +%y%m%d`.txtecho -e "\n#######################################  获取系统定时任务脚本 $count 内容结束  #######################################\n" >>/tmp/tmp_crontab_shellcontent_`date +%y%m%d`.txtcount=$[${count}+1]doneelseecho '#### 无定时执行脚本 ####' >>/tmp/tmp_crontab_shellcontent_`date +%y%m%d`.txtfi
}
create_html(){rm -rf $file_outputtouch $file_outputcreate_html_css >> $file_outputcreate_html_head "系统基本信息" >> $file_outputcreate_table_head1 >> $file_outputget_physics >>/tmp/tmpos_summ_`date +%y%m%d`.txtwhile read linedocreate_tr1 "$line" done < /tmp/tmpos_summ_`date +%y%m%d`.txtcreate_table_end >> $file_outputcreate_html_head "cpu信息" >> $file_outputcreate_table_head1 >> $file_outputget_cpuinfo >>/tmp/tmp_cpuinfo_`date +%y%m%d`.txtwhile read linedocreate_tr1 "$line" done < /tmp/tmp_cpuinfo_`date +%y%m%d`.txt  create_table_end >> $file_outputcreate_html_head "ip网络信息" >> $file_outputcreate_table_head1 >> $file_outputget_netinfowhile read linedocreate_tr2 "$line" done < /tmp/tmpnet_h1_`date +%y%m%d`.txtwhile read linedocreate_tr1 "$line" done < /tmp/tmpnet1_`date +%y%m%d`.txtcreate_table_end >> $file_outputcreate_html_head "cpu使用率" >> $file_outputcreate_table_head1 >> $file_outputget_cpuusecreate_tr3 "/tmp/tmp_cpuuse_`date +%y%m%d`.txt"create_table_end >> $file_outputcreate_html_head "连接数信息" >> $file_outputcreate_table_head1 >> $file_outputget_connections >>/tmp/tmp_connections_`date +%y%m%d`.txtwhile read linedocreate_tr1 "$line" done < /tmp/tmp_connections_`date +%y%m%d`.txt  create_table_end >> $file_outputcreate_html_head "系统限制信息" >> $file_outputcreate_table_head1 >> $file_outputget_ulimitinfocreate_tr3 "/tmp/tmp_ulimitinfo_`date +%y%m%d`.txt"create_table_end >> $file_output  create_html_head "内存使用信息" >> $file_outputcreate_table_head1 >> $file_outputget_meminfowhile read linedocreate_tr1 "$line" done < /tmp/tmpmem1_`date +%y%m%d`.txtcreate_table_end >> $file_outputcreate_table_head1 >> $file_outputcreate_tr3 "/tmp/tmpmem2_`date +%y%m%d`.txt"create_table_end >> $file_outputcreate_table_head1 >> $file_outputwhile read linedocreate_tr2 "$line" done < /tmp/tmpmem3_h1_`date +%y%m%d`.txtwhile read linedocreate_tr1 "$line" done < /tmp/tmpmem3_t1_`date +%y%m%d`.txtcreate_table_end >> $file_outputcreate_html_head "磁盘使用信息" >> $file_outputcreate_table_head1 >> $file_outputget_diskinfowhile read linedocreate_tr2 "$line" done < /tmp/tmpdisk_h1_`date +%y%m%d`.txtwhile read linedocreate_tr1 "$line" done < /tmp/tmpdisk_t1_`date +%y%m%d`.txtcreate_table_end >> $file_outputcreate_table_head1 >> $file_outputcreate_tr3 "/tmp/tmpdisk1_`date +%y%m%d`.txt"create_table_end >> $file_outputcreate_table_head1 >> $file_outputcreate_tr3 "/tmp/tmpdisk2_`date +%y%m%d`.txt"create_table_end >> $file_outputcreate_table_head1 >> $file_outputcreate_tr3 "/tmp/tmpdisk3_`date +%y%m%d`.txt"create_table_end >> $file_outputcreate_html_head "网络流量情况" >> $file_outputcreate_table_head1 >> $file_outputget_topproccreate_tr3 "/tmp/tmpload_`date +%y%m%d`.txt"create_table_end >> $file_outputcreate_html_head "消耗CPU前十排行" >> $file_outputcreate_table_head1 >> $file_outputcreate_tr3 "/tmp/tmptopcpu_`date +%y%m%d`.txt"create_table_end >> $file_outputcreate_html_head "消耗内存前十排行" >> $file_outputcreate_table_head1 >> $file_outputcreate_tr3 "/tmp/tmptopmem_`date +%y%m%d`.txt"create_table_end >> $file_outputcreate_html_head "磁盘io情况" >> $file_outputcreate_table_head1 >> $file_outputcreate_tr3 "/tmp/tmptopio_`date +%y%m%d`.txt"create_table_end >> $file_outputcreate_html_head "定时任务信息" >> $file_outputcreate_table_head1 >> $file_outputget_crontablistcreate_tr3 "/tmp/tmp_crontab_`date +%y%m%d`.txt"create_table_end >> $file_outputcreate_html_head "定时任务脚本内容" >> $file_outputcreate_table_head1 >> $file_outputget_crontab_contentcreate_tr3 "/tmp/tmp_crontab_shellcontent_`date +%y%m%d`.txt"create_table_end >> $file_outputcreate_html_end >> $file_outputsed -i 's/BORDER=1/width="68%" border="1" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse"/g' $file_outputrm -rf /tmp/tmp*_`date +%y%m%d`.txt
}
# This script must be executed as root
RUID=`id|awk -F\( '{print $1}'|awk -F\= '{print $2}'`
if [ ${RUID} != "0" ];thenecho"This script must be executed as root"exit 1
fi
PLATFORM=`uname`
if [ ${PLATFORM} = "HP-UX" ] ; thenecho "This script does not support HP-UX platform for the time being"
exit 1
elif [ ${PLATFORM} = "SunOS" ] ; thenecho "This script does not support SunOS platform for the time being"
exit 1
elif [ ${PLATFORM} = "AIX" ] ; thenecho "This script does not support AIX platform for the time being"
exit 1
elif [ ${PLATFORM} = "Linux" ] ; thencreate_html
fi

这篇关于Linux服务器系统自动巡检脚本生成html报告的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1058755

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

【 html+css 绚丽Loading 】000046 三才归元阵

前言:哈喽,大家好,今天给大家分享html+css 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 📚一、效果📚二、信息💡1.简介:💡2.外观描述:💡3.使用方式:💡4.战斗方式:💡5.提升:💡6.传说: 📚三、源代码,上代码,可以直接复制使用🎥效果🗂️目录✍️

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip