繁体   English   中英

Kube.netes 日志转储一段时间

[英]Kubernetes logs dump for some time range

是否可以获取特定时间范围内的 Kube.netes 日志?

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

但是出于调试的原因,有必要获取上周的日志。 我无法在 Kube.netes 日志中找到执行此操作的任何功能。

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

谢谢你。

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"'

注意:请根据日志 output 在 awk 命令中格式化 date_time。

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

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

--since=0s:仅返回比相对持续时间(如 5s、2m 或 3h)更新的日志。 默认为所有日志。 只能使用 since-time / since 之一。

--since-time='':仅返回特定日期之后的日志 (RFC3339)。 默认为所有日志。 只能使用 since-time / since 之一。

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

是否可以获得专用时间范围内的 Kubernetes 日志?

是的,这是可能的,而且有许多不同的方式。

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

两者都是可能的。 但是,这一切都取决于具体情况,哪种情况会更好。 Chris Doyle在他的评论中说得很好:

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

当然,内置的 k8s 工具也能帮到你。 您必须使用带有正确标志的kubectl logs的命令。 您可以阅读手册中的所有选项:

这可能是最有趣的部分:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM