免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1873 | 回复: 1
打印 上一主题 下一主题

gawk统计BO用户操作 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-14 20:04 |只看该作者 |倒序浏览
gawk统计BO用户操作














想要统计每天BO有多少用户在线?每个小时用户在线数多少?通过BO的审计功能可以实现,但是审计会降低性能。如果前端有Apache的做负载均衡只要开启了日志,我们便可以轻松的通过awk来分析日志,得到我们想要的数据。下面的代码中完成了我的3个需求:

1. 统计每天系统用户上线数多少

2.统计每个小时用户在线数多少

3.统计报表保存动作平均开销是多少?

通过gawk轻松搞定。

1. Apache 日志格式

日志格式用的是common,类似如下格式:

10.1.1.1 - - [09/Dec/2011:07:11:26 -1200] "GET /OpenDocument/opendoc/openDocument.jsp?iDocID=144758&boRefresh=Y HTTP/1.1" 200 3382





2. GAWK程序

通过IP地址和时间就能搞定前连个需求,通过jsp的页面判断用户进行了什么操作这样3个需求都能满足,代码如下:




view plaincopy to clipboard
  1. 01.#! /usr/bin/gawk -f  
  2. 02.#$1 is ip  
  3. 03.#$4 is date   
  4. 04.#year:  substr($4,9,4)  
  5. 05.#month: Mons[substr($4,5,3)]  
  6. 06.#day:   substr($4,2,2)  
  7. 07.#time   ltime = substr($4,14,8);  gsub(/:/," ",ltime)  
  8. 08.#request url $7  
  9. 09.function getTime(date){  
  10. 10.    year = substr(date,9,4)  
  11. 11.    month = Mons[substr(date,5,3)]  
  12. 12.    day = substr(date,2,2)  
  13. 13.    ltime = substr(date,14,8)  
  14. 14.    gsub(/:/," ",ltime)  
  15. 15.    return mktime(year " " month " " day " " ltime)  
  16. 16.    }  
  17. 17.BEGIN{  
  18. 18.    Mons["Jan"] = 1; Mons["Feb"] = 2; Mons["Mar"] = 3;  
  19. 19.    Mons["Apr"] = 4; Mons["May"] = 5; Mons["Jun"] = 6;  
  20. 20.    Mons["Jul"] = 7; Mons["Aug"] = 8; Mons["Sep"] = 9;  
  21. 21.    Mons["Oct"] = 10; Mons["Nov"] = 11; Mons["Dec"] = 12  
  22. 22.}  
  23. 23.{  
  24. 24.    currIp = $1  
  25. 25.    currDate = getTime($4)  
  26. 26.    hour = substr($4,14,2)   
  27. 27.      
  28. 28.    #get how many user on line per hour  
  29. 29.    user[hour,currIp]  
  30. 30.    #get how many user on line today   
  31. 31.    ip[currIp]   
  32. 32.  
  33. 33.    #get avg report saved time  
  34. 34.    if ($7 ~ /\cdz_adv\/checkProcessSave.jsp/){  
  35. 35.        startTime = currDate  
  36. 36.    }  
  37. 37.    if ($7 ~ /reportSaveAlert.html\?/){  
  38. 38.        totalTime += currDate - startTime   
  39. 39.        times += 1  
  40. 40.    }  
  41. 41.}  
  42. 42.END{  
  43. 43.    print length(ip) " users on line today."  
  44. 44.    #print user per hour  
  45. 45.    for (i in user){  
  46. 46.        split(i,lists,SUBSEP)  
  47. 47.        count[lists[1]] += 1  
  48. 48.    }  
  49. 49.    for (i in count)  
  50. 50.        print i,":",count[i]," users"  
  51. 51.    #print ave report saved time  
  52. 52.    if (times > 0)  
  53. 53.        print totalTime / times "s avg report saved time."  
  54. 54.    else  
  55. 55.        print "0 report is saved."   
  56. 56.}  
复制代码
用了原始数据之后便可以自己做个dashborad分析,做顾问不简单啊,啥都得懂。

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
2 [报告]
发表于 2011-12-18 10:32 |只看该作者
good
awk的典型应用之一
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP