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

news2024/12/29 14:48:58

接入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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[更改挂载点]重新挂载硬盘

显示磁盘空间使用情况 df -hdf -h 命令的输出显示了文件系统的磁盘空间使用情况。 这里 /dev/nvme0n1p1 设备(大小为 880GB)已经被挂载到 /media/nvidia/SSD 目录下,并且使用了 304GB,剩余 532GB,使用率为 37%。这意…

Django视图Views

Views视图 HttpRequest 和HttpResponse Django中的视图主要用来接受web请求,并做出响应。视图的本质就是一个Python中的函数视图的响应分为两大类 1)以Json数据形式返回(JsonResponse) 2)以网页的形式返回 2.1)重定向到另一个网页 (HttpRe…

JAVA云his医院管理系统源码 SaaS模式+融合B/S版电子病历 基于云计算技术开发的云his医院管理系统

JAVA云his医院管理系统源码 SaaS模式融合B/S版电子病历 基于云计算技术开发的云his医院管理系统 定义 美国著名教授Morris.Collen于1988年曾著文为医院信息系统下了如下定义:利用电子计算机和通讯设备,为医院所属各部门提供病人诊疗信息和行政管理信息…

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数据帧的时…

QT基础 获取颜色

比如我们要获取图片上某个点的颜色,要怎么处理呢? 1.获取鼠标坐标 2.截图并将坐标代入途中获取RGB(这里要考虑坐标不在范围) 假如是通过mousePressEvent获取到鼠标坐标 void mousePressEvent(QMouseEvent* e) {QPoint orgPoint…

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…

粒子系统技术在AI去衣应用中的创新探索

引言: 随着计算机视觉和人工智能技术的飞速发展,AI去衣技术逐渐走进公众视野。这一技术以其独特的应用前景和技术挑战引起了广泛的关注。在实现衣物去除的同时保持图像质量的关键技术之一,便是粒子系统技术。本文将深入探讨粒子系统技术在AI去…

文件系统,磁盘的物理存储结构和逻辑存储结构

问题导入 在计算机中不是所有的文件都是被打开的,只有我们要用的文件的被打开,大部分文件(当前不需要访问的文件),都在磁盘中保存着。问题是没有被打开的文件是否需要管理? 这就好比我有十套衣服&#xff…

LBSS138LT1G 丝印J1 SOT-23 N沟道 50V/200mA 贴片MOSFET

LBSS138LT1G的应用领域广泛,主要因为它是一种N沟道金属氧化物半导体场效应晶体管(MOSFET),具有低电荷、快速开关速度和高阻断特性。以下是一些典型的应用领域: 1. 消费电子产品:LBSS138LT1G常用于电视、音响…

【UE5.1 角色练习】01-使用小白人蓝图控制商城角色移动

目录 效果 步骤 一、导入资源 二、控制角色移动 三、更换角色移动动作 效果 步骤 一、导入资源 新建一个工程,然后在虚幻商城中将角色动画的相关资源加入工程,这里使用的是“动画初学者内容包”和“MCO Mocap Basics” 将我们要控制的角色添加进…

洗地机怎么挑?洗地机选购指南,2024洗地机测评选购攻略

在快节奏的生活中,繁琐的清洁工作往往令人头疼,随着洗地机的诞生,极大地简化了清洁的过程,洗地机凭借着它吸拖洗为一体的高效清洁特点,受到家庭和商业场所的广泛欢迎。那么,洗地机怎么挑,要注意…

什么是Zoho CRM客户关系系统管理?

以客户为中心的商业时代,卓越的客户体验已成为企业持续增长与成功的关键,为了在这场激烈的市场竞争中脱颖而出,企业需要一套强大、灵活且智能的客户关系管理系统——Zoho CRM应运而生,它不仅是管理客户信息的工具箱,更是驱动业务增…

数据结构篇3—《龙门客“栈”》

文章目录 🚩前言1、栈的概念2、栈的实现框架3、栈的代码实现3.1、栈的初始化和销毁3.2、入栈\出栈\返回栈顶元素\元素个数\判空3.3、栈定义注意事项 4、栈的应用实例——《括号匹配问题》 🚩前言 前面记录了关于顺序表和链表的数据结构,这一篇…

2.1.2 C++程序设计——程序基本概念

文章目录 展示大纲1、程序基本概念2、基本数据类型3、程序基本语句4、基本运算5、数学库常用函数6、结构化程序设计展示大纲 1、程序基本概念

数据结构初阶 顺序表的补充

一. 题目的要求 写出三种链表的接口函数 它们的功能分别是 1 查找数的位置 2 在pos位置插入值 3 在pos位置删除值 二. 实现pos 这个其实很简单 找到一步步遍历 找到这个数字就返回 找不到就提示用户下 这个数字不存在 int SLFind(SL* ps,SLDateType x) {assert(ps);int…

C# WinForm —— 21 RichTextBox 使用

1. 加载文件到控件中 加载文件时,要设置文件的路径和类型RichTextBoxStreamType,文件类型包含: RichText 0:富文本格式(RTF)流PlainText 1:纯文本流对象链接和嵌入(OLE&#xff…

根据参考风格进行矢量图绘制

摘要 利用机器学习根据给定的文本描述生成图像的技术已经取得了显著的进步,例如CLIP图像-文本编码器模型的发布;然而,当前的方法缺乏对生成图像风格的艺术控制。我们提出了一种方法,用于为给定的文本描述生成指定风格的绘图&…

DIYGW UniApp可视化工具:低代码时代的前端开发新体验

摘要: 随着技术的不断发展,前端开发领域也迎来了低代码时代的浪潮。本文介绍了DIYGW UniApp可视化工具,这款工具以其傻瓜式、拖拽式、模块化的特性,为前端开发者提供了一个全新的开发体验。通过DIYGW UniApp,用户无需深…

【数据可视化-05】:Plotly数据可视化宝典

一、引言 数据可视化是机器学习流程中不可或缺的一部分。通过图形和图表展示数据,我们可以更直观地理解数据的分布、趋势和关联,从而更有效地进行数据分析、特征工程和模型评估。Plotly是一个功能强大且灵活的数据可视化库,它提供了丰富的图表…