【高效编码】查询日志的命令老是记不住?没关系,这篇文章帮你记

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 您好,我是码农飞哥,一直想飞暂时在跑个那个老哥。

您好,我是码农飞哥,一直想飞暂时在跑个那个老哥。

现有两个日志文件,分别是normal.log文件和normal-05-29-2021-1.log.gz

找到日志文件

有时候我们只知道日志文件的名称,但是并不知道日志文件的地址。这种情况下,该如何查找日志文件呢?这里可以用的命令有两个:一个是path命令;一个是locate命令。这两个命令的区别是 path命令是搜索具体的目录;而locate命令式搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地信息。

就本例中搜索:normal.log 文件的位置:

使用path命令

path命令的使用的基本语法是:find < path > < expression > < cmd >

其中:path: 所要搜搜的目录及其所有子目录,默认为当前目录

expression: 所要搜索的文件的特征。

cmd: 对搜索结果进行特定的处理。

find / -name normal.log -type f

这个命令的意思是在根目录 / 下,查找名为 normal.log的文件,f 表示查找的是文件。查找结果是:

使用locate命令

locate命令的使用格式是locate [选项] [名称]

locate -r normal.log$

查找以normal.log结尾的所有文件。查找的结果如下:

基础的日志查看命令:

head命令

head 命令可用于查看文件开头部分的内容,又一个常用的参数 -n 用于显示行数,默认为10,显示10行的内容。

1. 命令格式:

head [参数] [文件]

2. 命令参数,各种操作的含义:

参数 含义
-q 隐藏文件名
-v 显示文件名
-c<树木> 显示字节数
-n<行数> 显示行数

3.实例

1.显示normal.log 文件的头10行的命令是:

head normal.log

2.查询normal.log文件的头20行日志的命令是:

head -n 20  normal.log

3.查询normal.log日志文件除了最后20行的其他所有日志;

head -n -20  normal.log

tail 命令

tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。

1.命令格式

tail [参数] [文件]

2.命令参数

参数 说明
-f 循环读取
-q 不显示处理信息
-v 显示详细的处理信息
-c<数目> 显示的字节数
-n<行数> 显示文件的尾部n行内容

3.实例

1.要显示 normal.log 文件的最后 10 行的命令:

tail normal.log

2.查询日志尾部最后20行日志的命令

tail  -n  20  normal.log 

3.查询20行之后的所有日志的命令

tail -n +20 normal.log

cat 命令

