截取与分析日志文件的特定行数的操作

在进行操作系统和数据库系统管理时经常会遇到在日志文件中查找某个字符或者按照时间截取某个时间段的日志进行分析。

今天早上就遇到一个MySQL数据库上的问题mysql数据库在0-3点的时候数据库会话连接tpscpu和iowait等都比平时大了许多。

为了定位这个时间段内到底发生了那些慢查询消耗了资源就需要在slow.log慢查询日志进行查询截取和分析。

在处理过程中对几种常用的日志截取方法进行了汇总和测试

截取日志段的的方法汇总与测试

方式一 确定时间段的行号使用head和tail命令截取

搜索时间 Time: 151212 00:00:00

先到gg到文件最前面然后搜索 /Time: 151212  得到

1979016 # Time: 151212  0:00:15

文件总行数为

# wc -l slow-query-169-1212.log

1999422 slow-query-169-1212.log

1999422                                 limit 0,20;

然后在到文件最后面G, 搜索4点之后开始的文件  /Time: 151212  4   得到

1987392 # Time: 151212  4:00:05

确定需要查询的时间段行号后使用head和tail命令进行截取

>>> 1987392 - 1979016;

8376

需要截取的日志最后行号为 1979016想用head 命令然后在用tail命令截取最后的 8376 行即可命令为

head -n 1979016 slow-query-169-1212.log | tail -n 8376   > slow-query-169-1212_00-03.log

方式二 确定时间段的行号使用sed命令截取

截取 151212  0-3点之间的慢查询日志

sed -n ‘1979016,1987392p‘ slow-query-169-1212.log  > slow-query-169-1212_00-03.log

>>> 1987392 - 1979016;

8376

该部分文件应该有 8376 行数据确认正常

方式三确定时间段行号后使用awk命令截取

截取 151212  0-3点之间的慢查询日志

awk -F"\n" ‘{if(NR>=1979016&&NR <=1987392)print $0 }‘ slow-query-169-1212.log  > slow-query-169-1212_00-03.log

方式四不需先确定行号直接用sed取出日志段

slow log都是以  # Time: 151212  0:00:15 开头直接用sed 取出其中的日志

sed -n ‘/^# Time: 151212  0/,/^# Time: 151212  4/p‘ slow-query-169-1212.log > part.log    --这样的效果就和刚才上面的效果相同取出了0 -3 点之间的数据

如果是想取出 151211 这一天的数据则命令为

sed -n ‘/^# Time: 151211/,/^# Time: 151212/p‘ slow-query-169-1212.log > part.log        --取出了151211 这一天的日志

注意使用sed 时两行之间的选择项一定要对应不然结果就不是想要的结果了

sed -n ‘/^# Time: 151212/,/^# Time: 151212  4/p‘ slow-query-169-1212.log > part.log     --前后两个时间点不同搜索的是全部  # Time: 151212开头的

使用pt工具对截取的日志进行分析

分析这段时间的日志的命令如下

/usr/local/pt/bin/pt-query-digest  /data/bbs/slow-query-169-1212_00-03.log > /data/bbs/slow-query-169-1212_00-03-report.log

这是默认的分析和排序方法可以根据需求选择其他pt报告分析方法

注1 vim中两种查询方式

命令模式下按‘/’然后输入要查找的字符Enter。和/的区别是一个向前下找一个向后上。

另外‘*’可以查找当前光标下的word完全符合‘g*’则部分符合以#代替*表示向后上找

注2 几种文件处理方法的简单举例

sed是按行处理的不会将整个文件加载到内存中可以放心使用

要切出从2012-02-09到2012-09-10的所有数据行假设你的日志文件以yyyy-MM-dd的日期格式开头只需要

sed -n ‘/^2012-02-09/,/^2012-09-10/p‘ whole.log > part.log

无论怎么样你都必须使用某一个程序把这个文件读出来并且用一定的规则来加以过滤。

在Linux中使用cat和grep对文件进行操作已经可以说是最经济合理的了。

占用一定的系统资源是肯定的具体的话跟你使用的catgrep以及linux内核都有一定关系所以可能会略有不同。

一般不要在系统里出现那么大的日志文件最好在一开始就做好日志的大小限制以及合理的日志转储和备份。

显示文件的第2到第6行

sed -n ‘2,6p‘ file

需要加-n参数.

head -n 6 file|tail -n 4

awk 也能达到要求

