查找线上日志却不小心引起了事故

本文讲述了因使用VI命令查看大日志文件导致容器重启的事故,强调不建议用VI查看大文件,因为这可能导致内存占用过高,影响系统性能。推荐使用less、tail、head等命令来查看日志,并介绍了ELK栈作为更优雅的线上日志分析方案,它能在不影响线上服务的情况下提供强大的日志分析能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

欢迎关注我的公众号:涂鸦图开心

欢迎关注我的公众号:涂鸦图开心

1、查找线上日志却不小心引起了事故。

小赵为了排查线上的一个问题,登录到 DOCKER 容器上,用 VI 命令打开一个日志文件,过了一会儿,发现了告警:容器重启!一个查看日志的命令却导致了机器重启,这是为什么呢?

2、不建议用 vi 命令查看大文件

VI 工具的定位是编辑器,在加载文件的时候,需要将其全部加载到内存中。如果文件太大,为了将文件全部加载到内存中,就需要消耗的大量的内存空间,可能会影响部署在机器上的其他应用,严重导致机器卡顿。而容器有健康检查,如果检测到容器不能提供服务时,就会把自动将容器重启,这就导致了上面的事故的发生。

通过 TOP 命令发现,cat 命令加载大文件,进程占用内存和 CPU 并不多,但是会导致命令行 iterms 程序的CPU使用率暴增,也就是说 cat 命令加载大文件也会占用机器大量的 CPU,可能也会导致机器变得卡顿。

根据 cat 帮助文档上面所说:

The cat utility reads files sequentially, writing them to the standard output.

cat 工具顺序读文件,并将写到标准输出流中,会在控制台打印出来。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210509231548983.png?x-oss-process=i在这里插入图片描述
在日志文件很大的情况下,如果将日志文件加载到内存中,将造成系统卡死的情况。

比如用 VI 命令加载一个大小在700M左右的文件,发现 VI 的内存占用将近 1 GB:
image.png那我不加载整个文件,我只想搜索文件中的内容行么:
对同一个大文件进行grep操作,结果发现CPU使用率暴涨:原因是grep是全文搜索

grep ‘keyword’ log.file

image.png
注意 more 命令从前向后读取文件,因此在启动时就加载整个文件。

3、建议使用下面的命令查看日志

less,tail,head

1)less 可以随意查看文件,但是不会加载整个文件,需要注意的是,less 命令也有编辑模式,也会将整个日志文件加载:

less -v log.file

2)tail 和 head
详细用法自行搜索。

所以总结一下:正确的姿势在机器上查看线上的日志
a) 查看日志文件之前,先检查它的大小。
b)较小的日志,可以使用常见的命令,比如 VI,GREP,CAT 等
c)太大的日志文件,不适合使用 VI,CAT,GREP 等命令进行查看,可以使用 tail ,head,less 等。线上不建议使用加载整个日志文件的命令,比如 VI , CAT。

也可以考虑把日志文件下载到本地,但是会占用机器的带宽。

4、如何优雅地查看线上日志

敬畏线上:在线上执行命令是比较危险的操作,一般不建议直接登录机器去查看日志,目前公司里面使用 ELK 搭建实时日志分析平台。

ELK 到底是什么呢?“ELK”是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash 和 Kibana。Elasticsearch 是一个搜索和分析引擎。Logstash 是服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到诸如 Elasticsearch 等“存储库”中。Kibana 则可以让用户在 Elasticsearch 中使用图形和图表对数据进行可视化。

优点:支持多种查询条件,不会对线上的机器产生影响。可以存储长时间的日志。
缺点:有的分词不一定能够查到,需要选好分词,规范日志格式。日志有可能丢失。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值