关于go-zero服务自动收集问题分析

yizhihongxing
  1. 简介

Go-zero是一种基于Golang的微服务框架,提供很多便捷的工具和模块。其中,go-zero的服务自动收集问题分析是一种非常实用的功能,可以监控和收集服务的异常情况,支持对异常情况进行可视化展示和报警通知,对于服务的稳定运行和故障排除都有很大的帮助。

  1. 实现步骤

2.1 安装go-zero工具包和依赖包

首先需要安装go-zero工具包,并安装go-zero依赖库。go-zero工具包可以通过如下命令进行安装:

go get -u github.com/tal-tech/go-zero/tools/goctl

go-zero的依赖库可以通过go.mod的方式管理,只需要在代码根目录运行:

go mod vendor

即可自动生成vendor目录,将项目依赖放置其中。

2.2 引入go-zero的中间件

在main.go或者server.go中的NewServer方法中,可以通过如下方式引入go-zero的中间件:

import (
  "github.com/tal-tech/go-zero/core/logx"
  "github.com/tal-tech/go-zero/core/middleware"
  "github.com/tal-tech/go-zero/core/stores/cache"
  "github.com/tal-tech/go-zero/core/stores/redis"
  "github.com/tal-tech/go-zero/rest"
  "project/api/internal/config"
)

func NewServer(c config.Config) *rest.Server {
  s := rest.MustNewServer(c.RestConf)
  s.Use(func(ctx context.Context, in interface{}) (out interface{}, err error) {
    // 执行性能监控、慢请求监控等特定的中间件逻辑
    // 比如可以使用middleware.Instrument、middleware.Dump等方法
    return nil, nil
  })
  s.Use(
    // 引入log中间件
    middleware.NewLogMiddleware(logx.WithContext(logx.DefaultLogger()), []string{"/health"}),
    // 引入追踪中间件
    middleware.NewTracingMiddleware(),
    // 引入缓存中间件
    middleware.NewCacheMiddleware(cache.NewCache(redis.NewRedis(c.Cache.Redis), c.Cache.LocalCache)),
    // 引入我们的业务中间件
    // middleware.NewMyMiddleware()
  )
  InitRouter(s)
  return s
}

在其中,使用s.Use()方法引入了几个go-zero提供的非常实用的自带中间件:log、追踪、缓存等。同时可以通过自定义中间件的方式引入我们实现的业务逻辑。

2.3 启动问题收集服务

在引入go-zero的中间件之后,需要配置问题收集服务,在main.go中添加如下代码即可:

import (
  "github.com/tal-tech/go-zero/core/stat"
)

func main() {
  defer stat.Report()
  // 在s.Start前面调用
  stat.SetReporter(func(p stat.Project) stat.Reporter {
    return statsd.NewReporter(p,
      statsd.Address("127.0.0.1:8125"),
      statsd.Engine(prometheus.NewEngine),
      statsd.SampleRate(.1),
    )
  })
  s := api.NewServer(config.Conf)
  s.Start()
}

在这里必须引入go-zero提供的core/stat模块,通过SetReporter方法配置报告服务,并在defer语句中调用stat.Report()方法,申明不论成功还是失败都上报数据。

  1. 实例说明

在引入go-zero的中间件和配置问题收集服务之后,我们可以通过如下方式快速的检测我们的服务里出现的问题:

3.1 检测错误日志

在我们的业务逻辑代码中,如果写入了错误日志:

func AddEmployee(req types.AddEmployeeReq) (types.AddEmployeeRsp, error) {
  // do something
  logx.Error(err)
  // do something
  return rsp, err
}

则go-zero会在错误日志发生时自动收集并存储错误信息(包含异常信息等),并通过报告服务提供基础性的检测和分析。

3.2 检测请求延迟

在引入了go-zero的instrument中间件之后,我们可以使用middleware.Instrument()函数来对请求延迟时间进行检测和分析。

修改NewServer()方法,在其中添加如下中间件:

import (
  "github.com/tal-tech/go-zero/core/middleware"
)

func NewServer(c config.Config) *rest.Server {
  s := rest.MustNewServer(c.RestConf)
  s.Use(middleware.Instrument())
  InitRouter(s)
  return s
}

此时,在我们的每个接口请求调用的前、后代码记录耗时:

func ListEmployee(req types.ListEmployeeReq) (types.ListEmployeeRsp, error) {
  f := func(ctx context.Context) {
    // 此处的代码将在方法调用前和调用后执行
    logx.Info("函数调用成功")
  }
  defer f(ctx)
  // do something
  time.Sleep(time.Second)
  // do something
  return rsp, err
}

