Golang:实现http服务器健康检查。 gocraft/health
Golang: implements http server health checking. gocraft/health
我想检查我的服务的健康状况,了解每个端点的指标。
我的服务调用其他一些服务并收到一个 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": {}
}
}
]
}
有关更多信息和功能,请查看此 link:
如果您遇到这个问题是因为您正在寻找公开 /health
端点,那么即将推出用于健康检查的 RFC:https://github.com/inadarei/rfc-healthcheck
还有一个 Go 库 health-go
用于公开符合该 RFC 的健康端点:https://github.com/nelkinda/health-go
示例:
package main
import (
"github.com/nelkinda/health-go"
"net/http"
)
func main() {
// 1. Create the health Handler.
h := health.New(health.Health{Version: "1", ReleaseID: "1.0.0-SNAPSHOT"})
// 2. Add the handler to your mux/server.
http.HandleFunc("/health", h.Handler)
// 3. Start your server.
http.ListenAndServe(":80", nil)
}
它是可扩展的并支持许多内置检查,例如正常运行时间和系统信息。
免责声明:我是 health-go
.
的作者
我想检查我的服务的健康状况,了解每个端点的指标。 我的服务调用其他一些服务并收到一个 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": {}
}
}
]
}
有关更多信息和功能,请查看此 link:
如果您遇到这个问题是因为您正在寻找公开 /health
端点,那么即将推出用于健康检查的 RFC:https://github.com/inadarei/rfc-healthcheck
还有一个 Go 库 health-go
用于公开符合该 RFC 的健康端点:https://github.com/nelkinda/health-go
示例:
package main
import (
"github.com/nelkinda/health-go"
"net/http"
)
func main() {
// 1. Create the health Handler.
h := health.New(health.Health{Version: "1", ReleaseID: "1.0.0-SNAPSHOT"})
// 2. Add the handler to your mux/server.
http.HandleFunc("/health", h.Handler)
// 3. Start your server.
http.ListenAndServe(":80", nil)
}
它是可扩展的并支持许多内置检查,例如正常运行时间和系统信息。
免责声明:我是 health-go
.