在日常筛查日志时,通常我们会使用ELK工具进行查询和过滤。但如果没有工具支持,我们可以通过其他方式进行操作。
一种常见的方法是通过运维导出日志,然后使用grep、sed、awk等命令结合正则表达式或编写Shell脚本进行分析和筛选。
使用grep和awk
举个例子,通常我们可以使用以下命令来查找错误日志并输出相关的前后几行:
1 |
|
在某些情况下,我们可能需要根据时间戳来筛选日志。我们可以使用grep的-m参数来限制匹配的行数,然后使用awk来提取时间戳。
以下是一个示例:
1 |
|
这个脚本首先使用grep -m 1 ‘nick’来查找匹配’nick’的行,然后使用awk ‘{print $1}’来提取时间戳,最后使用xargs -I {} grep -A 5 {} error.log来查找匹配时间戳的行并输出其前后5行。 这个脚本的优点是简单易用,缺点是只适用于简单的情况。如果日志格式复杂,或者需要更复杂的筛选条件,可能需要使用其他工具或脚本来完成。
使用sed
sed是一种流编辑器命令,它是文本处理中非常中的工具,能够完美的配合正则表达式使用。使用sed命令选定行的范围语法,既是逗号语 命令如下所示:
1 |
|
该sed命令含义是选定行范围:从第一行“2024-05-01 14:30:00”开始,到第一行“2024-05-01 18:00:00”结束
命令对比
sed命令运行时间跟grep相近,但是sed命令对时间段适应性较好。如果时间段扩大,grep命令修改较大,而sed命令修改较小。
总结
grep和sed命令都是常用的文本处理工具,但是它们在处理时间戳时,grep命令的-C参数和awk命令的xargs -I {} grep -A 5 {} error.log命令可以更好的实现时间戳的筛选,而sed命令则更适合时间段的筛选。