然后请求对应接口,即可在日志中查看并监测到每个接口请求的耗时。

通过如上方式,我们可以使用go-zero的服务自动收集问题分析功能快速的发现服务的问题,保障服务的安全运行。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:关于go-zero服务自动收集问题分析 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • nginx+tomcat实现Windows系统下的负载均衡搭建教程

    下面是“nginx+tomcat实现Windows系统下的负载均衡搭建教程”的完整攻略: 1. 环境准备 1.1 安装Java环境 首先需要安装Java环境,这里以JDK 8为例。建议在官网下载对应系统的JDK安装包,然后安装即可。 1.2 安装Tomcat Tomcat是一个开源的Web应用服务器,也是一个Servlet容器。可以通过以下步骤进行安装: 下…

    人工智能概览 2023年5月25日
    00
  • Linux下给nginx安装waf模块

    安装WAF(Web Application Firewall)模块可以在一定程度上增强Nginx的安全性能,下面是在Linux系统下给Nginx安装WAF模块的完整攻略: 第1步:下载waf模块 首先,我们需要从WAF模块的官方网站下载安装包。 官方网站:https://github.com/nginx-modules/ngx_http_waf_module…

    人工智能概览 2023年5月25日
    00
  • Pytorch中使用ImageFolder读取数据集时忽略特定文件

    在PyTorch中使用ImageFolder读取数据集时,有时候我们需要忽略数据集中的某些特定文件,比如说不是图片文件的文件类型或者无关的噪声文件。下面是使用PyTorch中ImageFolder忽略特定文件的完整攻略。 Step 1: 组织数据集 首先,我们需要组织好我们的数据集。我们可以将数据集放在一个文件夹中,该文件夹下再分成多个类别的文件夹,每个类别…

    人工智能概览 2023年5月25日
    00
  • python调用matlab的方法详解

    要在 Python 中调用 MATLAB,有两种常见的方法:使用 MATLAB 软件提供的 API 或使用开源的 python-MATLAB 引擎。 方法一:使用 MATLAB 软件提供的 API 1. 安装 MATLAB 软件 在安装 MATLAB 软件时,选中 MATLAB 引擎 for Python,并将其安装到 Python 的环境中。 2. 导入 …

    人工智能概览 2023年5月25日
    00
  • 有密码 优酷视频 破解方法

    有密码优酷视频破解方法 登录优酷账号,找到需要观看的有密码视频,在视频页面右下角找到“复制链接”按钮,复制视频链接。 打开一个新的浏览器窗口,访问秘迹网。 在搜索框输入“优酷破解”,点击“搜索”按钮,选择其中一个页面打开。 在页面中粘贴复制的视频链接,点击“获取真实地址”按钮,等待几秒钟。 在页面下方会显示出视频的真实地址,复制该地址。 打开一个新的浏览器窗…

    人工智能概论 2023年5月25日
    00
  • Java注解处理器学习之编译时处理的注解详析

    “Java注解处理器学习之编译时处理的注解详析”是一篇文章,其主要介绍了如何在Java中使用注解处理器,以及如何编写并使用自定义的编译时注解。本文将分为以下几个部分进行详细讲解。 什么是注解处理器 注解处理器是Java中的一个重要特性,它可以用来解析Java编译时的注解,并对这些注解进行处理。注解处理器可以理解为一类特殊的Java程序,它可以读取Java源代…

    人工智能概论 2023年5月25日
    00
  • 在pytorch中对非叶节点的变量计算梯度实例

    在PyTorch中,如果一个变量既不是标量也不是叶子节点,那么默认情况下不会为该变量计算梯度。这种情况下,我们需要显式地告诉PyTorch对该变量进行梯度计算。下面是完整的攻略,包含两条示例说明: 1. 修改require_grad参数 当我们定义一个变量时,可以使用requires_grad参数来告诉PyTorch是否需要为该变量计算梯度。默认情况下,该参…

    人工智能概论 2023年5月25日
    00
  • 公司一般使用的分布式RPC框架及其原理面试

    一、介绍RPC框架 RPC框架全称为Remote Procedure Call(远程过程调用),是指为了完成分布式系统之间的远程调用而设计的一种通信框架。在分布式系统中,不同进程或不同服务器之间需要相互通信,但进程/服务器之间的通信常常涉及到跨越网络较长的距离,此时HTTP等协议的开销较大,并且编写代码繁琐,因此RPC框架应运而生。 RPC框架的作用是:将远…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部