作为开发人员,我不断地部署和更新准备生产的Web服务器。我在Web服务器中寻找的一些最重要的功能是指标和服务器的健康。在开发了许多Java Web服务器之后,我开始欣赏Spring Web应用程序的Spring Boot Actuator扩展。
在Spring应用程序的上下文中,执行器是服务器扩展名,它将提供有关服务器的信息。这些指标可能是应用程序所依赖的连接的健康和稳定性的项目,即数据库或系统资源利用度量指标。当我将应用程序部署到诸如Kubernetes群集或云中(EKS,ECS,Fargate)之类的部署环境中时,云服务会消耗执行器以监视服务健康。
我找不到在模块中继续进行此功能在Golang中实现此功能的太多。我决定自己滚动。
什么是goctuator?
Goctuator是go-actuator的缩写。该模块为基于GO的Web服务器提供了类似Spring-boot的执行功能。 goctuator提供以下端点
-
/env
-显示当前运行时环境变量 -
/info
-用于传达有关已发布的软件包的信息,例如作者,版本号,go -lang运行时,该项目已构建了该应用程序,该应用程序已构建的CPU架构,git修订版哈希和repo url -
/health
-此端点显示整个系统健康以及任何依赖性的健康(即数据库连接状态) -
/metrics
-此端点显示系统资源利用率 -
/treaddump
-此端点显示当前线程的快照,并利用pprof.lookup
收集有关使用中的goroutines的信息
安装
安装goctuator非常简单。使用go get
检索模块并将其添加到您的项目
go get gitlab.com/mikeyGlitz/gohealth
安装软件包后,您可以使用HTTP处理程序将其添加到项目中
HTTP软件包
handler := actuator.GetHandler(&actuator.Config{})
http.Handle("/actuator", handler)
杜松子酒处理程序
handler := actuator.GetHandler(&actuator.Config{})
r := gin.Default()
r.Get("/actuator", func(ctx *gin.Context) {
handle(ctx.Writer, ctx.Request)
}
定制
可以通过两种方式之一来定制goctuator模块:
- 您可以禁用端点
- 您可以添加自定义健康检查员
- 您可以量身定制
/info
端点
自定义可用端点
actuator.Configuration
结构支持一个slice Endpoints
,用于配置哪些端点作为执行器启用:
config := &actuator.Configuration {
Endpoints: []actuator.Endpoint {
actuator.ENV,
actuator.INFO,
}
}
使用此配置,只能启用/info
和/env
端点
定制健康检查员
还可以定制健康检查员。默认情况下,模块提供了端点,该端点模拟了通用PING响应以及为应用程序提供磁盘使用统计信息的端点。这些健康检查员位于health.PingChecker
和health.DiskStatusChecker
中。
您也可以通过实现HealthChecker
接口来编写自己的健康检查器:
type ComponentDetails struct {
Status HealthStatus `json:status` // Can either be UP or DOWN
// Details - a struct which can be converted into a JSON
// object which will provide additional details about the
// service which health is being checked
Details interface{} `json:details`
}
type HealthCheckResult struct {
ComponentDetails
Service string
}
type HealthChecker interface {
CheckHealth() HealthCheckResult
}
当请求/health
端点时,响应将类似于以下JSON对象:
{
"status": "UP",
"components": {
"diskspace": {
"status": "UP",
"details": {
"all": "",
"used": "",
"free": "",
"available": ""
}
},
"ping": {
"status": "UP"
}
}
}
定制/info
返回的信息
使用ldflags
将/info
端点返回的信息设置为
go build -ldflags="-X gitlab.com/mikeyGlitz/gohealth/pkg/info.AppName=${appName} <other flags>"
/info
端点利用以下变量:
变量 | 描述 |
---|---|
appName | 您的应用程序名称 |
AppDescription | 您的应用程序的简要说明 |
appversion | 应用程序版本即V1.0.0 |
git变量 | |
commitid | 提交的sha1 |
委员会 | 何时进行提交的时间戳 |
buildtime | 何时进行申请构建 | 的时间戳
repositoryurl | git存储库的位置 | 的URL
分支 | 分支名称构建是在 | 上执行的
应用程序环境 | |
OS | 操作系统应用程序运行-Darwin,Linux |
Runtimeversion | GO的版本是为 | 构建的
Arch | CPU体系结构该应用程序是为-ARM64 | 构建的
有关GoCtuator及其使用的更多信息,请咨询Readme。