awk -F"\n" ‘{if(NR>=2&&NR <=6)print $0 }‘ file

时间: 2024-07-31 15:16:53

截取与分析日志文件的特定行数的操作的相关文章

分析日志文件

在tomcat中安装logback插件,此插件用于生成日志.该日志中包括很多信息,我们的目的是将需要的数据进行整理,将其插入到MySQL数据库中,并将其做成定时任务执行. 一下是原日志文件内容: 我们需要client,uniquecode,device,versioncode,interface,createtime这些字段 思路如下: 1.我们只需要对包含接口和请求开始字段的行进行数据整理. grep "personal/checkupdate.json请求开始"   /home/l

datastage 分析日志获取表记录条数

DataStage通过分析日志获取Job插入目标表的记录数 这只是一种不太好的方法,也许还有更好.更简便的方法.这种方法要求每次运行Job之前删除已有的日志信息,否则无法统计出正确的记录数.当然,在Job跑完之后,可以在shell备份本次Job运行的日志到服务器磁盘. 1       日志清理设置 登录Datastage Administrator,选择对应项目,项目属性->记录,勾选"自动清除作业日志",设置为自动清理上次及以前的日志. Figure 1 Administrat

python-实时分析log文件每秒记录数

文件名:gencdr.py 作用:在指定的时间里每秒向testcdr.txt文件中写N行记录,N为随机数.模拟access.log. # -*- coding: utf-8 -*- """ zhangbo2012 http://www.cnblogs.com/zhangbo2012/ """ import time import datetime import random filepath = "testcdr.txt" d

Linux 下使用 wc 统计文件夹下所有文件的代码行数(包括子目录)

wc 命令用于统计文件内容的行数.单词数.字母数. 但是如果想统计一个目录下所有文件的行数,wc 并没有提供递归统计. 不过,可以结合 find 命令,例如: $ wc -l `find -name *.c` 其中,-l 参数是统计行数,find -name *.c 是查找当前目录(包含子目录)下所有的C文件,` ` 是 shell 中的替换命令. 当然,实现方法有很多,我只是觉得这个比较简单易记. 测试效果如下: 最后,附一下 wc 的使用帮助(man wc) NAME wc - print

使用logminer分析日志文件

实验环境 win7 64  oracle PL/SQL Release 11.2.0.1.0 - Productionhttp://blog.csdn.net/tianlesoftware/article/details/5604497 --这些操作需要在sysdba身份执行1.执行分析之前需要添加补充日志SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;查看补充日志是否开启,NO为未开启ALTER DATABASE ADD SUPPLEMENTA

python-删除文件的特定行

有一次需要删除一些html文件中的统计链接,通过用遍历文本的每行,然后正则查找网址,使用下面的函数删除行. 删除文本文件的特定行 def removeLine(filename, lineno): fro = open(filename, "r",encoding='UTF-8') current_line = 0 while current_line < lineno: fro.readline() current_line += 1 seekpoint = fro.tell(

2018-04-23 《鸟哥的Linux私房菜 基础学习篇(第四版)》 第19章 认识与分析日志文件 笔记

常见的日志文件:/var/log/boot.log                有/var/log/cron                有/var/log/dmesg                有/var/log/lastlog                有/var/log/maillog 或 /var/log/mail/*    有,mail没有/var/log/messages                有/var/log/secure                有/v

认识和分析日志文件

1.日志文件的权限通常仅为root能够读取. 2.常用的日志文件 /var/log/cron /var/log/dmesg (记录开机的时候内核自检过程中的各项信息) /var/log/lastlog  (记录系统上面的账号最近一次登陆系统的相关信息) /var/log/maillog  (记录邮件的往来信息) (SMTP)  (POP3) /var/log/messages /var/log/secure (只要牵涉需要输入账号密码的软件,都会记录在该文件中) ps aux | grep sy

别人的Linux私房菜(19)认识与分析日志文件

日志文件通常只有root可以读取,解决系统和网络方面的问题. /var/log/boot.log本次开机系统检测和启动硬件,和内核支持的相关功能的信息记录. /var/log/cron计划任务有没有被执行,是否正确编写等 /var/log/dmesg开机时内核检测过程产生的信息 /var/log/lastlog所有账号最近一次登录系统的相关信息,和lastlog命令有关 /var/log/maillog或/var/log/mail/*记录发送邮件时(SMTP),postfix产生的信息和接收邮件