免费注册 查看新帖 |

Chinaunix

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

[文本处理] 求助:关于日志处理的shell脚本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-12-29 22:06 |只看该作者 |倒序浏览
有一个日志文件是这样的,
INFO  - 2015-12-29 14:36:16.932; [   core1] org.apache.solr.core.SolrCore; [core1] webapp=/solr path=/admin/ping params={action=status&_=1451370976913&wt=json} status=503 QTime=0

INFO  - 2015-12-29 14:36:20.974; [   core1] org.apache.solr.core.SolrCore; [core1] webapp=/solr path=/select params={indent=true&q=*:*&_=1451370980964&wt=json} hits=44 status=0 QTime=3

上面是日志文本的其中2行,现在需要写一个shell,比如说在2015-12-20号零点开始自动提取日期为2015-12-19的日志数据,并且只要path=/select这样的日志数据,然后对这些数据的QTime求平均值,最后可以自动把平均值发到某邮箱,大家有思路的话可以共同探讨下,给出某部分功能的实现代码也行,小弟感激不尽,愿大家一起探讨,共同学习!!

论坛徽章:
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 [报告]
发表于 2015-12-30 09:54 |只看该作者
/var/tmp/test.sh
  1. # 比如说在2015-12-20号零点开始自动提取日期为2015-12-19的日志数据
  2. TARGET_DATE=$(date -d "last day" "+%Y-%m-%d")
  3. # 并且只要path=/select这样的日志数据,然后对这些数据的QTime求平均值
  4. AVG=$(grep "$TARGET_DATE .* path=/select" 1.log | awk '/QTime=/{gsub(/.*=/,"");sum+=$0}END{print sum/NR}')
  5. # 最后可以自动把平均值发到某邮箱
  6. echo $AVG | mailx -s "QTime平均值" 731281755@ChinaUnix.net
复制代码
# 零点开始自动提取
  1. chmod u+x /var/tmp/test.sh
  2. crontab -e
复制代码
0 0 * * * /var/tmp/test.sh > /var/tmp/test.log 2>&1

评分

参与人数 1信誉积分 +10 收起 理由
Windows19 + 10

查看全部评分

论坛徽章:
0
3 [报告]
发表于 2015-12-30 10:56 |只看该作者
回复 2# Shell_HAT


    '/QTime=/{gsub(/.*=/,"")   这一小段看不懂,可以详细说明一下吗,谢谢

论坛徽章:
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
4 [报告]
发表于 2015-12-30 11:30 |只看该作者
回复 3# 731281755


    对于包含字符串 QTime= 的行,把等号和等号左边的字符串全部删除。

论坛徽章:
0
5 [报告]
发表于 2015-12-30 14:47 |只看该作者
回复 4# Shell_HAT


    我按照你的方法试了,有打印出正确的结果,可是结果并没有传值到AVG这个变量,不知道为啥?  

论坛徽章:
24
申猴
日期:2014-10-10 15:56:39射手座
日期:2014-10-10 15:57:18黑曼巴
日期:2018-05-14 11:05:122016科比退役纪念章
日期:2018-05-14 11:05:0715-16赛季CBA联赛之北控
日期:2018-05-14 11:05:0015-16赛季CBA联赛之江苏
日期:2017-02-27 18:11:0715-16赛季CBA联赛之上海
日期:2018-08-15 09:48:5415-16赛季CBA联赛之佛山
日期:2018-07-20 17:14:2315-16赛季CBA联赛之佛山
日期:2019-09-10 18:08:4615-16赛季CBA联赛之山西
日期:2020-03-26 09:40:5115-16赛季CBA联赛之佛山
日期:2020-05-08 09:03:54
6 [报告]
发表于 2015-12-30 17:02 |只看该作者
死循环,crontab都可以实现
计划任务:
做计划任务,每天00:00执行脚本
脚本
a=`date "+%Y-%m-%d" --date="a days ago"`;awk -F "=" -vb=$a '/b/{c++;d=d+$NF}END{print d/c}' logfile

论坛徽章:
0
7 [报告]
发表于 2015-12-30 17:46 |只看该作者
回复 6# chengchow


    顺便问下 日志中含有 q=*:*&_, 要如何提取*:* 出来,这部分固定是夹在q=和&之间的

论坛徽章:
24
申猴
日期:2014-10-10 15:56:39射手座
日期:2014-10-10 15:57:18黑曼巴
日期:2018-05-14 11:05:122016科比退役纪念章
日期:2018-05-14 11:05:0715-16赛季CBA联赛之北控
日期:2018-05-14 11:05:0015-16赛季CBA联赛之江苏
日期:2017-02-27 18:11:0715-16赛季CBA联赛之上海
日期:2018-08-15 09:48:5415-16赛季CBA联赛之佛山
日期:2018-07-20 17:14:2315-16赛季CBA联赛之佛山
日期:2019-09-10 18:08:4615-16赛季CBA联赛之山西
日期:2020-03-26 09:40:5115-16赛季CBA联赛之佛山
日期:2020-05-08 09:03:54
8 [报告]
发表于 2015-12-30 17:55 |只看该作者
回复 7# 731281755


grep,awk,sed都能做

sed -r 's/^.*q=(.*)&_,.*$/\1/g' file

最好提供完成文本

论坛徽章:
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
9 [报告]
发表于 2015-12-30 20:06 |只看该作者
回复 5# 731281755


    把你测试用的日志文件、shell脚本打包压缩传上来我试试

论坛徽章:
0
10 [报告]
发表于 2015-12-30 22:44 |只看该作者
回复 8# chengchow


    grep怎么做呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP