Kubectl 日志-连续

kubectl logs <pod-id>

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

最后更正的问题。

166017 次浏览
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

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或从相对的时间以前开始。

等库伯斯转起豆荚,然后继续前进。

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

我需要访问一个长时间运行的分离舱的日志,而 -f几天前就开始播放日志了,这需要几个小时才能到达我需要查看的地方(仅仅是最后几分钟左右)。

有一个 --since=10m标志,但似乎不适合我。

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

如果你想从一个多播放器应用程序中获得日志流,你可以使用 沙丁鱼,例如:

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 就是 尾随来自吊舱 App2-v31-9pbpn 还有 App2-v31-q74wg的日志

Kubctl log-f = true [ pod-name ]-c [ Container-name ]

如果您只有一个容器在豆荚上,容器名称是不必要的,否则使用容器名称与-c 选项。 - f 即,follow 默认为 false。如果不将其设置为 true,您将获得容器日志的快照。

试试这个,

吊舱的尾部日志

Kubectl —— tail < “ no of lines”> log < “ pod _ name”>

例子 :

Kubectl —— tail 100 log app _ pod

可以使用-f 跟踪日志

kubectl logs -f <pod_name>

如果日志停止,最有可能的是豆荚崩溃,你能检查豆荚是否实际运行与否?检查年龄或者:

kubectl describe deploy/ds <deploy_or_ds_name>?

或者您也可以检查日志中的容器内豆荚有多个容器

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

建议

似乎您希望不使用“沉重的”第三方日志记录解决方案就可以从终端查看日志。

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


如何使用该工具(在几行)

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

您还可以从名称空间级别开始,一直到吊舱和容器日志——如下面的示例所示:

enter image description here


替代品

如果您不仅绑定到 CLI,而且仍然希望在本地运行,我建议在 镜头上运行。

如果希望从特定的命名空间获取日志,可以使用以下任一命令,

kubectl logs -n <NAMESPACE> -f <POD_NAME> -c <CONTAINER_NAME>

或者

kubectl logs -n <NAMESPACE> -p <POD_NAME> -c <CONTAINER_NAME> --previous=false

对于这里已经提出的其他建议,我想补充两点:

  1. 您可以使用 -l标志通过标签跟踪 pods 的日志,而不是获取单独的 pods 名称: kubectl logs -f -l app=cwagent-prometheus -n amazon-cloudwatch。如果没有匹配的吊舱,这个命令仍然会失效。
  2. 您可以使用类似于 主脑Foreman的东西将日志命令的 Procfile放在一起运行:
cloudwatch: kubectl logs -f -l app=cwagent-prometheus -n amazon-cloudwatch
egress: kubectl logs -f -l istio=egressgateway -n istio-ingress
extauth: kubectl logs -f -l context=api-gateway -n istio-ingress
external-dns: kubectl logs -f -l app=external-dns -n external-dns
ingress: kubectl logs -f -l istio=ingressgateway -n istio-ingress
istiod: kubectl logs -f -l app=istiod -n istio-system
ratelimit: kubectl logs -f -l app=ratelimit -n istio-ingress
redis: kubectl logs -f -l app.kubernetes.io/name=redis -n istio-ingress

使用这个 Procfile,您可以获得日志输出的颜色编码的聚合视图(这里没有显示颜色) :

$ OVERMIND_AUTO_RESTART=cloudwatch,external-dns,ingress,egress,extauth,ratelimit,istiod,redis \
overmind s \
-f Procfile-logs
system       | Tmux socket name: overmind-api-gateway-1mvHWIKJ47dOFnOZVLfWuO
system       | Tmux session ID: api-gateway
system       | Listening at ./.overmind.sock
ratelimit    | Started with pid 57088...
istiod       | Started with pid 57074...
ingress      | Started with pid 57061...
egress       | Started with pid 57036...
cloudwatch   | Started with pid 57031...
external-dns | Started with pid 57051...
redis        | Started with pid 57095...
extauth      | Started with pid 57041...

你可以把这个命令放在 Makefile中,这样你就可以像这样运行:

$ make logs

如果所有的吊舱都消失了,这个示例中的 OVERMIND_AUTO_RESTART会导致 overmind重新启动命令。

kubectl logs -f zk-app-0 --tail 10

此命令将从最后10行开始流日志。如果这里没有提到 tail,k8s 将传输所有可用的日志(即最后10MB 的日志或最后5次日志旋转)。

然而,有时我遇到这个命令的问题,日志流停止。然后按 ctrl-c 再次运行该命令。

从容器中的进程传输 stdout 和 stderr 的另一种方法是使用 kubectl 附加。

kubectl attach zk-app-0

这将附加到主容器并对控制台日志进行流处理。但是,在 kubectl 日志中不会出现任何额外的日志特性。在这种情况下,如果日志记录停止,只需在键盘上输入,它应该恢复。

把它们放在一起,你可能不想看到所有的旧历史记录,所以只看到最近的20行,并继续添加新的行(比如跟随)输出,像这样运行它:

kubectl logs --tail=20 -f container-name