zoukankan      html  css  js  c++  java
  • healthcheck 用于Go应用易于使用可扩展的健康检查库

    仓库:

    https://github.com/heptiolabs/healthcheck.git

    https://pkg.go.dev/github.com/heptiolabs/healthcheck#section-readme

    healthcheck 实现了一个开箱即用的Kubernetes liveness&& readiness prob 实现,我们可以直接拿来使用。已经包含了tcp,dns,http,Goroutine prob,同时也支持prometheus。

    demo 示例:

    package main
    
    import (
        "fmt"
        "github.com/heptiolabs/healthcheck"
        "github.com/prometheus/client_golang/prometheus"
        "github.com/prometheus/client_golang/prometheus/promhttp"
        "log"
        "net/http"
        "net/http/httptest"
        "net/http/httputil"
        "os"
        "os/signal"
        "strings"
        "syscall"
        "time"
    )
    
    func main() {
        registry := prometheus.NewRegistry()
        // Create a metrics-exposing Handler for the Prometheus registry
        // The healthcheck related metrics will be prefixed with the provided namespace
        health := healthcheck.NewMetricsHandler(registry, "example")
    
        // Add a readiness check against the health of an upstream HTTP dependency
        upstreamURL := "https://www.cnblogs.com/wangjq19920210"
    
        health.AddReadinessCheck("upstream-dep-http", healthcheck.HTTPGetCheck(upstreamURL, 500*time.Millisecond))
        // Implement a custom check with a 50 millisecond timeout.
        health.AddLivenessCheck("custom-check-with-timeout", healthcheck.Timeout(func() error {
            // Simulate some work that could take a long time
            time.Sleep(time.Millisecond * 100)
            return nil
        }, 500*time.Millisecond))
    
        // Expose the readiness endpoints on a custom path /healthz mixed into
        // our main application mux.
        mux := http.NewServeMux()
        mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
            w.Write([]byte("Hello, world!"))
        })
        mux.HandleFunc("/healthz", health.LiveEndpoint)
        mux.Handle("/metrics", promhttp.HandlerFor(registry, promhttp.HandlerOpts{}))
    
        // Sleep for just a moment to make sure our Async handler had a chance to run
        //time.Sleep(500 * time.Millisecond)
        go http.ListenAndServe("0.0.0.0:9402", mux)
    
        // Make a sample request to the /healthz endpoint and print the response.
        fmt.Println(dumpRequest(mux, "GET", "/healthz"))
        sigChan := make(chan os.Signal, 1)
        signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
        sig := <-sigChan
        log.Printf("shutting down %v signal received", sig)
    }
    
    func dumpRequest(handler http.Handler, method string, path string) string {
        req, err := http.NewRequest(method, path, nil)
        if err != nil {
            panic(err)
        }
        rr := httptest.NewRecorder()
        handler.ServeHTTP(rr, req)
        dump, err := httputil.DumpResponse(rr.Result(), true)
        if err != nil {
            panic(err)
        }
        return strings.Replace(string(dump), "
    ", "
    ", -1)
    }

    测试结果:

    #curl http://0.0.0.0:9402/metrics
    # HELP example_healthcheck_status Current check status (0 indicates success, 1 indicates failure)
    # TYPE example_healthcheck_status gauge
    example_healthcheck_status{check="custom-check-with-timeout"} 0
    example_healthcheck_status{check="upstream-dep-http"} 0
     
  • 相关阅读:
    【转载】SAP_ECC6.0_EHP4或SAP_ECC6.0_EHP5_基于Windows_Server_2008R2_和SQL_server_2008下的安装
    使用delphi 开发多层应用(二十四)KbmMW 的消息方式和创建WIB节点
    使用delphi 开发多层应用(二十三)KbmMW 的WIB
    实现KbmMw web server 支持https
    KbmMW 服务器架构简介
    Devexpress VCL Build v2014 vol 14.1.1 beta发布
    使用delphi 开发多层应用(二十二)使用kbmMW 的认证管理器
    KbmMW 4.50.00 测试版发布
    Basic4android v3.80 beta 发布
    KbmMW 认证管理器说明(转载)
  • 原文地址:https://www.cnblogs.com/wangjq19920210/p/15423824.html
Copyright © 2011-2022 走看看