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 工具顺序读文件,并将写到标准输出流中,会在控制台打印出来。
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 中使用图形和图表对数据进行可视化。
优点:支持多种查询条件,不会对线上的机器产生影响。可以存储长时间的日志。
缺点:有的分词不一定能够查到,需要选好分词,规范日志格式。日志有可能丢失。