免费注册 查看新帖 |

Chinaunix

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

*求助* 一个关于日志的分析统计 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-15 01:27 |只看该作者 |倒序浏览
本帖最后由 419015642 于 2012-03-15 03:50 编辑
  1. 报警等级        设备        时间        报警状态        报警方式        联系人
  2. 告警        主机23        06:02:17        load average:32        短信        zhangsan
  3. 告警        主机23        06:02:17        load average:32        邮件        zhangsan
  4. 告警        主机23        06:02:18        load average:32        短信        lisi
  5. 告警        主机23        06:02:18        load average:32        邮件        lisi       
  6. 紧急        web服务器        12:30:28        CPU使用率高        短信        zhangsan
  7. 紧急        web服务器        12:30:30        CPU使用率高        邮件        zhangsan
  8. 紧急        路由器        14:02:53        RTA=96        短信        lisi
  9. 紧急        路由器        14:01:53        RTA=96        邮件        lisi
  10. 紧急        主机23        15:01:33        time out        短信        zhangsan
  11. 紧急        主机23        15:01:34        time out        邮件        zhangsan
  12. 紧急        主机23        15:01:34        time out        短信        lisi
  13. 紧急        主机23        15:01:35        time out        邮件        lisi
  14. 恢复        主机23        15:05:13        time up        短信        zhangsan
  15. 恢复        主机23        15:05:13        time up        邮件        zhangsan
  16. 恢复        主机23        15:05:13        time up        短信        lisi
  17. 恢复        主机23        15:05:13        time up        邮件        lisi
  18. 告警        主机23        15:10:33        load average:28        短信        zhangsan
  19. 告警        主机23        15:10:33        load average:28        邮件        zhangsan
  20. 告警        主机23        15:10:33        load average:28        短信        lisi
  21. 告警        主机23        15:10:33        load average:28        邮件        lisi
  22. 紧急        web服务器        16:20:28        CPU使用率高        短信        zhangsan
  23. 紧急        web服务器        16:20:28        CPU使用率高        邮件        zhangsan
复制代码
需求:统计报警信息
1:将报警等级分离,过滤"恢复"
2:智能识别 “:和=”后面不显示(如:load load average:28为load average)
3:计算报警次数(例:主机23在6点2分的时候load average报警1次+15点10分的时候load average报警1次)

最终显示结果为:
---------------------------------
  1. 报警等级
  2. 紧急       
  3. web服务器        CPU使用率高        2次
  4. 路由器        RTA        1次
  5. 主机23        time out        1次

  6. 告警
  7. 主机23        load average        2次
复制代码

论坛徽章:
0
2 [报告]
发表于 2012-03-15 03:48 |只看该作者
需求2和需求3 我实在弄不出来,求大神来解救

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
3 [报告]
发表于 2012-03-15 08:02 |只看该作者
回复 1# 419015642
  1. awk -F'\t' '$1~/恢复/||NR==1{next}{t=$2 "\t" gensub(/[:=].*$/,"",1,$4)}!a[$1 "\t" $2 "\t" $4]++{b[$1 "\t" t]++;c[$1];d[t]}END{for(i in c){print RS i;for(j in d)if(b[i "\t" j])print j "\t" b[i FS j]}}'
复制代码

论坛徽章:
0
4 [报告]
发表于 2012-03-15 13:53 |只看该作者
  1. $ awk -f awklogfile logfile
  2. 报警等级
  3. 紧急
  4. 主机23  time out        4
  5. 路由器  RTA     2
  6. web服务器       CPU使用率高     4
  7. 告警
  8. 主机23  load average    8

  9. BEGIN{print "报警等级";FS="   *"}                      #我粘贴过去显示的是多个空格,如果楼主分隔符是\t 请自行修改
  10. NR>1{
  11. sub("[:=].*","",$4)                                             #去掉:=之后
  12. if($1~/告警/)
  13. a[$2"\t"$4]++
  14. if($1~/紧急/)
  15. b[$2"\t"$4]++
  16. }
  17. END{
  18. print "紧急"                                         #默认只有紧急 回复 告警3种 如果还有别的需要修改代码
  19. for(i in b)
  20. print i"\t"b[i]
  21. print "告警"
  22. for(i in a)
  23. print i"\t"a[i]
  24. }