cat(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。

1.命令格式

cat [-AbeEnstTuv] [--help] [--version] fileName

2.命令参数

参数 说明
-n 由 1 开始对所有输出的行数编号。
-b 和 -n 相似,只不过对于空白行不编号。
-s 当遇到有连续两行以上的空白行,就代换为一行的空白行。
-v 使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。

3.实例

1.把 normal.log 的文档内容加上行号后输入 test.txt 这个文档里:

cat -n normal.log > test.txt

grep命令

在介绍查询命令之前我们首先介绍一下grep命令,该命令是一个重要的命令,该命令用于查找含有关键词的数据,包括从文件中查找符合条件的字符串。

1.命令格式:grep [option] pattern [文件名]

2.命令参数,各种操作的含义:

命令参数

参数 作用
-? 同时显示匹配行上下的?行,如:grep -2 pattern filename 同时显示匹配行的上下2行
-b —byte-offset 打印匹配行前面打印该行所在的快号码
-c —count 只打印匹配的行数,不显示匹配的内容
-f —file=File 从文件中提取模板。空文件中包含0个模板,所以什么都不匹配。
-h —no-filename 当搜索多个文件时,不显示匹配文件名前缀
-i —ignore-case 忽略大小写差别
-q —quiet 取消显示,只返回退出状态,0则表示找到了匹配的行
-l —file-with-matches 打印匹配模板的文件清单
-n —line-number 在匹配的行前面打印行号
-s —silent 不显示关于不存在或者无法读取文件的错误信息
-v —revert-match 反检索,只显示不匹配的行
-w —word-regexp 如果被<和>引用,就把表达式做为一个单词搜索。
-V —version 显示软件版本信息

规则表达式:

规则表达 含义
^ 锚定行的开始,如:‘^test’ 匹配所有以test开头的行
$ 锚定行的结束,如:‘test$’ 匹配所有以grep结尾的行
. 匹配一个非换行符的字符,如:‘gr.p’ 匹配gr后接一个任意字符,然后是p。
* 匹配零个或多个先前字符 如:'*test'匹配所有一个或多个空格后紧跟grep的行。

grep使用实例

实例1:查找进程

查找名字中包含dcs的所有进程

命令: ps -ef|grep dcs

输出:

[root@i- dcs-api]# ps -ef|grep dcs
root      1527     1  0 5月27 ?       00:14:22 java -jar ai-dcs.jar
root     17456 13312  0 10:58 pts/2    00:00:00 grep --color=auto dcs

第一条是查找出的进程;第二条结果是grep进程本身,并非真正要找的进程。

实例2: 查找指定进程的个数

命令:ps -ef|grep -c dsc

输出:

[root@i- dcs-api]# ps -ef|grep -c dcs
3

场景一:按照行号查看日志----过滤关键字附近的日志

前面介绍完了各种命令的使用,下面就让我们来实战一下吧。通常我们用grep拿到的日志很少,我们需要查看其附近的日志。

1.得到关键日志的行号:

cat -n normal.log |grep '推送接口'

输出:

[root@i- dcs-]# cat -n normal.log |grep '推送接口'
   290  2021.06.02 at 06:00:00 698 CST INFO [http-nio-8087-exec-3]-[traceId:] ReportCo

得到关键日志的行号是290行

2. 查询关键字前10行和后10行的日志:

cat -n normal.log |tail -n +289|head -n 20

其中,tail -n +289 表示查询289行之后的所有日志。head -n 20 则表示在前面的查询结果里再查前20条记录。

场景2: 如何按日期查询呢?

通常我们非常需要查找指定时间段的日志。

sed -n '/2021.06.02 at 06:00:00/,/2021.06.02 at 06:05:40/p' normal.log

需要特别说明的是:上面的两个日期必须是日志中打印出来的日志,否则无效。

1.关于日期的打印,可以先通过grep '2021.06.02 at 06:05:40' normal.log 来确保第4步可以拿到日志。这个根据时间段查询日志是非常有用的命令。

2.如果我们查找的日志很多,打印在屏幕上不方便查看,有两个办法:

(1)使用more和less命令,如: cat -n normal.log |grep '推送接口'|more,这样就分页打印了,通过点击空格键翻页。

(2) 使用>xxx.txt,将其保存到文件中,到时候可以拉下这个文件进行分析,如:cat -n normal.log |grep '推送接口' >test.txt

场景三:日志文件被压缩了如何查看呢?

在实际生产环境中,日志文件会被按时间或者按大小进行压缩。那么该如何查询被压缩的日志文件呢?如下有:normal-05-29-2021-1.log.gz 日志文件,我们可以通过

如下命令进行查看:

zcat -n normal-05-29-2021-1.log.gz |grep '推送'

输出结果是:

[root@i- dcs-api]# zcat -n normal-05-29-2021-1.log.gz |grep '推送'
2021.05.29 at 06:00:00 696 CST INFO [http-nio-8087-exec-1]-[traceId:] ReportController pu

场景四:显示日志文件的大小

一般情况下,我们都是直接通过ll命令来查询相关的日志

但是,这个命令有个不好的地方是显示的文件大小是按照字节数显示的,不太友好。通过命令:ll -h

总结

本文相信介绍了日常工作中查询日志所使用到的各种命令,满足日常的工作需要已经绰绰有余。


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
监控 Linux 开发者
如何在 Linux 中优雅的使用 head 命令,用来看日志简直溜的不行
`head` 命令是 Linux 系统中一个非常实用的工具,用于快速查看文件的开头部分内容。本文介绍了 `head` 命令的基本用法、高级用法、实际应用案例及注意事项,帮助用户高效处理文件和日志,提升工作效率。
35 7
|
2月前
|
Web App开发 存储 监控
iLogtail 开源两周年:UC 工程师分享日志查询服务建设实践案例
本文为 iLogtail 开源两周年的实践案例分享,讨论了 iLogtail 作为日志采集工具的优势,包括它在性能上超越 Filebeat 的能力,并通过一系列优化解决了在生产环境中替换 Filebeat 和 Logstash 时遇到的挑战。
137 14
|
3月前
|
SQL 存储 缓存
高基数 GroupBy 在 SLS SQL 中的查询加速
本文详细介绍了SLS中的高基数GroupBy查询加速技术。
140 19
|
4月前
|
存储 消息中间件 人工智能
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
早期 MiniMax 基于 Grafana Loki 构建了日志系统,在资源消耗、写入性能及系统稳定性上都面临巨大的挑战。为此 MiniMax 开始寻找全新的日志系统方案,并基于阿里云数据库 SelectDB 版内核 Apache Doris 升级了日志系统,新系统已接入 MiniMax 内部所有业务线日志数据,数据规模为 PB 级, 整体可用性达到 99.9% 以上,10 亿级日志数据的检索速度可实现秒级响应。
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
|
2月前
|
监控 网络协议 CDN
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
|
2月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控总结
Linux系统命令与网络,磁盘和日志监控总结
70 0
|
2月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控三
Linux系统命令与网络,磁盘和日志监控三
49 0
|
4月前
|
Ubuntu Linux Apache
在Linux中,如何使用logrotate命令管理日志文件?
在Linux中,如何使用logrotate命令管理日志文件?
|
3月前
crash命令 —— log
crash命令 —— log
|
4月前
|
SQL JavaScript 前端开发
【Azure 应用服务】Azure JS Function 异步方法中执行SQL查询后,Callback函数中日志无法输出问题
【Azure 应用服务】Azure JS Function 异步方法中执行SQL查询后,Callback函数中日志无法输出问题