是否可以获得特定时间范围的Kubernetes日志?
我现在所能做的就是使用kubectl logs > dump.log
cmd为单个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点(:
-
使用
--since-time
和awk
kubectl logs pod_name --since-time=2022-04-30T10:00:00Z | awk '$0 < "2022-04-30 11:00:00"'
-
仅使用
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