免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: djzhangxing
打印 上一主题 下一主题

[文本处理] 如何将文件中包含某关键字的行删除掉?syslog报警需求 [复制链接]

论坛徽章:
2
狮子座
日期:2014-08-15 00:24:232015元宵节徽章
日期:2015-03-06 15:52:30
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-07-31 01:17 |显示全部楼层 |倒序浏览

现在我的工作是这样,每天主要看syslog大于10M是什么原因导致的,但是有的时候可能机器硬件故障导致一些硬件报警,比如说关键字"disk_error",需要永久忽略的怎么办呢?

  1. 例:pc1、Pc2硬盘有故障,每天messages日志30M,其中大多关键字都是包含disk_error,所以每天就会报警出来,如何在日志服务器中messages文件中包含disk_error字段删除掉,
  2. 日志目录:/log/pc1/messages和/log/pc2/messages,我该如何过滤呢?

复制代码

论坛徽章:
2
狮子座
日期:2014-08-15 00:24:232015元宵节徽章
日期:2015-03-06 15:52:30
2 [报告]
发表于 2014-08-01 11:03 |显示全部楼层
各位好,是这样的,一台日志收集服务器上面会有全网的日志。我们这边判断是否大于10M 是用du -sk 大于 10240,比如说目录下
<code>
[root@cdn ~]#ls ./8.8.8.8/
messages maillog
[root@cdn ~]#du -sk ./8.8.8.8/
15624        .
</code>
像以上的情况就会报警,假如说messages中百分之80的字段都是包含disk_error的行,如何在du -sk的时候筛选出去,如果想刚刚大神所说grep -v 重定向另个文件,这刚总目录下du时候还是会大于10m的,
用sed //d 可以实现,但是我们领导说,日志的文件不能动,所以现在我比较麻烦!
<code>如何在du -sk执行的时候,过滤掉某个字段?</code>
<code>
#!/bin/bash
date=`date --date='1 day ago' +%Y-%m-%d`
ip=`awk '{print $1}' data.txt`
log=`awk '{print $2}' data.txt`
field=`awk '{print $3}' data.txt`

while read ip log field
do
sed  -i '/'$field'/d' /root/zx/$date/$ip/$log
done <  data.txt
</code>
我之前是这么写的,变量有点乱哈,其实最主要的sed  -i '/'$field'/d' /root/zx/$date/$ip/$log我用的是这条命令,最后判断是ok了,但是源文件被我修改了,不成立。

论坛徽章:
2
狮子座
日期:2014-08-15 00:24:232015元宵节徽章
日期:2015-03-06 15:52:30
3 [报告]
发表于 2014-08-01 11:03 |显示全部楼层
这样漂亮点。
各位好,是这样的,一台日志收集服务器上面会有全网的日志。我们这边判断是否大于10M 是用du -sk 大于 10240,比如说目录下

  1. [root@cdn ~]#ls ./8.8.8.8/
  2. messages maillog
  3. [root@cdn ~]#du -sk ./8.8.8.8/
  4. 15624        .
复制代码
像以上的情况就会报警,假如说messages中百分之80的字段都是包含disk_error的行,如何在du -sk的时候筛选出去,如果想刚刚大神所说grep -v 重定向另个文件,这刚总目录下du时候还是会大于10m的,
用sed //d 可以实现,但是我们领导说,日志的文件不能动,所以现在我比较麻烦!
  1. 如何在du -sk执行的时候,过滤掉某个字段?
复制代码

  1. #!/bin/bash
  2. date=`date --date='1 day ago' +%Y-%m-%d`
  3. ip=`awk '{print $1}' data.txt`
  4. log=`awk '{print $2}' data.txt`
  5. field=`awk '{print $3}' data.txt`

  6. while read ip log field
  7. do
  8. sed  -i '/'$field'/d' /root/zx/$date/$ip/$log
  9. done <  data.txt
复制代码
我之前是这么写的,变量有点乱哈,其实最主要的sed  -i '/'$field'/d' /root/zx/$date/$ip/$log我用的是这条命令,最后判断是ok了,但是源文件被我修改了,不成立。