复制代码

论坛徽章:
0
5 [报告]
发表于 2012-03-15 15:22 |只看该作者
回复 4# loveacat


    非常感谢,已经非常接近了,
可能是我在问题中没有详细解释清楚
报警次数统计不准确 应该是这样
报警等级
紧急        
web服务器        CPU使用率高        2次
路由器        RTA        1次
主机23        time out        1次

告警
主机23        load average        2次
我觉得可以用时间 1分钟以内的就算作是一次报警来作为统计

论坛徽章:
0
6 [报告]
发表于 2012-03-17 01:20 |只看该作者
419015642 发表于 2012-03-15 15:22
回复 4# loveacat
  1. $ awk -f awklogfile logfile
  2. 报警等级
  3. 紧急
  4. 主机23  time out        1次
  5. 路由器  RTA     2次                                      #你数据中RTA是14:01和14:02 两次按分钟的话我算了两次
  6. web服务器       CPU使用率高     2次
  7. 告警
  8. 主机23  load average    2次

  9. $ cat awklogfile
  10. BEGIN{print "报警等级";FS="   *"}
  11. NR>1{
  12. sub("[:=].*","",$4)
  13. time=substr($3,1,5)
  14. if($1~/告警/ && !t[time]++ )
  15. {
  16.         a[$2"\t"$4]++
  17. }
  18. if($1~/紧急/ && !t[time]++ )
  19. b[$2"\t"$4]++
  20. }
  21. END{
  22. print "紧急"
  23. for(i in b)
  24. print i"\t"b[i]"次"
  25. print "告警"
  26. for(i in a)
  27. print i"\t"a[i]"次"
  28. }

复制代码

论坛徽章:
1
辰龙
日期:2014-05-22 11:38:58
7 [报告]
发表于 2012-03-17 10:33 |只看该作者
本帖最后由 winway1988 于 2012-03-17 10:35 编辑
  1. [winway@winway test]$ awk -f awkscr urfile
  2. 报警等级
  3. 紧急
  4. 路由器 RTA 1次
  5. web服务器 CPU使用率高 2次
  6. 主机23 time out 1次
  7. 告警
  8. 主机23 load average 2次
  9. [winway@winway test]$ cat awkscr
  10. NR == 1 {
  11.         print $1;
  12. }

  13. NR > 1 && $1 !~ "恢复" {
  14.         a[$1];

  15.         gsub(/:/, " ", $3);
  16.         time = mktime("2012 1 1 " $3); # to fit the mktime(), I choose the date "2012 1 1", nothing important

  17.         sub(/=[0-9]*$/, "", $4);

  18.         if (NF == 6)
  19.                 $5 = "";
  20.         else if (NF == 7)
  21.                 sub(/:[0-9]*/, "", $5);

  22.         for (i in b) {
  23.                 if (i ~ $1 OFS $2 OFS $4 OFS $5) {
  24.                         # to compute absolute value
  25.                         abs_value = (time - b[i]) - (b[i] - time);
  26.                         abs_value = abs_value > 0 ? abs_value / 2 : (0 - abs_value) / 2;

  27.                         if (abs_value <= 60) {
  28.                                 # event occur in one minute, do not add to array
  29.                                 next;
  30.                         }
  31.                 }
  32.         }

  33.         b[$1 OFS $2 OFS $4 OFS $5 ":" time] = time;
  34. }

  35. END {
  36.         for (i in b) {
  37.                 sub(/[ \t]*:[0-9]*/, "", i); # delete time str
  38.                 c[i]++;
  39.         }

  40.         for (j in a) {
  41.                 print j;
  42.                 for (k in c) {
  43.                         if (k ~ j) {
  44.                                 temp = k;
  45.                                 sub(/^[^ ]* /, "", temp);
  46.                                 print temp, c[k] "次";
  47.                         }
  48.                 }
  49.         }
  50. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP