循环获取 Kubernetes pods 的日志
Get logs of Kubernetes pods in a loop
我有兴趣获取名称中包含“test”但使用 json 和 jq 的多个 pods 的日志。第一步是找出包含该特定字符串的名称 - 在我的例子中,“test”:
kubectl get pods -n test -o json | jq '.items[] | select(.metadata.name|test("test"))| .metadata.name'
我在 Whosebug 上的某个人的帮助下得到了这个答案。
现在我想找出获取每个 pods 包含“test”名称的日志的命令。我想要类似以下命令的东西,但不幸的是这种方式不起作用,因为我猜第一个命令 return all pods 一次在多行上:
kubectl logs ``kubectl get pods -n test -o json | jq '.items[] | select(.metadata.name|test("test"))| .metadata.name'`` -n test
有什么方法可以通过一些额外的参数以这种方式获取日志以使其正常工作?
谢谢。
使用循环获取所有 pod 的日志,试试这个:
for pod in `kubectl get po -o json | jq '.items[] | select(.metadata.name|contains("test"))| .metadata.name' | sed 's/"//g'` ; do
echo $pod
kubectl logs $pod
done
总结您的所有选择
@Kun answer 是可行的解决方案,可以为您提供所有要输出的日志。为此+1。使用他的解决方案,您将实现您想要的,但我个人会考虑将日志重定向到文件以方便使用。日志可能(很可能会)很大 - 您应该可以选择单独查看它们。
为此,您可以使用@Eduardo 提示并安装 kubelogs
It is a bash script that uses your current kubectl context to
interactively select namespaces and multiple pods to download logs
from. It basically runs kubectl logs in a loop for all containers,
redirecting the logs to local files.
有时您可能想实时观看日志 - 在这种情况下 kubetail 是个不错的选择
Bash script that enables you to aggregate (tail/follow) logs from
multiple pods into one stream. This is the same as running "kubectl
logs -f " but for multiple pods.
还有一个付费解决方案可以满足更高级的需求(如果出于某种原因您不使用 ELK):SolarWinds Papertrail
SolarWinds® Papertrail™ is a cloud-hosted log management solution that
lets you live tail your logs from a central location. Using
Papertrail, you can view real-time log events from your entire
Kubernetes cluster in a single browser window.
When a log event is sent from Kubernetes to Papertrail, Papertrail
records the log’s contents along with its timestamp and origin pod.
You can view these logs in a continuous stream in your browser using
the Papertrail Event Viewer, as well as the Papertrail CLI client or
Papertrail HTTP API. Papertrail shows all logs by default, but you can
limit these to a specific pod, node, or deployment using a flexible
search syntax.
如果出于某些原因您可能想尝试一下,这是一篇很棒的文章如何使用:
How to “Live Tail” Kubernetes Logs
如果您将其包含在您的 deployment.yml
中,您还可以按应用程序名称获取日志,这将找到所有 pod 日志。
kubectl logs -l app=test -n test
我有兴趣获取名称中包含“test”但使用 json 和 jq 的多个 pods 的日志。第一步是找出包含该特定字符串的名称 - 在我的例子中,“test”:
kubectl get pods -n test -o json | jq '.items[] | select(.metadata.name|test("test"))| .metadata.name'
我在 Whosebug 上的某个人的帮助下得到了这个答案。
现在我想找出获取每个 pods 包含“test”名称的日志的命令。我想要类似以下命令的东西,但不幸的是这种方式不起作用,因为我猜第一个命令 return all pods 一次在多行上:
kubectl logs ``kubectl get pods -n test -o json | jq '.items[] | select(.metadata.name|test("test"))| .metadata.name'`` -n test
有什么方法可以通过一些额外的参数以这种方式获取日志以使其正常工作?
谢谢。
使用循环获取所有 pod 的日志,试试这个:
for pod in `kubectl get po -o json | jq '.items[] | select(.metadata.name|contains("test"))| .metadata.name' | sed 's/"//g'` ; do
echo $pod
kubectl logs $pod
done
总结您的所有选择
@Kun answer 是可行的解决方案,可以为您提供所有要输出的日志。为此+1。使用他的解决方案,您将实现您想要的,但我个人会考虑将日志重定向到文件以方便使用。日志可能(很可能会)很大 - 您应该可以选择单独查看它们。
为此,您可以使用@Eduardo 提示并安装 kubelogs
It is a bash script that uses your current kubectl context to interactively select namespaces and multiple pods to download logs from. It basically runs kubectl logs in a loop for all containers, redirecting the logs to local files.
有时您可能想实时观看日志 - 在这种情况下 kubetail 是个不错的选择
Bash script that enables you to aggregate (tail/follow) logs from multiple pods into one stream. This is the same as running "kubectl logs -f " but for multiple pods.
还有一个付费解决方案可以满足更高级的需求(如果出于某种原因您不使用 ELK):SolarWinds Papertrail
SolarWinds® Papertrail™ is a cloud-hosted log management solution that lets you live tail your logs from a central location. Using Papertrail, you can view real-time log events from your entire Kubernetes cluster in a single browser window.
When a log event is sent from Kubernetes to Papertrail, Papertrail records the log’s contents along with its timestamp and origin pod. You can view these logs in a continuous stream in your browser using the Papertrail Event Viewer, as well as the Papertrail CLI client or Papertrail HTTP API. Papertrail shows all logs by default, but you can limit these to a specific pod, node, or deployment using a flexible search syntax.
如果出于某些原因您可能想尝试一下,这是一篇很棒的文章如何使用: How to “Live Tail” Kubernetes Logs
如果您将其包含在您的 deployment.yml
中,您还可以按应用程序名称获取日志,这将找到所有 pod 日志。
kubectl logs -l app=test -n test