使用springboot应用程序在浏览器中传输Kubernetes Pod日志流

ru9i0ody  于 2023-03-07  发布在  Kubernetes
关注(0)|答案(1)|浏览(148)

嗨,我想流Kubernetes吊舱日志到浏览器用户界面。这是可能的吗?任何样本代码,我们可以得到?
我的API正在Spring Boot应用程序中运行,当有人调用我的API时,必须通过API将pod日志推送到客户端。怎么办?

p1tboqfb

p1tboqfb1#

    • 备选案文1**

编写将请求Kubernetes中API服务器的应用程序代码,如Kubernetes Jmeter 板,以获取日志
您可以根据需要使用sprint-boot或其他客户端K8s库。

func main() {
    config, err := clientcmd.BuildConfigFromFlags("", "")
    if err != nil {
        panic(err)
    }

    clientset, err := kubernetes.NewForConfig(config)
    if err != nil {
        panic(err)
    }

    namespace := "default"
    podName := "test-pod"

    podLogOpts := &kubernetes.PodLogOptions{
        Container: "test-container",
    }
    req := clientset.CoreV1().Pods(namespace).GetLogs(podName, podLogOpts)
    podLogs, err := req.Stream(context.Background())
    if err != nil {
        panic(err)
    }
    defer podLogs.Close()

    // Print the logs
    buf := make([]byte, 1024)
    for {
        n, err := podLogs.Read(buf)
        if err != nil {
            panic(err)
        }
        fmt.Print(string(buf[:n]))
    }
}

如果您有大量用户,则不是一个可扩展的选项。

    • 备选案文2**
    • 如果您希望保存日志,请将其保留几天**

您可以使用Fluentd或一些简短的或日志收集器(Graylog也在那里),并将日志推送到Elasticsearch数据库。
使用您喜欢的语言编写代码,使用您正在寻找的Query & Search选项从elasticsearch中获取数据。

    • Go Lang**(刚刚注意到您提到了Sprint-boot,但很抱歉您至少不能理解Java家伙)
func main() {
    // Create a connection to ES
    client, err := elastic.NewClient(elastic.SetURL("http://localhost:9200"))
    if err != nil {
        log.Fatalf("Failed to connect to Elasticsearch: %v", err)
    }

    // Search to fetch logs
    searchService := client.Search().Index("logs").Type("log")
    searchService.Sort("@timestamp", false)
    searchService.Size(10)

    // Search and get the results
    result, err := searchService.Do()
    if err != nil {
        log.Fatalf("Failed to search: %v", err)
    }

    // Results
    for _, hit := range result.Hits.Hits {
        log.Printf("Log: %s", hit.Source)
    }
}

您可以使用WebSocket流式传输日志Browser,以便获得实时快速日志。

    • 苏丹**
const socket = new WebSocket("ws://localhost:8080/logs");

socket.onmessage = function(event)

相关问题