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

接入Prometheus

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

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

    package main
    
    import (
    	"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            = 8500
    	address         = 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. 注册 handler
    	if 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 common
    
    import (
    	"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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【nfs服务部署服务端和客户端搭建】

原理 NFS(Network File System)是文件服务器之一。它的功能是可以通过网络,让不同的机器、不同的操作系统可以彼此共享数据文件。 NFS服务器可以让服务端的共享目录挂载到本地端的文件系统中,其他服务器如果想访问共享目录&#…

OFDM 802.11a的FPGA实现(十六)长训练序列:LTS(含Matlab和verilog代码)

目录 1.前言2.原理3.Matlab生成长训练序列4.硬件实现5.ModelSim仿真6.和Matlab仿真结果对比 原文链接(相关文章合集): OFDM 802.11a的xilinx FPGA实现 1.前言 在之前已经完成了data域数据的处理,在构建整个802.11a OFDM数据帧的时…

基于死区补偿的永磁同步电动机矢量控制系统simulink仿真模型

整理了基于死区补偿的永磁同步电动机矢量控制系统simulink仿真,该模型使用线性死区补偿的PMSM矢量控制算法进行仿真,使用Foc电流双闭环 。 1.模块划分清晰,补偿前后仿真有对比,易于学习; 2.死区补偿算法的线性区区域可调; 3.自…

fyne更新GUI内容

fyne更新GUI内容 实现一个时钟界面,每秒钟更新一次。 package mainimport ("fyne.io/fyne/v2/app""fyne.io/fyne/v2/widget""time" )func updateTime(label *widget.Label) {formatted : time.Now().Format("2006-01-02 15:04…

Softing工业推出的edgeConnector将Allen-Bradley控制器集成到工业边缘应用中

2024年4月17日(哈尔),Softing宣布扩展其基于Docker的edgeConnector产品系列,推出了新软件模块edgeConnector Allen Bradley PLC,可方便用户访问来自ControlLogix和CompactLogix控制器数据。 (edgeConnector…

LSTM与GAN创新结合!模型性能起飞,准确率超98%

今天来聊一个深度学习领域非常具有创新性的研究方向:LSTM结合GAN。 LSTM擅长处理和记忆长期的时间依赖关系,而GAN可以学习复杂的数据分布并生成逼真的数据样本。通过充分结合两者的优势,我们可以增强模型对复杂数据的处理能力,提…

二叉树的常见操作

建立树 复制二叉树 计算深度 计算总结点数 计算叶子结点数

GPT-4o、GPT-4国内可用!新UI界面率先体验方法!

测试情况: 现根据测试结果,先对比一下普号4o和付费的区别: 注: plus限制情况:4的次数用完后可以用4o,但4o的80条用完后不能用4; team账户限制是100条/3h,4o和4共享额度 目前发现的…

2024最新洗地机推荐,洗地机怎么选?热门品牌哪个最好用?

在现代生活中,忙碌的日常让家庭清洁变得更加繁重和耗时。然而,洗地机的引入彻底改变了这一状况。凭借其强大的清洁效果和简便的使用方式,洗地机能够迅速清除地面上的各种污垢,使清洁工作变得轻松自如。正因为如此,洗地…

yolov8使用与训练步骤

第一:安装miniconda 网址:Index of /anaconda/miniconda/ 登录网址后 在网页按ctrF 输入:搜py38 Miniconda3-py38_22.11.1-1-Windows-x86_64.exe 52.5 MiB 2022-12-23 07:57 下载进行安装 安装过程中记得加环境变量这个项。 第二…

活字格如何复制指定单元格中的内容

1、安装插件“复制到剪贴板”后。 2、在需要执行复制的命令中,选择“复制到剪贴板” 3、选择源单元格。 4、执行看效果。

高效调度新篇章:详解DolphinScheduler 3.2.0生产级集群搭建

转载自tuoluzhe8521 导读:通过简化复杂的任务依赖关系, DolphinScheduler为数据工程师提供了强大的工作流程管理和调度能力。在3.2.0版本中,DolphinScheduler带来了一系列新功能和改进,使其在生产环境中的稳定性和可用性得到了显著…

企业研发必备网络:这些关键特性,你get了吗?

对于以研发为核心的企业,如软件开发、生物制药、智能汽车等,安全、稳定的研发网络可是他们业务发展不可或缺的。那么,这些研发网络究竟有哪些独特之处,又能为企业带来哪些价值呢? 首先,我们知道企业研发常常…

[笔试训练](二十三)067:打怪068:字符串分类069:城市群数量

目录 067:打怪 068:字符串分类 069:城市群数量 067:打怪 题目链接:打怪 (nowcoder.com) 题目: 题解: 直接计算结果: 1.一只怪物能抗几次攻击 int m(H/a)(H%a0?0:1); 2.杀死一只怪物,玩家要抗几次攻击 int nm-1; *3.杀死一只…

电路元件伏安特性的测量

实验目的: 1. 掌握线性电阻、非线性电阻元件伏安特性的测量方法; 2. 掌握伏安测量法中测量样点的选择和绘制曲线的方法; 3. 学习直读式仪表和直流稳压电源等设备的使用方法。 实验原理、内容及步骤: 电路元件的特性一般可用该元…

vue2 配置运行环境

vue2 配置运行环境 在 vue2 项目中配置运行环境 在项目中新建 .env.development 文件 和 .env.production 文件 .env.development NODE_ENV development //指定当前环境模式 VUE_APP_MODE development VUE_APP_BASE_URL "/dev-api".env.production NODE_ENV &q…

华为正式放弃高通芯片 | 百能云芯

5月15日,据外媒最新报道,高通公司正式确认,华为已无需依赖其处理器供应。 在出口许可被正式吊销前,高通的首席财务官已公开表示,预计明年与华为之间的芯片销售将为零,因为华为决定不再从高通购买4G芯片。 报…

基于Django的图书管理系统

文章目录 前言一、页面展示1.登录2.前端页面3.后端页面 总结 前言 本网站调用Django编写了图书管理网站,可以在后端控制书籍,前端进行书籍预览 一、页面展示 1.登录 2.前端页面 3.后端页面 — ![在这里插入图片描述](https://img-blog.csdnimg.cn/dir…

Day28 代码随想录打卡|栈与队列篇---逆波兰表达式求值

题目(leecode T150): 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意: 有效的算符为 、-、* 和 / 。每个操作数(运算…

东方伟大思想家和哲学家颜廷利:有形的财富越与无形的财富

在世界的广阔舞台上,财富常被看作衡量国家与民族成就的重要尺度。然而,在物质和精神的天平上,真正具有深远意义的,往往是后者的累积与扩散。正如东方哲学的现代诠释者、当代中国教育界的杰出教授颜廷利所阐述,“有形的…