从kubectl logs -f的庞大日志中追踪最后几行

121

kubectl logs -f pod 显示从开头开始的所有日志。当日志非常大时,我们需要等待几分钟才能获取最后一条日志,这将成为一个问题。当远程连接时情况变得更糟。有没有办法只跟踪最后100行日志并实时查看它们?

5个回答

215
在一个集群中,最佳实践是通过聚合器将所有日志收集到一个单一的点,并使用专用工具对其进行分析。因此,在K8S中,日志命令相当基本。
但是,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上找到,其中一些工具包括:

8
另外,如果您需要带有时间戳的日志,则 --timestamps 也非常有用。 - surazzarus
我对这个东西不太熟悉,是否有官方建议如何聚合日志? - Arrow_Raider
fluentd,logstash,在谷歌上搜索其他。 - Nicola Ben
5
有没有办法查看日志开头?例如 --head=50 可以显示前50行日志吗?我运行了 kubectl logs -h 命令查看所有选项,但找不到返回日志开头的选项。 - Ram Patra

45

尝试使用kubectl logs -f pod --tail=10


12
从多个容器的 Pod 记录中获取尾行日志。
kubectl logs <pod name> --all-containers=true --tail=10

从应用程序中的 Pod 日志中获取尾行:

kubectl logs --selector app=<your application> --tail=10

(例如: 如果您的应用程序有3个pod,则上面命令的输出可以是30个日志,每个pod日志10个)

9
您可以使用这种方法来获取前10行。
kubectl logs my-pod-name  -n my-ns | head -n 10

2
他们正在寻找最后的100行,而不是第一行。 - Ascalonian

0
如果你正在测试什么东西,你也可以从结尾处跟踪日志:
kubectl logs my-pod-name --follow

这将像在Bash或其他Shell中运行tail -f一样工作。


这并没有回答问题,对于大型日志也会导致相同的问题。你应该考虑删除这个答案,否则它将被投票降低。 - fose

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接