免费注册 查看新帖 |

Chinaunix

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

[系统管理] 请教,如何在一个日志文件下查到某一行的行数? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-03-20 12:22 |只看该作者 |倒序浏览
本帖最后由 rdcwayx 于 2014-03-20 14:11 编辑

其实主要是想定时查找日志文件下,有没有某些报错....
但报错可能会重复....所以想把旧的报错忽略....
下面是我将现在时间对比日志时间的壳,但没法做到忽略旧的报错
  1. DATE=`date +%Y%m%d`
  2. TIME=`date +%H%M%S`
  3. LOCATION=/tmp
  4. COUNT_LOG=`cut -c-6 $LOCATION/Alarm_log_2014-03-17.log`
  5. MONITOR_FILE=Alarm_log_2014-03-17.log
  6. KEYWORD="Set alarm 524"
  7. FIND_RESULT=`find $LOCATION -name $MONITOR_FILE | xargs grep $KEYWORD`
  8. if [ "$TIME" - "$COUNT_LOG" <= 100 ]
  9. then
  10.         if [ "$FIND_RESULT" = "$KEYWORD" ]
  11.         then
  12.         echo 100 > $LOCATION/testing.txt
  13.         echo date >> $LOCATION/logfile.txt && "Error Found out" >> $LOCATION/logfile.txt
  14.         else
  15.         echo 0 > $LOCATION/testing.txt
  16.         echo date >> $LOCATION/logfile.txt && "No Error Found out" >> $LOCATION/logfile.txt
  17.         fi
  18. else
  19. echo date >> $LOCATION/logfile.txt && "No Error Found out" >> $LOCATION/logfile.txtl
  20. fi
复制代码
  1. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::Alarm_log_2014-03-17.log::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2. 192536    OTHER   MINOR 06213 smtm-scp02 [QM_MAC_G]: EXEC-DB execute {call PKG_QM_API.CCLIS(?,?,?,?,?,?,?,?)} error. rc = -1
  3. 210406    OTHER    INFO 04302 toapp(4K):Set alarm 970
  4. 210406    OTHER    INFO 04303 toapp(4K):Set alarm 971
  5. 210408    OTHER   MAJOR 04352 smtm-scp02 [QM_MAC_G]: DBI-MAJOR Statement execution error at Oracle server - ORA-01480: trailing null missing from STR bind value
  6. 210408    OTHER   MINOR 04353 smtm-scp02 [QM_MAC_G]: EXEC-DB execute {call PKG_QM_API.CCLIS(?,?,?,?,?,?,?,?)} error. rc = -1
  7. 220223    OTHER    INFO 26129 toapp(4K):Set alarm 524
  8. 220223    OTHER    INFO 26129 toapp(4K):Set alarm 0
  9. 220223    OTHER    INFO 26129 toapp(4K):Set alarm 0
  10. 220225    OTHER   MINOR 26219 smtm-cs01-a: Long talking [021E](16-30) detected, asso=[0000], card_no =
  11. 221530    OTHER    INFO 07901 toapp(4K):Set alarm 641
  12. 221531    OTHER   MAJOR 07904 FBCDR alert, Please check the email for detail
  13. 230425    OTHER    INFO 21279 toapp(4K):Clear all alarms
  14. 234018    OTHER    INFO 23344 toapp(4K):Set alarm 524
  15. 234021    OTHER   MINOR 23420 smtm-cs02-a: Long talking [064A](50-10) detected, asso=[03F0].
  16. 234130    OTHER    INFO 24414 toapp(4K):Set alarm 524
  17. 234130    OTHER    INFO 24414 toapp(4K):Set alarm 0
  18. 234130    OTHER    INFO 24414 toapp(4K):Set alarm 0
  19. 234133    OTHER   MINOR 24422 smtm-cs01-a: Long talking [020D](16-13) detected, asso=[0000], card_no =
复制代码

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
2 [报告]
发表于 2014-03-20 14:24 |只看该作者
本帖最后由 rdcwayx 于 2014-03-20 14:26 编辑

因为你给出的日志里只有小时,没有日期, 我猜想该日志是每天轮转的。

这个代码可以查前5分钟内的错误日志

  1. awk '$1>=t&&/Set alarm 524/' t=$(date -d "-5 minutes" +%H%M%S) Alarm_log_2014-03-17.log
复制代码

论坛徽章:
0
3 [报告]
发表于 2014-03-20 14:29 |只看该作者
我恐怕你要做的仅仅是在grep $KEYWORD|tail -1
加个tail

