tencent cloud

文档反馈

日志采集相关

最后更新时间:2021-12-03 15:47:23

    本文将提供在进行 构建深度学习容器镜像在 EKS 上运行深度学习 实践时可能遇到的常见问题解答。

    日志如何进行持久存储?

    因为 EKS 即用即消的特性,导致如果想要查看日志,必须当且仅当 Pod 还在 Running 状态时查看。一旦 Pod 状态变为 Completed ,将会出现如下报错:

    Error from server (InternalError): Internal error occurred: can not found connection to pod ***
    

    以下为您介绍能将日志持久存储的方法:

    重定向

    重定向方法最为简单,只需将 kubectl logs 输出到终端的 stdout 转向输出到文件中即可持久化存储。执行命令如下:

    kubectl logs -f tf-cnn >> info.log

    但使用重定向方法时需要注意,输出流不会流向终端,也就是说在终端上将无法看到日志滚到哪一步。如果在将命令输出保存到文件中的同时,还需要将内容也输出到屏幕,有如下两种方法:

    • 使用管道 + tee 命令,执行命令如下:
      kubectl logs -f tf-cnn |tee info.log
    • 使用 logsave 命令,也可以做到将命令输出保存到文件的同时将内容页输出到屏幕中,执行命令如下:
      logsave [-asv] info.log kubectl logs -f tf-cnn
      >?`logsave` 相较于`tee` 的好处是,`logsave` 每次输入会记录下时间,并制造间隔,观感上也更便于查找某一段日志。

    上述三条命令同时存在弊端,因为都是基于 kubectl logs 输出的重定向,使用时必须在 Running 状态时运行,起到的作用只是在 Completed 后依然能查看日志。
    重定向方法可适用于少量的日志,不存在大量的日志输出和检索需求的场景下。如果您的需求不高,那么推荐您使用重定向方法。

    配置日志采集

    在 EKS 中,可以通过环境变量和自定义资源(CRD)两种方式配置日志采集。

    1. 按照 使用环境变量配置日志采集 文档配置日志采集
      1. 如果使用密钥授权,可以新建一个 Opaque 类型的 Secret ,创建两个 key(SecretId 和 SecretKey),值分别是在 API 密钥 中获得的 SecretId 和 SecretKey
      2. 即可在开启日志采集中找到创建的 Secret ,并关联 SecretId 和 SecretKey 。
    2. 在控制台得到原始日志,切换表格展示并将 JSON 格式化。

    使用此方法将会出现一个问题,EKS 开启日志采集功能的原理,是将采集到的日志以 JSON 的形式发送到指定的消费端。而采集提供的 JSON 时间戳是秒级。

    将导致在控制台上查看的日志时间的粒度也是秒级,在检索分析端上看到的日志只能按秒级时间顺序,而更小尺度不能实现顺序输出。而有时候日志会在短时间大量输出,通常需要微秒级的精度。因此我们更推荐使用 CRD 配置方式。

    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持