shell+awk web报表
2012-12-05 14:45
267 查看
说明:蓝色=命令名称
浅绿=命令参数
浅蓝=选项
紫色=目录
系统环境:CentOS 5.8 x86_64
朋友让帮谢了一个生成报表的shell,感觉很有意思发出来大家讨论讨论。
总共三个文件如下图:
iplist
myreport.sh
report.sh
效果如图:
结束语:脚本是我随便写的,这里只是感觉这个思路不错,以前都是用python,没有想过shell也可以做到。根据这个思路可以自己定义各种表表,效果更加直观,比光看数据好多了。
补充:
本脚本用来分析sar 报表,可配合上面脚本数据源。
效果图:
浅绿=命令参数
浅蓝=选项
紫色=目录
系统环境: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 报表,可配合上面脚本数据源。
效果图:
相关文章推荐
- Linux Shell常用技巧
- Shell编程的一些知识集合
- linux Shell学习笔记第五天
- Perl 获取shell命令的执行结果
- shell 中数学计算总结
- shell编程基础 单引号和双引号的区别
- Do All in Cmd Shell一切在命令行下完成第1/6页
- shell 基本计算、逻辑运算、位运算详解
- win2003 WScript.shell与Shell组件安全篇
- 关于Shell脚本效率优化的一些个人想法
- 使用shc工具加密shell脚本详解
- linux Shell学习笔记第四天
- linux Shell学习笔记第三天
- 一个不错的shell 脚本教程 入门级
- linux Shell学习笔记第一天
- linux Shell学习笔记第二天
- hbase shell基础和常用命令详解
- 将PHP作为Shell脚本语言使用
- emacs中执行shell命令的两种方式在参数上的差异 3ff8
- [转]Using Named Pipes (FIFOs) with Bash