关于 kubernetes:kubectl 日志 – 持续

kubectl logs - continuously

1
kubectl logs <pod-id>

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

编辑:最后更正了问题。


1
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 将引导您:

示例:

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

标志:

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

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


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

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

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


试试这个,

来自 pod 的尾日志

kubectl --tail <"no of lines"> 日志 <"pod_name">

示例:

kubectl --tail 100 日志 app_pod


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

1
2
3
4
5
6
7
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

的日志


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

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

尾原木

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

寻找成功指标

1
2
3
tail logfile | grep successful!
RESULT=$?
exit $RESULT


您可以使用 -f

跟踪日志

1
kubectl logs -f <pod_name>

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

1
kubectl describe deploy/ds <deploy_or_ds_name>?

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

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

建议

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

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

如何使用该工具(几行)

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

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

enter