论坛徽章:
0
4 [报告]
发表于 2014-03-20 17:23 |只看该作者
本帖最后由 rdcwayx 于 2014-03-21 09:35 编辑
rdcwayx 发表于 2014-03-20 14:24
因为你给出的日志里只有小时,没有日期, 我猜想该日志是每天轮转的。

这个代码可以查前5分钟内的错误日 ...


谢谢解答,我现在改成这样了....但如果这样的awk'$ 1>= T&&/“$ ALARM”/“..没办法查到错误...一定要的awk'$ 1>= T&&/设置报警524/'才可以...是我语法问题吗?
  1. YEAR=`date +%Y`
  2. MONTH=`date +%m`
  3. DAY=`date +%d`
  4. LOG_LOCATION=/root/tmp
  5. ALARM_LOG=Alarm_log_${YEAR}-${MONTH}-${DAY}.log
  6. LOG_FILE=Error_monitor_log_file_${YEAR}_${MONTH}.log
  7. ALARM="Set alarm 524"
  8. FIND_ERROR=`awk '$1>=t&&/"$ALARM"/' t=$(date -d "-1 minutes" +%H%M%S) $LOG_LOCATION/$ALARM_LOG`
  9. if [ "$FIND_ERROR" = "" ]
  10. then
  11. date >> $LOG_LOCATION/$LOG_FILE && echo "Error Found out" >> $LOG_LOCATION/$LOG_FILE
  12. echo 100 > $LOG_LOCATION/testing.txt
  13. else
  14. date >> $LOG_LOCATION/$LOG_FILE && echo "No Error Found out" >> $LOG_LOCATION/$LOG_FILE
  15. echo 0 > $LOG_LOCATION/testing.txt
  16. fi
复制代码

论坛徽章:
0
5 [报告]
发表于 2014-03-20 17:26 |只看该作者
runintostar 发表于 2014-03-20 14:29
我恐怕你要做的仅仅是在grep $KEYWORD|tail -1
加个tail


谢谢解答,因為我們每分鐘都要查日志中有沒有錯誤...但同一時間可能有幾個錯誤...所以tail-1未必能解决....

论坛徽章:
3
金牛座
日期:2013-08-26 10:25:02摩羯座
日期:2013-09-09 15:14:322015年亚洲杯之约旦
日期:2015-05-06 09:33:56
6 [报告]
发表于 2014-03-20 17:30 |只看该作者
我之前是这样做的。复制一个备份,5分钟之后,用diff来对比备份和日志文件,那么结果只有新产生的日志。然后再在这些日志里找新的错误,同时复制日志文件到备份(做为下一次diff用)。


如果你日志不大的情况下可以这样考虑。

论坛徽章:
0
7 [报告]
发表于 2014-03-21 09:09 |只看该作者
本帖最后由 runintostar 于 2014-03-21 09:11 编辑

回复 5# bowmanleong

我确认一下需求, 只是想查看还未查看过的日志? 是这样吗?
如果是可以采取日志监控的逻辑,简单描述下
相当于给文件弄一个指针, 每次都从指针处开始搜索到文件结束, 然后修改指针.
假设日志文件名为$log, 指针文件为$pointer, 下面是大致逻辑, 因为文件是一直在append的, 所以用sed写死行数会比较安全.
  1. [ -f $pointer ]||echo 0 >$pointer
  2. end=`wc -l<$log`
  3. start=`head -1 $pointer`
  4. [ $start -gt $end ]&&start=0
  5. sed -n $start,${end}p | do something that you are using to check error.
  6. echo $end>$pointer
复制代码
仅供参考.

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
8 [报告]
发表于 2014-03-21 09:38 |只看该作者
本帖最后由 rdcwayx 于 2014-03-21 09:42 编辑

@bowmanleong

  1. ALARM="Set alarm 524"
  2. time=$(date -d "-1 minutes" +%H%M%S)
  3. FIND_ERROR=$(awk '$1>=t&&$0~alarm' t=$time alarm=${ALARM} ${LOG_LOCATION}/${ALARM_LOG})
复制代码
建议:
1. 所有的变量引用都用大于符号围起来。
2. 命令输出复制用 $( command) 围起来
3. awk 引用shell的变量,用赋值的方法会比较简单

论坛徽章:
0
9 [报告]
发表于 2014-04-01 15:58 |只看该作者
rdcwayx 发表于 2014-03-21 09:38
@bowmanleong建议:
1. 所有的变量引用都用大于符号围起来。
2. 命令输出复制用 $( command) 围起来

發現原來還是把所有有關的日志都顯示出來了....就算時間過了.....

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
10 [报告]
发表于 2014-04-01 16:57 |只看该作者
你能手动运行那个awk命令,看看是否成功?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP