免费注册 查看新帖 |

Chinaunix

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

如何实现实时监控log? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-30 16:41 |只看该作者 |倒序浏览
需求:
linux系统下,需要(接近)实时地监控log文件message里的内容,一旦发现有某个特定的信息出现则立即执行某个程序。

最初的考虑是采用cron每分钟运行一个脚本检查message文件,发现特定信息则立即执行相应动作。但经过分析,发行该信息出现的频率并不高,每分钟执行一次的话,则效率太低,但如果改为三分钟或五分钟的话,有无法达到实时的效果。

各位高人有何建议?

论坛徽章:
0
2 [报告]
发表于 2006-06-30 16:43 |只看该作者
另一个想法是启守护进程,但脚步能做到吗?

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
3 [报告]
发表于 2006-06-30 17:05 |只看该作者
tail -f log|while read var
do
case "$var" in
*特定信息*)  执行相应动作;;
esac
done

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2006-06-30 17:31 |只看该作者
tail -f -s Second /var/log/messages

论坛徽章:
0
5 [报告]
发表于 2006-06-30 17:42 |只看该作者
谢谢两位!
waker的例子还好理解,实时查看log的文件尾,并抓取相关的信息。然后做相应的动作。但这样需要将脚本放在后台执行才可以吧?
寂寞烈火的例子是每隔second妙就查看一次吗?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2006-06-30 17:59 |只看该作者
原帖由 Hex 于 2006-6-30 17:42 发表
谢谢两位!
waker的例子还好理解,实时查看log的文件尾,并抓取相关的信息。然后做相应的动作。但这样需要将脚本放在后台执行才可以吧?
寂寞烈火的例子是每隔second妙就查看一次吗?

是的~

论坛徽章:
0
7 [报告]
发表于 2006-06-30 18:02 |只看该作者
谢谢!我测试一下!

论坛徽章:
0
8 [报告]
发表于 2006-06-30 18:33 |只看该作者
原帖由 waker 于 2006-6-30 17:05 发表
tail -f log|while read var
do
case "$var" in
*特定信息*)  执行相应动作;;
esac
done


waker,我的脚步怎么会出这样的错误呢?


  1. [root@dns root]# more test.sh
  2. #!/bin/bash
  3. tail -f /var/log/messages | while read line
  4. do
  5. cat $line |grep "popup"
  6. if [ #? -eq 0 ]; then
  7. logger "got popup!"
  8. fi
  9. done

  10. [root@dns root]# ./test.sh
  11. ./test.sh: line 7: syntax error near unexpected token `fi'
  12. ./test.sh: line 7: `fi'
  13. [root@dns root]#
复制代码

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
9 [报告]
发表于 2006-07-01 00:52 |只看该作者
原帖由 Hex 于 2006-6-30 18:33 发表


waker,我的脚步怎么会出这样的错误呢?


[code][root@dns root]# more test.sh
#!/bin/bash
tail -f /var/log/messages | while read line
do
cat $line |grep "popup"
if [ #? -eq 0 ]; ...


希望你test的是$?,因为,我不知道#?是啥!

[ 本帖最后由 寂寞烈火 于 2006-7-1 00:53 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2006-07-01 11:05 |只看该作者
原帖由 寂寞烈火 于 2006-7-1 00:52 发表


希望你test的是$?,因为,我不知道#?[/ ...


真是汗颜!居然是怎么简单的错误!

哈哈,经过waker和烈火的指点,俺的目标达成了!以下是最终的测试代码。

  1. #!/bin/bash
  2. tail -f /var/log/messages | while read line
  3. do
  4. echo $line |grep "popup"
  5. if [ $? -eq 0 ]; then
  6. echo "got popup!"
  7. fi
  8. done
复制代码


测试结果如下:
  1. [root@dns root]# ./test.sh &
  2. [1] 2184

  3. [root@dns root]# logger "do you popup?"
  4. [root@dns root]# Mar 14 18:50:21 dns root: do you popup?
  5. got popup!

  6. [root@dns root]# logger "I had popup"
  7. [root@dns root]# Mar 14 18:50:54 dns root: I had popup
  8. got popup!

  9. [root@dns root]# ps
  10.   PID TTY          TIME CMD
  11. 2086 pts/0    00:00:00 bash
  12. 2184 pts/0    00:00:00 test.sh
  13. 2191 pts/0    00:00:00 tail
  14. 2192 pts/0    00:00:00 test.sh
  15. 2214 pts/0    00:00:00 ps
复制代码


不过我还有一个疑问就是我只运行了一次test.sh,但为什么会有两个test.sh的进程呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP