治理服务

Example

项目地址治理服务 - 图1 (opens new window)

背景

Go不像JavaPHP,有虚拟机帮助程序员对程序运行的内部情况的观测,但这种观测对于程序员而言排查故障,解决性能问题是非常重要的。

EGO着眼于可观测性,在各个组件里引入拦截器,提取有用信息,通过实现一个治理服务,将程序运行数据吐出来,方便用户做治理平台,排查各类问题。

可观测数据

路由说明
/展示所有可观测的路由
/metrics监控数据
/debug/pprof/*pprorf信息
/config/jsonconfig json数据
/config/rawconfig 原始数据
/module/info应用依赖模块信息
/build/info应用编译信息
/env/info应用环境信息
/code/info状态码信息,待完成
/component/info组件信息,待完成

用户配置

  1. [server.governor]
  2. host = "0.0.0.0"
  3. port = 9003

用户代码

配置创建一个 governor 的配置项,其中内容按照上文配置进行填写。以上这个示例里这个配置key是server.governor

代码中创建一个 governor 服务, egin.Load(“”).Build() ,代码中的 key 和配置中的 key 要保持一致。创建完 http 服务后, 将他添加到 ego new 出来应用的 Serve 方法中,之后使用的方法和 gRPC 就完全一致。

  1. package main
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "github.com/gotomicro/ego"
  5. "github.com/gotomicro/ego/core/elog"
  6. "github.com/gotomicro/ego/server/egin"
  7. "github.com/gotomicro/ego/server/egovernor"
  8. )
  9. func main() {
  10. if err := ego.New().
  11. Serve(
  12. egovernor.Load("server.governor").Build(),
  13. serverHttp(),
  14. ).Run(); err != nil {
  15. elog.Panic("startup", elog.FieldErr(err))
  16. }
  17. }
  18. func serverHttp() *egin.Component {
  19. server := egin.Load("server.http").Build()
  20. server.GET("/hello", func(ctx *gin.Context) {
  21. ctx.JSON(200, "Hello")
  22. return
  23. })
  24. return server
  25. }

查看运行的metric信息

我们启动服务

治理服务 - 图2

请求治理端口的/metrics接口,可以看到 ego_build_info 的信息,这里会将编译信息放入到 prometheus 中,并且还会把运行时的环境信息和启动时间也加入进来。

  1. # HELP ego_build_info
  2. # TYPE ego_build_info gauge
  3. ego_build_info{app_version="b0807b91aca95b6eb6daafa9195c467fac0c350b-dirty",build_time="2020-12-04 11:48:35",ego_version="0.1.0",go_version="go1.15.2",mode="dev",name="hello",region="huabei",start_time="2020-12-04 11:49:02",zone="ali-3"} 1.607053742679e+12