【发布时间】:2019-01-20 22:27:24
【问题描述】:
kubectl logs -f pod 从头开始显示所有日志,当日志很大时会出现问题,我们必须等待几分钟才能获取最后一个日志。远程连接时变得更加糟糕。有没有一种方法可以跟踪最后 100 行日志的日志并跟踪它们?
【问题讨论】:
标签: kubernetes tail kubectl
kubectl logs -f pod 从头开始显示所有日志,当日志很大时会出现问题,我们必须等待几分钟才能获取最后一个日志。远程连接时变得更加糟糕。有没有一种方法可以跟踪最后 100 行日志的日志并跟踪它们?
【问题讨论】:
标签: kubernetes tail kubectl
在集群中,最佳做法是通过聚合器将所有日志收集在一个点中,并使用专用工具对其进行分析。由于这个原因,在 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 也很有帮助
--head=50 会告诉我日志的前 50 行?我确实运行了kubectl logs -h 来查看所有选项,但找不到返回日志头的选项。
试试kubectl logs -f pod --tail=10
【讨论】:
从具有多个容器的 pod 的日志中获取尾行。
kubectl logs <pod name> --all-containers=true --tail=10
从应用程序中的 pod 日志中获取尾行:
kubectl logs --selector app=<your application> --tail=10
(例如:如果您的应用程序有 3 个 pod,则上述命令的输出可以是 30 个日志,每个 pod 日志 10 个)
【讨论】:
你可以用这种方式得到前 10 行
kubectl logs my-pod-name -n my-ns | head -n 10
【讨论】:
如果你正在测试某些东西,你也可以从头开始跟踪日志:
kubectl logs my-pod-name --follow
这就像在 bash 或其他 shell 中运行 tail -f 一样。
【讨论】: