doumaogui5937 2015-06-02 11:47 采纳率: 100%
浏览 652
已采纳

Golang:实现http服务器运行状况检查。 gocraft /健康

I want to check the health of my service,having the metrics of each endPoint. My service calls some other services and recieves a Json code, I make templates with it, and then I send it to a http.ResponseWriter.

I searched and I found this package "gocraft/health" but I didn't really understand how it works.

Is there any other way or package to generate metrics or should I just use "gocraft/health.

Thank you in advance

  • 写回答

1条回答 默认 最新

  • doujiao1949 2015-06-11 12:53
    关注

    Finally, I choose "gocraft/health", a great library.

    Example of usage:

    package main
    
    import (
        "log"
        "net/http"
        "os"
        "time"
    
        "github.com/gocraft/health"
    )
    
    //should be global Var
    var stream = health.NewStream()
    
    func main() {
        // Log to stdout!
        stream.AddSink(&health.WriterSink{os.Stdout})
        // Make sink and add it to stream
        sink := health.NewJsonPollingSink(time.Minute*5, time.Minute*20)
        stream.AddSink(sink)
        // Start the HTTP server! This will expose metrics via a JSON API.
        adr := "127.0.0.1:5001"
        sink.StartServer(adr)
    
        http.HandleFunc("/api/getVastPlayer", vastPlayer)
        log.Println("Listening...")
        panic(http.ListenAndServe(":2001", nil))
    }
    

    Per the initialization options above, your metrics are aggregated in 5-minute chunks. We'll keep 20 minutes worth of data in memory. Nothing is ever persisted to disk.

    You can create as many jobs as you want

    func vastPlayer(w http.ResponseWriter, r *http.Request) {
      job_1 := stream.NewJob("/api/getVastPlayer")
    
      ...
      ...
    
      if bol {
        job_1.Complete(health.Success)
      } else {
        job_1.Complete(health.Error)
      }
    }
    

    Once you start your app, this will expose metrics via a JSON API. You can browse the /health endpoint (eg, 127.0.0.1:5001/health) to see the metrics. You will get something like that:

    {
      "instance_id": "sd-69536.29342",
      "interval_duration": 86400000000000,
      "aggregations": [
        {
          "interval_start": "2015-06-11T02:00:00+02:00",
          "serial_number": 1340,
          "jobs": {
            "/api/getVastPlayer": {
              "timers": {},
              "events": {},
              "event_errs": {},
              "count": 1328,
              "nanos_sum": 140160794784,
              "nanos_sum_squares": 9.033775178022173E+19,
              "nanos_min": 34507863,
              "nanos_max": 2736850494,
              "count_success": 62,
              "count_validation_error": 1266,
              "count_panic": 0,
              "count_error": 0,
              "count_junk": 0
            },
            "timers": {},
            "events": {},
            "event_errs": {}
          }
        }
      ]
    }
    

    For more information and functionality check this link:

    https://github.com/gocraft/health

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