免费注册 查看新帖 |

Chinaunix

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

[文本处理] 如何检索持续更新日志中的关键词 [复制链接]

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-07-23 06:20:00数据库技术版块每日发帖之星
日期:2016-07-29 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-07-28 01:26 |只看该作者 |倒序浏览
我想做一个任务,每隔2分钟检索不断更新日志中key1、key2、key3这三个关键字,如果检索到,则发警告。由于是定时任务,我不想让前次检索的结果影响下次的检索,从而导致误报,不知道各位有什么好的建议?谢谢!

论坛徽章:
2
luobin
日期:2016-06-17 17:46:36lufei
日期:2016-06-17 17:49:16
2 [报告]
发表于 2016-07-28 09:20 |只看该作者
#!/bin/bash
#
file=$1
n2=`cat $file|wc -l`
n1=`cat $file|wc -l`
while true
do
n=`expr $n2 - $n1`
tail -n $n $file  | grep "key" >/dev/null
if [ $? -eq 0 ];then
echo "ok"
fi
n1=`cat $file|wc -l`
sleep 10
n2=`cat $file|wc -l`
done

求职 : 技术支持/维
论坛徽章:
0
3 [报告]
发表于 2016-07-28 09:58 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-07-23 06:20:00数据库技术版块每日发帖之星
日期:2016-07-29 06:20:00
4 [报告]
发表于 2016-07-28 10:24 |只看该作者
感谢2楼,引入n1,n2这个思路,我还需要再修改一下。感谢大神!
如果日志不是持续更新,三楼思路可行。假设日志前50行有关键词key1,检查出来也告警了。下个周期,日志里没有产生key1,但是前50行里有,所以会误报。。。。

求职 : 技术支持/维
论坛徽章:
0
5 [报告]
发表于 2016-07-28 10:32 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-07-23 06:20:00数据库技术版块每日发帖之星
日期:2016-07-29 06:20:00
6 [报告]
发表于 2016-07-28 12:26 |只看该作者
sorry,误解3楼大神了,用三楼方法也能实现。。。。

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-07-23 06:20:00数据库技术版块每日发帖之星
日期:2016-07-29 06:20:00
7 [报告]
发表于 2016-07-28 13:01 |只看该作者
本帖最后由 zhaiyuzhen 于 2016-07-28 13:02 编辑

可能我没表达清楚我的想法:
日志文件片段:
  1. 2016-06-29 14:04:55.337:INFO:oejdp.ScanningAppProvider:Deployment
  2. 2016-06-29 14:04:55.340:INFO:oejdp.ScanningAppProvider:Deployment
  3. 2016-06-29 14:04:55.342:INFO:oejd.DeploymentManager:Deployable ad
  4. 2016-06-29 14:04:55.386:WARN:oejw.WebInfConfiguration:Can't reuse
  5. 2016-06-29 14:05:00.711:INFO:/ws:No Spring WebApplicationInitiali
  6. 2016-06-29 14:05:01.107:INFO:/ws:Initializing Spring root WebAppl
  7. 14:05:01,107 INFO  [ContextLoader] Root WebApplicationContext: in
  8. 14:05:01,163 DEBUG [StandardServletEnvironment] Initializing new
  9. 14:05:01,164 DEBUG [StandardServletEnvironment] Adding [servletCo
复制代码
第一次从首行搜索到末行(比如1-4行),完成后取当前系统时间为time1(14:05:00),下次再扫描的时候先从匹配time1的行开始(也就是第5行),直到末行,如此重复。
不知道该如何实现,谢谢各位!

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
8 [报告]
发表于 2016-07-28 13:47 |只看该作者
提供一个思路, 将上一次查询结果的最后一条记录的 行号 作为 下一次查询的 KEY 保存起来, 在下一次查询的时候取出这个 KEY 与其进行匹配.

论坛徽章:
29
程序设计版块每日发帖之星
日期:2016-02-29 06:20:0015-16赛季CBA联赛之天津
日期:2016-08-10 10:33:1115-16赛季CBA联赛之深圳
日期:2016-08-17 15:07:2015-16赛季CBA联赛之佛山
日期:2016-11-07 11:33:5015-16赛季CBA联赛之广夏
日期:2016-11-15 09:13:31CU十四周年纪念徽章
日期:2016-11-24 14:12:25极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之深圳
日期:2016-12-07 17:15:2715-16赛季CBA联赛之北京
日期:2016-12-22 09:30:0115-16赛季CBA联赛之深圳
日期:2016-12-22 10:49:2115-16赛季CBA联赛之山西
日期:2017-02-10 09:05:3215-16赛季CBA联赛之同曦
日期:2017-02-27 14:19:08
9 [报告]
发表于 2016-07-28 14:37 |只看该作者
每隔两分钟执行脚本:
1.把原日志日志重命名                              mv log log.tmp
2.检索重命名的日志有无你要的key             grep  key  log.tmp
3.把重命名的日志追加到另一个完整日志      cat log.tmp >> log.date

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-07-23 06:20:00数据库技术版块每日发帖之星
日期:2016-07-29 06:20:00
10 [报告]
发表于 2016-07-28 17:20 |只看该作者
9楼方案不行,因为我把log mv之后系统并不会生成新的日志文件。8楼方案记录行号的方式可行,我今天折腾一天,总想用时间点,无奈没法实现。
贴上我的脚本:
  1. folder=/var/log/
  2. oldfile=`cat filename`
  3. newfile=`ls $folder -ltr |tail -n 1|cut -c 45-90`
  4. echo $newfile > filename
  5. ct=`cat /root/ckd_nub`
  6. > silog.txt
  7. tail -n +$ct  $folder$newfile > tmp.txt
  8. #for key in JedisConnectionException SocketTimeoutException OutOfMemoryError SQLException ConnectException aaa
  9. for key in  aaa bbb ccc ddd 333
  10. do
  11. if cat tmp.txt |grep -q -w $key; then
  12. cat tmp.txt |grep -w $key >> silog.txt
  13. echo "find keys:$key!!!!!"
  14. fi
  15. done
  16. echo `awk 'END{print NR}' $folder$newfile` > ckd_nub
复制代码
为什么引入newfile,oldfile,是因为我想搜寻最新更改的日志,并且有可能上次检索的文件和这次检索的文件不是同一个文件。所以做了判断,两次检索如果是同一个文件,直接读取从上次检索过的行开始
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP