Go微服务: 接入Prometheus性能监控平台与Grafana平台

接入Prometheus

  • 在 go-micro 生成的模板中, 我们一如既往的完成基础工作之后

  • 进入main.go工作的代码编写,main.go

    package mainimport ("fmt""log""strconv""github.com/go-micro/plugins/v4/registry/consul"opentracingTool "github.com/go-micro/plugins/v4/wrapper/trace/opentracing""github.com/go-micro/plugins/v4/wrapper/monitoring/prometheus""github.com/go-micro/plugins/v4/wrapper/ratelimiter/ratelimit"jujuratelimit "github.com/juju/ratelimit""github.com/opentracing/opentracing-go""go-micro.dev/v4""go-micro.dev/v4/registry""gitee.com/go-micro-services/common""gitee.com/go-micro-services/order/domain/repository""gitee.com/go-micro-services/order/domain/service""gitee.com/go-micro-services/order/handler"pborder "gitee.com/go-micro-services/order/proto/order""github.com/jinzhu/gorm"_ "github.com/jinzhu/gorm/dialects/mysql"
    )var (serviceName     = "go.micro.service.order"version         = "latest"host            = "127.0.0.1"port            = 8500address         = host + ":" + strconv.Itoa(port)mysqlConfigPath = "/micro/config/mysql"
    )func main() {// 1. 指定注册中心consulReg := consul.NewRegistry(registry.Addrs(address),)// 2. 从配置中心获取mysql配置并创建处理mysqlConfig, consulConfigErr := common.GetConsulMysqlConfig(address, mysqlConfigPath)if consulConfigErr != nil {log.Fatal(consulConfigErr)}mysqlUrl := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local", mysqlConfig.User, mysqlConfig.Pwd, mysqlConfig.Host, mysqlConfig.Port, mysqlConfig.Database)db, dbErr := gorm.Open("mysql", mysqlUrl)if dbErr != nil {log.Fatal(dbErr)}defer db.Close()rp := repository.NewOrderRepository(db)// 数据库表初始化,只执行一次, 如果本来就设计好了,则无需下面// rp.InitTable()// db.SingularTable(false) // true 则 表就是单数// 3. 链路追踪配置tracer, closer, tracerErr := common.NewTracer("go.micro.service.order", "localhost:6831")if tracerErr != nil {log.Fatal(tracerErr)}defer closer.Close()opentracing.SetGlobalTracer(tracer)// 4. 创建服务实例orderDataService := service.NewOrderDataService(rp)// 5.暴露监控地址common.PrometheusBoot(9092)// 6. 创建服务和初始化srv := micro.NewService()srv.Init(micro.Name(serviceName),micro.Version(version),micro.Registry(consulReg),// micro.Address("0.0.0.0:8087"), // 暴露的服务地址 这里可用可不用指定micro.WrapHandler(opentracingTool.NewHandlerWrapper(opentracing.GlobalTracer())),       // 绑定链路追踪micro.WrapHandler(ratelimit.NewHandlerWrapper(jujuratelimit.NewBucket(50, 100), true)), // 添加限流micro.WrapHandler(prometheus.NewHandlerWrapper()),                                      // 添加监控)// 7. 注册 handlerif handlerErr := pborder.RegisterOrderHandler(srv.Server(), &handler.Order{OrderDataService: orderDataService}); handlerErr != nil {log.Fatal(handlerErr)}// 8. 运行服务if runErr := srv.Run(); runErr != nil {log.Fatal(runErr)}
    }
    
  • 注意,这里最重要的一行代码:common.PrometheusBoot(9092), 进入看看

    package commonimport ("net/http""strconv""github.com/prometheus/client_golang/prometheus/promhttp""github.com/prometheus/common/log"
    )func PrometheusBoot(port int) {http.Handle("/metrics", promhttp.Handler())//启动web 服务go func() {err := http.ListenAndServe("0.0.0.0:"+strconv.Itoa(port), nil)if err != nil {log.Fatal("启动失败")}log.Info("监控启动,端口为:" + strconv.Itoa(port))}()
    }
    
    • http.Handle("/metrics", promhttp.Handler()):
      • 这行代码注册了一个HTTP处理器到/metrics路径上
      • 当HTTP请求访问/metrics时,promhttp.Handler() 会生成并返回Prometheus格式的指标数据
  • 启动服务 $ sudo go run main.go

Prometheus 和 Grafana 监控平台


1 )Prometheus 平台

  • 在已搭建好的 Prometheus 平台上查看: http://192.168.1.7:9090
  • 具体参考:https://active.blog.csdn.net/article/details/138822193
  • 上面是正常的服务, 如果服务出错,可能如下

选择一项指标后,执行

2 ) Grafana 平台

  • 在已经接入好的 Grafana 监控平台:http://192.168.1.7:3000

可见,已经能够正常监控了

源码地址

  • https://gitee.com/go-micro-services/order

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/704383.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MaxKB创建本地知识库

上节已经可以通过MaxKB创建简单的问答系统了,这节开始做自己的知识库,实际上就是把一些本地文件上传到大模型中,让大模型学会这些文件内容,你在问他问题的时候可以通过此文件的内容来回答你,尤其是在针对特定场景或者特…

(实测验证)Gitee代码托管尝试(一)——克隆/下载

一、登录 Gitee(码云)代码托管平台: Gitee - 基于 Git 的代码托管和研发协作平台 新建个人账户如下: 二、SSH 公钥设置 1、在git安装目录打开“git-cmd.exe”; 2、通过命令 ssh-keygen 生成 SSH Key: ssh-keygen …

指针在函数的应用(C++)

一、传递地址 实参传递进函数体内后,生成的是实参的副本,在函数内改变副本的值并不影响实参。指针传递参数时,指针变量产生了副本,但副本与原变量指向的内存区域是同一个。改变指针副本指向的变量,就是改变原指针变量指…

网络安全 会飞的狗狗 网络安全狗是什么

1.概述 网站安全狗是一款集网站内容安全防护、网站资源保护及网站流量保护功能为一体的服务器工具。功能涵盖了网马/木马扫描、防SQL注入、防盗链、防CC攻击、网站流量实时监控、网站CPU监控、下载线程保护、IP黑白名单管理、网页防篡改功能等模块。能够为用户提供实时的网站安…

做简单易用的GIS资源管理软件

在室外资源管理领域,采用基于GIS的解决方案已成为主流趋势,旨在实现资源的高效利用和管理。GIS技术结合资源对象的规划、定位和监控,为企业提供全面的管理方案,从而优化资源使用、提高运营效率和降低成本。 然而,许多资…

ROS 手眼标定 realsense435i+ur5e

手眼标定的原理 基坐标系(base_tree)和相机(camera_tree)两个坐标系属于不同的tree,通过将标签贴到手上,相机识别出标签的position和orention,并通过easy_handeye标定包得到tool0(机械手)&…

Java—字节码文件解读

原文 public class ClassIntrucation {public static void main(String[] args) {int i 10;int j i;j;j;} } 查看字节码文件命令 javap -c 字节码文件例如: javap -c ClassIntrucation 结果 public class ClassIntrucation {public ClassIntrucation();Code:…

用c++实现快速排序、最大子段和问题

6.2.2 快速排序 【问题】快速排序(quick sort)的分治策略如下(图6-5)。 (1)划分:(选定一个记录作为轴值,以轴值为基准将整个序列划分为两个子序列,轴值的位置在划分的过程中确定,并且左侧子序列的所有记录…

Linux连接文件那点事

什么是连接文件 将一个文件和另一个文件建立联系,分为硬链接和软连接(符号连接)。 硬链接 Linux中,所有的文件都有一个inode,这个东西就是文件的ID号,硬链接的方式就是通过这个inode来产生新的文件名来建…

公共命名空间和RHP

概述 RHP的全称是:the little Robot that Helped me Program,帮我编程序的小机器人。 RHP必然存在,C语言的宏、C的模板,都是RHP;更复杂的例子,是lex和yacc,它们是制作程序的程序,也…

ChatGPT官网5月14日凌晨1点发布会推出最新GPT4o大模型,贾维斯时刻要来了?

就在今天北京时间2024年5月14日凌晨1点中,OpenAI进行了发布会,这次发布会的内容炸裂,一起来看下吧! GPT4o多模态大模型发布 首先公开的是GPT4o多模态大模型的发布,相较于GPT-4turbo速度更快,更便宜。我刚开…

Redis数据结构-RedisObject

1.7 Redis数据结构-RedisObject Redis中的任意数据类型的键和值都会被封装为一个RedisObject,也叫做Redis对象,源码如下: 1、什么是redisObject: 从Redis的使用者的角度来看,⼀个Redis节点包含多个database&#xff…