介绍GoCtuator:基于GO的执行器模块
#网络开发人员 #go #monitoring

作为开发人员,我不断地部署和更新准备生产的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.PingCheckerhealth.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端点利用以下变量:

的时间戳 的URL 上执行的 构建的 构建的
变量 描述
appName 您的应用程序名称
AppDescription 您的应用程序的简要说明
appversion 应用程序版本即V1.0.0
git变量
commitid 提交的sha1
委员会 何时进行提交的时间戳
buildtime 何时进行申请构建
repositoryurl git存储库的位置
分支 分支名称构建是在
应用程序环境
OS 操作系统应用程序运行-Darwin,Linux
Runtimeversion GO的版本是为
Arch CPU体系结构该应用程序是为-ARM64

有关GoCtuator及其使用的更多信息,请咨询Readme