草庐IT

Golang : implements http server health checking. gocraft/健康

coder 2023-06-30 原文

我想检查我的服务的健康状况,了解每个端点的指标。 我的服务调用其他一些服务并接收 Json 代码,我用它制作模板,然后将它发送到 http.ResponseWriter。

我搜索并找到了这个包“gocraft/health”,但我并不真正理解它是如何工作的。

是否有任何其他方法或包来生成指标,或者我应该只使用“gocraft/health。

提前致谢

最佳答案

最后,我选择了“gocraft/health”,这是一个很棒的库。

使用示例:

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))
}

根据上面的初始化选项,您的指标以 5 分钟为单位进行汇总。我们将在内存中保留 20 分钟的数据。没有任何东西被持久化到磁盘上。

你可以创造任意多的工作

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)
  }
}

启动您的应用后,这将通过 JSON API 公开指标。您可以浏览 /health 端点(例如,127.0.0.1:5001/health)以查看指标。你会得到类似的东西:

{
  "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": {}
      }
    }
  ]
}

有关更多信息和功能,请查看此链接:

https://github.com/gocraft/health

关于Golang : implements http server health checking. gocraft/健康,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30595236/

有关Golang : implements http server health checking. gocraft/健康的更多相关文章

  1. 又是DNA甲基化,孕期母亲的压力会影响儿童健康 - 2

    产前母亲的生活压力事件与后代神经发育不良相关联。研究人员表示,关联的生物学机制大部分是未知的,但在体内发生的一种化学反应——DNA甲基化,即一个小分子甲基被添加到DNA上——可能起着一定作用。这些发现可为了解胎儿环境如何可能影响神经发育、代谢和免疫功能提供新发现。辛辛那提大学的一项新研究探索了怀孕期间母亲的压力对婴儿神经发育的影响。该研究分析了12个独立队列超过5,500名参与者的相关数据。“我们的研究是第一个利用如此大规模样本量分析整个表观基因组的,我们不只关注压力相关基因,还探索了所有可研究的表观基因组位点,”辛辛那提大学医学院环境和公共卫生科学系的AnnaRuehlmann博士说。该研究

  2. 华为OD机试Golang解题 - 任务总执行时长 - 2

    华为Od必看系列华为OD机试全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理已参加机试人员的实战技巧华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典文章目录华为Od必看系列使用说明本期题目:任务总执行时长题目输入输出示例一输入输出说明go代码实现华为OD其它语言版本

  3. 聚焦慕思欧洲设计中心,用设计谱写健康睡眠新篇章 - 2

    4月20日,在意大利米兰,多位欧洲顶尖设计师齐聚ADI博物馆,共同见证“梦享之美”——慕思欧洲设计中心暨设计国际梦之队成立发布会的盛大召开。慕思此次发布会特地选定在米兰国际家具展期间,而这是公认的世界三大家具展之一,自1961年开始举办,被誉为世界家具设计及展示的“奥斯卡”与“奥林匹克”盛会,是全球家具、家居、建筑等流行的风向标。此次慕思在设计上的“两大动作”,让慕思在整个国际设计圈都吸引了大量关注和讨论。相信对其未来进军米兰家具展也具有深远的意义。慕思设计国际梦之队首发阵容成立设计国际梦之队,保持在设计上一路引领此次在米兰召开的发布会,慕思除了将米兰作为世纪梦新品全球发布的第三站外,最主要的

  4. 【编程实践】Golang 获取HTTP请求的IP地址 - 2

    目录Golang获取HTTP请求的IP地址HTTP的发展历史3,HTTP所在的网络层次4,HTTP请求与响应

  5. Golang SQL 查询语法 - 2

    关闭。这个问题需要debuggingdetails.它目前不接受答案。编辑问题以包含desiredbehavior,aspecificproblemorerror,andtheshortestcodenecessarytoreproducetheproblem.这将有助于其他人回答问题。关闭4年前。Improvethisquestion在golang代码中使用sql查询获取语法错误。golang中此SQL查询所需的正确语法:rows,errQuery:=dbCon.Query("SELECTB.LatestDate,A.SVRNameASServerName,A.DRIVE,A.Tot

  6. go - 在golang中的表达式中检查括号是否平衡[保持] - 2

    给定表达式字符串exp,编写程序检查exp中“{”、“}”、“(”、“)”、“[”、“]的对和顺序是否正确。packagemainimport("fmt"stack"github.com/golang-collections/collections/stack")funcmain(){s:="(a[0]+b[2c[6]])){24+53}"stackO:=stack.New()stackmap:=map[string]string{"[":"]","(":")","{":"}"}varstr=""for_,num:=ranges{str=string(num)if(str=="{"||

  7. Golang libphonenumber - 2

    关闭。这个问题是notreproducibleorwascausedbytypos.它目前不接受答案。这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这个问题的解决方式不太可能帮助future的读者。关闭3年前。Improvethisquestion如何通过使用此库在golang中传递数字来获取国家代码:https://godoc.org/github.com/nyaruka/phonenumbers?

  8. go - func 的语法 Golang 错误 - 2

    为什么下面的代码会抛出意外的函数错误?我看到错误./func_correct.go:4:syntaxerror:unexpectedfunc,expectingnamepackagemainfunc(st*Stack)Pop()int{v:=0forix:=len(st)-1;ix>=0;ix--{ifv=st[ix];v!=0{st[ix]=0returnv}}return0}funcmain(){Pop()} 最佳答案 定义堆栈类型在main中为其创建一个变量对其调用Pop代码:packagemainimport"fmt"typ

  9. go - 进程花费了太长时间程序退出:Golang错误 - 2

    Thisquestionalreadyhasanswershere:ForloopoftwovariablesinGo(3个答案)2年前关闭。我正在通过Gotour在Go中使用for循环我跑的时候packagemainimport"fmt"funcmain(){sum:=1forsum程序运行正常,输出为1024但是当我更改sum:=0时packagemainimport"fmt"funcmain(){sum:=0forsum它给出了错误的说法processtooktoolongProgramexited.编辑:我沉迷于Go巡回赛,以至于我无法意识到,我犯了一个逻辑错误:P。

  10. json - 如何在golang中将结构解码到 map 中 - 2

    关闭。这个问题需要debuggingdetails.它目前不接受答案。编辑问题以包含desiredbehavior,aspecificproblemorerror,andtheshortestcodenecessarytoreproducetheproblem.这将有助于其他人回答问题。关闭4年前。Improvethisquestion我有一个Json:{"id":"me","name":"myname","planets":{"EARTH":3,"MARS":4}}我不知道如何将planets字段解码为map[string]int,所以我将访问元素而无需解码它们,就像在这个例子中一样

随机推荐