痛点

在接触k8s一段时间以后.有个问题一直困扰着我. 线上日志是用graylog工具聚合的.但是存在延时15分钟的问题. 为了提高效率.想直接用kubectl命令行查看pod的日志. 然而线上分灰度与正式环境且一个服务会有多个pod实例运行.那么请求进来了 应该查看哪个pod的日志呢?

思考过程

在这里插入图片描述

1. 查看单个pod日志

查看一个pod日志的方法我知道:

kubectl logs [-f] [-n namspace] pod

还有一种方式是进入pod后查看应用内部的日志:

kubectl exec -it [-n namespace] pod bash

2. 查看多个pod的日志

那么,如果想查看多个pod中的日志呢? google一番,找到了这个方法:

1) 查看同一个deployment下的pod日志
kubectl logs -f deployment/<name-of-deployment>

该命令可以查看一个deployment下所有pod输出的日志.

2) 查看同一组标签下的pod日志

那么思维扩散一下. 我想同时查看两个在不同deployment的下日志?或者换个说法, 我对业务不熟悉.根本不知道pod在哪个deployment 哪个service下. 线上出了bug我要去定位.这时候怎么找pod日志?这时候我发现了一个可以通过pod的lable标签来输出日志的方法:
查看pod描述信息

kubectl describe pod XXX
kubectl describe pod api-55f5d8d49d-kzmcj

// output

Name:         api-55f5d8d49d-kzmcj
Namespace:    default
Priority:     0
Node:         172.16.6.7/172.16.6.7
Start Time:   Wed, 07 Apr 2021 15:16:36 +0800
Labels:       app=api
              configAppliedTime=20210407070043
              enable=true
              pod-template-hash=55f5d8d49d
              version=pro

... 省略

lable是每个pod的唯一标识符,所以以下命令:

kubectl logs -f -l app=api

可以查看所有带有app=api标签的pod日志

前提是我知道. 请求进入k8s集群后会先经过ingress-controller. 根据ingress中配置的规则找到service再由service负载到具体的pod.因为ingress-controller也是一个pod,由此联想到.是否可以找到一个所有ingress-controller都包含的lable标签. 通过kubeclt logs -f -l 实时跟踪所有ingress-controller的日志. 这时只需要找到我们的请求在ingress-controller中的日志信息. 就能知道请求去到了哪个命名空间哪个service.在跟踪这个service下的所有pod日志即可.
需要注意的是kubectl logs -f 结合标签选择器看pod日志. 对于实时跟踪的pod数量有限制:

kubectl logs -f -l "env=hz-k8s-ganjiang,app=im-agent-web"
error: you are attempting to follow 20 log streams, but maximum allowed concurrency is 5, use --max-log-requests to increase the limit

此时只需要带上 --max-log-requests 参数即可:

kubectl logs -f --max-log-requests=n -l "env=hz-k8s-ganjiang,app=im-agent-web"

总结

查看多个pod的日志的方式有两种

  • 查看deploy日志
  • 查看拥有一组相同lable的日志
kubectl logs -f deployment/<name-of-deployment>
kubectl logs -f -l "lable1=value1,lable2=value2"

其实查看一组pod的日志的问题本质是如何筛选出你想要的一组pod.进一步扩散思维.我们想知道的在kebenetes中如何选择一组对象资源.这就涉及到kubenetes的选择器. 包括标签选择器和对象选择器.后续将会介绍.
彩蛋: https://www.bilibili.com/video/BV1Hh411F7Wt/?spm_id_from=333.337.search-card.all.click

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