【问题标题】:Tailing few lines from huge logs of kubectl logs -f从 kubectl logs -f 的大量日志中拖尾几行
【发布时间】:2019-01-20 22:27:24
【问题描述】:

kubectl logs -f pod 从头开始​​显示所有日志,当日志很大时会出现问题,我们必须等待几分钟才能获取最后一个日志。远程连接时变得更加糟糕。有没有一种方法可以跟踪最后 100 行日志的日志并跟踪它们?

【问题讨论】:

    标签: kubernetes tail kubectl


    【解决方案1】:

    在集群中,最佳做法是通过聚合器将所有日志收集在一个点中,并使用专用工具对其进行分析。由于这个原因,在 K8S 中,log 命令是非常基础的。

    无论如何kubectl logs -h 显示了一些对您有用的选项:

    # Display only the most recent 20 lines of output in pod nginx
    kubectl logs --tail=20 nginx
    
    # Show all logs from pod nginx written in the last hour
    kubectl logs --since=1h nginx
    

    在 github 上提供了一些满足您(以及更多)需求的工具,其中一些是:

    【讨论】:

    • 如果您需要带有时间戳的日志,--timestamps 也很有帮助
    • 刚接触这个东西,有没有关于如何聚合日志的官方建议?
    • 流利的,logstash,在谷歌中寻找其他。
    • 有没有办法查看日志的开头?就像--head=50 会告诉我日志的前 50 行?我确实运行了kubectl logs -h 来查看所有选项,但找不到返回日志头的选项。
    【解决方案2】:

    试试kubectl logs -f pod --tail=10

    【讨论】:

      【解决方案3】:

      从具有多个容器的 pod 的日志中获取尾行。

      kubectl logs <pod name> --all-containers=true --tail=10
      

      从应用程序中的 pod 日志中获取尾行:

      kubectl logs --selector app=<your application> --tail=10
      

      (例如:如果您的应用程序有 3 个 pod,则上述命令的输出可以是 30 个日志,每个 pod 日志 10 个)

      【讨论】:

        【解决方案4】:

        你可以用这种方式得到前 10 行

        kubectl logs my-pod-name  -n my-ns | head -n 10
        

        【讨论】:

        • 他们正在寻找最后 100 行,而不是第一行
        【解决方案5】:

        如果你正在测试某些东西,你也可以从头开始跟踪日志:

        kubectl logs my-pod-name --follow
        

        这就像在 bash 或其他 shell 中运行 tail -f 一样。

        【讨论】:

        • 这不会回答 OP 的问题,并且会导致大型日志出现同样的问题。您应该考虑删除此答案,否则它将被否决
        猜你喜欢
        • 2017-01-16
        • 2019-07-01
        • 2017-04-29
        • 2021-12-29
        • 2018-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多