您的位置:首页 > 运维架构 > Shell

shell+awk web报表

2012-12-05 14:45 267 查看
说明:蓝色=命令名称

浅绿=命令参数
浅蓝=选项
紫色=目录
系统环境:CentOS 5.8 x86_64
朋友让帮谢了一个生成报表的shell,感觉很有意思发出来大家讨论讨论。
总共三个文件如下图:




iplist

#group1
192.168.1.1
192.168.1.2
#group2
192.168.1.3
192.168.1.4

myreport.sh

#!/bin/bash
vmstat 1 2|awk '{cpuidel=$(NF-2);iowait=$(NF-1)}END{printf("cpuidel=%s iowait=%s",cpuidel,iowait)}'
awk '{printf " loadavg="$1}' /proc/loadavg
awk -F"[ :]+" 'NR==5{printf " swap="$2/1024}' /proc/meminfo
netstat -an|awk '/^tcp/{a[$6]++}END{printf " max_conn="a["ESTABLISHED"]}'
printf "\n"

report.sh

#!/bin/bash

export PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/usr/local/php/bin:/root/bin:/home/tangweizhong/shell/bin
DATE=`date +%F`
MONTH=`date +%m`
YEAR=`date +%Y`
rm -f system-report-$DATE.html
for ip in `awk 'BEGIN{RS="#";FS="\n"}NR>1{i=1;while(++i<NF)print $1"="$i}' iplist`
do
printf "%s " ${ip%=*}
printf "%s " ${ip#*=}
sh myreport.sh
done |awk '
BEGIN{
warn["max_conn"]=2
warn["swap"]=5
FS="[ =]"
}
{
a[$1,NR,"ip"]=$2
b[$1,"1"]="ip"
c[$1]
for(i=3;i<NF;i++){
j=i
b[$1,i]=$i
a[$1,NR,$j]=$(++i)
}
}
END{
step=1
print "<html>"
print "<body>"
for(group in c){
print "<h1>"group" SYSTEM REPORT</h1>"
step+=(NR/length(c))
print "<table>"
for(i=1;i<NF;ii=i+2){
print "<tr>"
print "<td Bgcolor=#FFCC33 align=right >"b[group,i]"</td>"
for(j=step-NR/length(c);j<step;j++){
if(warn[b[group,i]]>0&&a[group,j,b[group,i]]>warn[b[group,i]]){
print "<td Bgcolor=red align=right>"a[group,j,b[group,i]]"</td>"
}else{
print "<td Bgcolor=#CCFFFF align=right>"a[group,j,b[group,i]]"</td>"
}
}
print "</tr>"
}
print "</table>"
}
print "</body>"
print "</html>"
}' >> system-report-$DATE.html

效果如图:





结束语:脚本是我随便写的,这里只是感觉这个思路不错,以前都是用python,没有想过shell也可以做到。根据这个思路可以自己定义各种表表,效果更加直观,比光看数据好多了。

补充:

awk '/CPU.*idle/{
while(1){
getline;
if($NF){
idle=$6>idle?$NF:idle;
iowait=$5>iowait?$5:iowait
}else
break
}
}/run/{
while(1){
getline;
if($0!=""&&NR!=a){
loadavg=$NF>loadavg?$NF:loadavg
}else{
break
}
;a=NR
}
}/IFACE.*rxmcst/{
while(1){
getline;
if($0!=""){
rxbyt=$5>rxbyt?$5:rxbyt;
txbyt=$6>txbyt?$6:txbyt}else break
}
}/kbmemfree/{
while(1){
getline;if($0!=""){
swap=$9>swap?$9:swap
}else
break
}
}END{
printf("idle=%s iowait=%s loadavg=%s rxbyt=%s txbyt=%s swap=%s\n",idle,iowait,loadavg,rxbyt,txbyt,swap)
}' 报表文件

本脚本用来分析sar 报表,可配合上面脚本数据源。

效果图:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell web报表