如何在kubernetes集群中拖尾所有日志

Ale*_*lls 2 kubernetes kubectl amazon-eks aws-eks eks

我尝试了以下命令:

kubectl logs --tail
Run Code Online (Sandbox Code Playgroud)

我收到此错误/帮助输出:

Error: flag needs an argument: --tail


Aliases:
logs, log

Examples:
  # Return snapshot logs from pod nginx with only one container
  kubectl logs nginx

  # Return snapshot logs for the pods defined by label app=nginx
  kubectl logs -lapp=nginx

  # Return snapshot of previous terminated ruby container logs from pod web-1
  kubectl logs -p -c ruby web-1

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

  # 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

  # Return snapshot logs from first container of a job named hello
  kubectl logs job/hello

  # Return snapshot logs from container nginx-1 of a deployment named nginx
  kubectl logs deployment/nginx -c nginx-1
Run Code Online (Sandbox Code Playgroud)

嗯,我只想查看所有日志,这不是常见的事情吗?如何跟踪集群的所有日志?

Jan*_*erg 8

kail从最上面的答案来看,仅限 Linux 和 macOS,但Stern也适用于 Windows。

它可以基于名称的正则表达式匹配进行 pod 匹配,然后可以跟踪日志。

要跟踪所有 pod,而不打印default命名空间中的任何先前日志,您可以运行例如:

stern ".*" --tail 0
Run Code Online (Sandbox Code Playgroud)

对于绝对的一切,包括。命名空间中发生的内部事情kube-system

stern ".*" --all-namespaces --tail 0
Run Code Online (Sandbox Code Playgroud)

或者,您可以例如跟踪所有login-.*容器并获取一些上下文

stern "login-.*" --tail 25
Run Code Online (Sandbox Code Playgroud)


Ant*_*ten 5

如果您不介意使用第三方工具,请kail按照您的描述进行操作。

从所有匹配的容器的所有容器中流式传输日志。[...]不带参数的kail匹配群集中的所有pod。


jbn*_*dlr 1

我几乎没有见过有人从整个集群中提取所有日志,因为您通常要么需要日志来手动搜索某些问题,要么遵循 ( -f) 例程,要么收集审核信息,要么将所有日志流式传输到日志接收器以供其准备监控(例如普罗米修斯)。

但是,如果需要获取所有日志,那么使用该--tail选项并不是您想要的(tail仅显示某个日志源的最后几行,并避免将单个日志源的整个日志历史记录溢出到您的终端) )。

对于 kubernetes,您可以使用您选择的语言(bash、Python 等)编写一个简单的脚本来kubectl get all --show-all --all-namespaces迭代 pod 来运行kubectl -n <namespace> logs <pod>;但请注意,一个 Pod 中可能有多个容器,每个容器都有单独的日志,并且还记录集群节点本身、部署中的状态更改、更改的额外元信息、卷配置等。

这可能就是从整个集群中提取所有日志的情况很少见的原因,因此没有简单(快捷)的方法来做到这一点。