Kubernetes日志转储一段时间



是否可以获得特定时间范围的Kubernetes日志?

我现在所能做的就是使用kubectl logs > dump.logcmd为单个pod转储大约最后一个小时的日志。

但由于调试原因,有必要获取上周的日志。我在Kubernetes日志中找不到任何这样做的能力。

唯一的想法是为日志集合附加一些像Kibana这样的外部服务,但也许内置的Kubernetes补救措施允许这样做?

谢谢。

...the last-hour log for the single pod

要检索最近1小时的日志,您可以执行kubectl logs <pod> --since=1h。从kubectl帮助中断言更多选项:

自=0s起:只返回比相对持续时间(如5s、2m或3h(更新的日志。默认为所有日志。自时间以来可能只有一个习惯于

--由于时间=":仅返回特定日期之后的日志(RFC3339(。默认为所有日志。只能使用自时间/自时间中的一个。

--tail=-1:要显示的最近日志文件的行数。默认为-1,不带选择器,显示所有日志行,否则为10,如果选择器为假如

AWK是Unix/Linux系统中用于这些类型的逻辑操作的一个很棒的工具

因此,要显示两个时间范围内的日志(例如:上午10点到上午11点(:

  1. 使用--since-timeawk

    kubectl logs pod_name --since-time=2022-04-30T10:00:00Z | awk '$0 < "2022-04-30 11:00:00"'

  2. 仅使用awk

    kubectl logs pod_name | awk '$0 > "2022-04-30 10:00:00"' | awk '$0 < "2022-04-30 11:00:00"'

注意:请根据日志输出使用in awk命令格式化date_time。

是否可以获得特定时间范围的Kubernetes日志?

是的,这是可能的,有很多不同的方式。

唯一的想法是为日志集合附加一些外部服务,比如Kibana,但也许内置的Kubernetes补救措施允许这样做?

两者皆有可能。然而,这完全取决于具体情况,哪一个会更好。Chris Doyle在他的评论中说得很好:

这将取决于您在集群中的日志保留和滚动策略,通常您需要考虑节点空间,尤其是当节点运行多个pod等时。一般来说,我更喜欢的策略是在节点侧有较短的保留期,并将注销推送到集中的解决方案,如您提到的elk、splunk、datadog、loki等

当然,内置的k8s工具也可以帮助您。您必须为具有正确标志的kubectl logs使用一个命令。您可以阅读手册中的所有操作:

这可能是最有趣的部分:

由于=0:只返回比相对持续时间(如5s、2m或3h(更新的日志。默认为所有日志。只能使用自时间/自时间中的一个。--由于时间="0":仅返回特定日期之后的日志(RFC3339(。默认为所有日志。只能使用自时间/自时间中的一个。

要显示上周的pod日志,您可以运行以下命令:

kubectl logs -n <pod_namespace (optional)>  <pod name> --since 168h

最新更新