当前位置: 首页 > 面试题库 >

如何使用Golang从Kubernetes获取日志?

韦俊英
2023-03-14
问题内容

我正在寻找如何使用golang从Kubernetes集群中的Pod获取日志的解决方案。我看过“
https://github.com/kubernetes/client-
go
”和“
https://godoc.org/sigs.k8s.io/controller-
runtime/pkg/client ”,但听不懂如何将它们用于此目的。除了日志外,我在获取K8S中的Pod或任何其他对象的信息方面没有任何问题。

例如,我正在使用“ https://godoc.org/sigs.k8s.io/controller-
runtime/pkg/client#example-Client–
Get ”中的Get()来获取K8S职位信息:

found := &batchv1.Job{}
err = r.client.Get(context.TODO(), types.NamespacedName{Name: job.Name, Namespace: job.Namespace}, found)

请分享当今您如何获取Pod的日志。任何建议,将不胜感激!


问题答案:

这是我们最终使用client-go库的结果:

func getPodLogs(pod corev1.Pod) string {
    podLogOpts := corev1.PodLogOptions{}
    config, err := rest.InClusterConfig()
    if err != nil {
        return "error in getting config"
    }
    // creates the clientset
    clientset, err := kubernetes.NewForConfig(config)
    if err != nil {
        return "error in getting access to K8S"
    }
    req := clientset.CoreV1().Pods(pod.Namespace).GetLogs(pod.Name, &podLogOpts)
    podLogs, err := req.Stream()
    if err != nil {
        return "error in opening stream"
    }
    defer podLogs.Close()

    buf := new(bytes.Buffer)
    _, err = io.Copy(buf, podLogs)
    if err != nil {
        return "error in copy information from podLogs to buf"
    }
    str := buf.String()

    return str
}

希望对您有所帮助。请分享您对如何从Kubernetes的吊舱中获取日志的想法或解决方案。



 类似资料:
  • 我正在寻找如何使用Golang从Kubernetes集群中的一个pod获取日志的解决方案。我查看了“https://github.com/kubernetes/client-go”和“https://godoc.org/sigs.k8s.io/controller-runtime/pkg/client”,但不理解如何将它们用于此目的。在K8S中,除了日志之外,我没有任何问题可以获取pod或任何其他

  • 问题内容: 我从ResultSet获取Date对象时遇到问题。在数据库中,它具有一个值(例如2014-08-01),并且从resultSet获取它之后,它具有另一个值(2014-08-31)。我知道ResultSet的getDate方法返回java.sql.Date,但是我尝试了一些解决方案,例如: 或 但问题是相同的。如果尝试 ,则抛出NullPointerException。 有人可以解释吗?

  • 我已经在我的Kubernetes集群上用Fluent-bit配置了EFK堆栈。我能看到基班那的原木。 我也部署了nginx pod,我可以看到这个nginx pod的日志也在Kibana。但所有日志数据都发送到一个字段“log”,如下所示。 我如何将每个字段提取到一个单独的字段。在这个问题中已经有一个fluentd的解决方案。Kibana-如何从现有的Kubernetes日志中提取字段 从这里(h

  • 问题内容: 因此,我找到了一些代码来帮助我开始使用Go(golang)进行反射,但是我很难获取基础值,因此我基本上可以从结构及其字段中创建a 。 最终,我想将结果设为,但是这个问题有点使我受阻。 我目前拥有的代码: 运行代码的输出: 据我了解,FirstName和LastName的输出是实际的reflect.Value对象,但对于字符串,value上的String()方法仅输出基础String。我

  • 问题内容: 我有一个JSON对象,其中有一个字段是生日日期: 但是该方法在JSONObject中不存在。 如何在用户对象中设置出生日期? 问题答案: 您可能会喜欢以下内容, 希望对您有所帮助:)

  • 问题内容: 使用聚合,我使用golang加入了两个mongodb集合。结果如下所示:- 输出:- 此 输出 由以下golang代码获取:- 问题是: -我只需要的 不是 了。在上面显示的输出中意味着在其中显示数据,但是我只需要像这样的值:- 但它正在显示数据。如何获得输出中数据的计数值。先感谢您。 问题答案: 因此,您的汇总实际上返回了该字段中的所有文档,该文档隐含了结果的数量,您可以使用内置函数