【问题标题】:kubectl logs - continuouslykubectl 日志 - 连续
【发布时间】:2017-01-20 03:58:34
【问题描述】:
kubectl logs <pod-id>

从我的部署中获取最新日志 - 我正在处理一个错误并有兴趣了解运行时的日志 - 如何获得连续的日志流?

编辑:最后更正了问题。

【问题讨论】:

    标签: kubernetes google-kubernetes-engine kubectl


    【解决方案1】:

    建议

    您似乎希望在不使用“繁重”的第 3 方日志记录解决方案的情况下从终端查看日志。

    为此,我会考虑使用K9S,这是一个很棒的 CLI 工具,可以帮助您控制集群 - 查看不同的 k8s 资源、在工作负载之间导航、深入了解日志并持续观察它们。


    如何使用该工具(几行)

    在当前终端中设置 K8S 上下文后,您只需输入 k9s 即可点击仪表板。从那里,您可以通过键入 ":" 和资源名称来键入要查看的资源(服务、部署、pod..)。

    您也可以从命名空间级别开始,一直到 pod 和容器日志 - 如下例所示:


    替代品

    如果您不仅绑定到 CLI,还想在本地运行,我建议您使用 Lens

    【讨论】:

      【解决方案2】:

      您可以使用 -f 跟踪日志

      kubectl logs -f <pod_name>
      

      如果日志停止很可能是 pod 崩溃了,你能检查 pod 是否真的在运行吗?检查年龄可能或:

      kubectl describe deploy/ds <deploy_or_ds_name>?
      

      或者你也可以在有多个容器的情况下查看 pod 内容器的日志

      kubectl logs -f <pod_name> -c <container_name> 
      

      【讨论】:

        【解决方案3】:
        kubectl logs -f <pod-id>
        

        您可以使用-f 标志:

        -f, --follow=false: Specify if the logs should be streamed.

        https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#logs

        【讨论】:

        • 服务日志或除 pod 之外的任何内容呢?
        • 这工作了很短的时间,然后日志停止。我必须按 ctrl-c 才能退出 kubectl,然后重新启动它们。这会显示更多日志,但会再次停止。任何人都知道为什么日志显然仍然是由 pod 生成的,但它们会在随机点停止吗?
        【解决方案4】:

        试试这个,

        来自 pod 的尾日志

        kubectl --tail 日志

        示例

        kubectl --tail 100 记录 app_pod

        【讨论】:

          【解决方案5】:

          kubctl 日志 -f=true [pod-name] -c [container-name]

          如果您在 pod 上只有一个容器,则不需要容器名称,否则使用带有 -c 选项的容器名称。 -f 即默认情况下跟随为假。如果您不将其设置为 true,您将获得容器日志的快照。

          【讨论】:

            【解决方案6】:

            如果您想从多 pod 应用中获取日志流,您可以使用 kubetail,例如:

            kubectl get pods
            
            NAME                   READY     STATUS    RESTARTS   AGE
            app2-v31-9pbpn         1/1       Running   0          1d
            app2-v31-q74wg         1/1       Running   0          1d
            
            kubetail app2
            

            使用该命令,kubetail 跟踪 pod app2-v31-9pbpn app2-v31-q74wg的日志/em>

            【讨论】:

              【解决方案7】:

              等待 kubes 启动 pod 然后继续...

              k8s_pod=some_pod
              kubectl get pods -w $k8s_pod | while read LOGLINE
              do
                 [[ "${LOGLINE}" == *"Running"* ]] && pkill -P $$ kubectl
              done
              

              尾日志

              for line in $(kubectl get pods | grep $k8s_pod | awk '{print $1}'); do
                  kubectl logs -f $line | tee logfile
              done
              

              寻找成功指标

              tail logfile | grep successful! 
              RESULT=$?
              exit $RESULT
              

              【讨论】:

              • '成功!'可能需要根据您的 pod 进行更改。
              • 我从其他几个 stackoverflow 帖子中提取了前两部分,所以我不能完全归功于这些,但我希望这个组合能很好地服务于其他人......
              【解决方案8】:

              我需要访问一个长时间运行的 pod 的日志,-f 从几天前开始流式传输日志,这需要几个小时才能到达我需要查看的位置(仅在最后几分钟左右)。

              有一个 --since=10m 标志,但这似乎对我不起作用。

              奇怪的是--tail=100,其中100 是要显示的最近行数。

              【讨论】:

                【解决方案9】:

                kubectl logs --help 将指导您:

                例子:

                # Begin streaming the logs of the ruby container in pod web-1
                kubectl logs -f -c ruby web-1
                

                标志:

                -f, --follow[=false]: Specify if the logs should be streamed.
                

                您也可以添加--since=10m 或者从相对时间之前开始。

                【讨论】:

                • 一个 pod 中可以有多个容器吗?
                • @AlexanderMills 是的,这是"sidecar" pattern
                猜你喜欢
                • 2021-02-09
                • 1970-01-01
                • 1970-01-01
                • 2023-03-17
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2019-04-25
                • 2017-05-07
                相关资源
                最近更新 更多