论坛徽章:
2
狮子座
日期:2014-08-15 00:24:232015元宵节徽章
日期:2015-03-06 15:52:30
4 [报告]
发表于 2014-08-01 11:21 |显示全部楼层
嗯,我也是这么想的,但是不知道怎么和du -sk 结合起来,别如说messages中我想去掉disk_error字段的,
du -sk `sed /dnsmasq-dhcp/d messages`
du命令都是对文件的判断吧,怎么判断输出呢。
回复 10# helloclei


   

论坛徽章:
2
狮子座
日期:2014-08-15 00:24:232015元宵节徽章
日期:2015-03-06 15:52:30
5 [报告]
发表于 2014-08-01 11:45 |显示全部楼层
这个,,,全网有几千台机器,假如说我想过滤100台,其中包含某个字段的,这样的话,会没必要的跑磁盘的吧,对另个文件导出-判断-再删除,谢谢哈,在等等大神看下。!回复 12# helloclei


   

论坛徽章:
2
狮子座
日期:2014-08-15 00:24:232015元宵节徽章
日期:2015-03-06 15:52:30
6 [报告]
发表于 2014-08-01 12:41 |显示全部楼层
烦请,指点一二回复 14# houjun19830610


   

论坛徽章:
2
狮子座
日期:2014-08-15 00:24:232015元宵节徽章
日期:2015-03-06 15:52:30
7 [报告]
发表于 2014-08-02 02:36 |显示全部楼层
前面和后面都明白。
#将获得的过滤字节数换算成M
_SIZE=`echo "scale=2;$_SUM_NO/1024/1024"|bc -l|sed 's/^\./0&/'`
这里是什么意思呢?
1024代表什么呢,我想转成单位K呢?


回复 19# qianqiaoo


   

论坛徽章:
2
狮子座
日期:2014-08-15 00:24:232015元宵节徽章
日期:2015-03-06 15:52:30
8 [报告]
发表于 2014-08-02 02:55 |显示全部楼层
我明白一部分了啦。
_SIZE=`echo "scale=2;$_SUM_NO/1024/1024"|bc -l|sed 's/^\./0&/'`
"scale=2;-----保留2位小数
$_SUM_NO/1024/1024"|bc -l   ---------变量字节除以1024是k,再次除以1024是m
至于sed,我在研究哈。
回复 20# djzhangxing


   

论坛徽章:
2
狮子座
日期:2014-08-15 00:24:232015元宵节徽章
日期:2015-03-06 15:52:30
9 [报告]
发表于 2014-08-02 03:21 |显示全部楼层
本帖最后由 djzhangxing 于 2014-08-02 03:28 编辑

sed我也明白了,先感谢啊,灰常的感谢。

论坛徽章:
2
狮子座
日期:2014-08-15 00:24:232015元宵节徽章
日期:2015-03-06 15:52:30
10 [报告]
发表于 2014-08-02 03:23 |显示全部楼层
本帖最后由 djzhangxing 于 2014-08-02 03:28 编辑

  1. [zx@cdn ~]$ ll messages
  2. -rw-r--r-- 1 zx zx 15417267 Aug  2 02:10 messages
  3. [zx@cdn ~]$ du -sb messages                  
  4. 15417267        messages    ------------b
  5. [zx@cdn ~]$ du -sk messages
  6. 15056        messages           -------------Kb
  7. [zx@cdn ~]$ du -sm messages
  8. 15        messages                   -------------Mb
  9. [zx@cdn ~]$ du -sh messages
  10. 15M        messages
  11. 但是↓
  12. [zx@cdn ~]$ echo "scale=30;15417267/1024"|bc -l|sed 's/^\./0&/'
  13. 15055.924804687500000000000000000000                                        -----------这个不应该是b换成km  应该是15056
  14. [zx@cdn ~]$ echo "scale=30;15417267/1024/1024"|bc -l|sed 's/^\./0&/'
  15. 14.703051567077636718750000000000                                              -----------这个应该是b换成mb 应该是15

  16. 我们这里的脚本是根据du -sk判断的,主要的问题就是问下那个14.70...如何约等于15!不然的话数据会不准确的。
复制代码
回复 22# djzhangxing


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP