# gin-observability
项目整体基于gin框架,实现了对prometheus(metric)、otelgin(trace)、zap(log)的封装添加,达到开箱即用
### What it can do?
- metric:封装了三个基于gauge类型的指标,能够反馈api的请求次数、错误、请求耗时(R.E.D)
- trace:封装使用了otelgin官方的中间件,能够在gin.context传递trace信息
- log:封装了zap的初始化过程,自定义了输出格式,通过gin.context添加了traceID和spanID
### What it can't do?
- metric:仅仅作为客户端的exporter。不能进行数据的分析、告警与可视化,需配合prometheus和grafana等使用
- trace:不包含任何exporter。不能直接观测到链路信息,仅在日志中输出,若需要请参考otel文档并结合jaeger等使用
- log:可选择性结合gin.context使用。为了到达日志记录traceID和spanID的效果则必须传入gin.context
### 使用
``` shell
go get -u github.com/Ltd5552/gin-observability
```
#### 集成使用
为了更加方便,引入了observability包将metric和trace模块整合到一起,可直接使用即可
``` go
import "github.com/Ltd5552/gin-observability/observability"
r := gin.New()
// 传入gin.engine和应用名(作为链路的服务名)
observability.Set(r, "ServerName")
defer log.Sync()
```
#### 分别使用
**若仅需要metric功能:**
``` go
import(
"github.com/gin-gonic/gin"
"github.com/Ltd5552/gin-observability/metric"
)
r := gin.New()
// 设置metric
metric.Set(r)
```
**若仅需要trace和log功能:**
``` go
import(
"github.com/gin-gonic/gin"
"github.com/Ltd5552/gin-observability/trace"
"github.com/Ltd5552/gin-observability/log"
)
r := gin.New()
// 设置trace
trace.Set(r, "gin-observability")
defer log.Sync()
r.GET("/get", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "get",
})
// 使用普通的zap的log
log.Info("get successfully")
// 使用能打印traceID和spanID的log
log.InfoWithID(c, "get successfully")
})
```
**若三个都用到使用集成的observability模块**
``` go
import(
"github.com/gin-gonic/gin"
"github.com/Ltd5552/gin-observability/observability"
"github.com/Ltd5552/gin-observability/log"
)
r := gin.New()
observability.Set(r, "gin-observability")
defer log.Sync()
r.GET("/get", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "get",
})
// 使用普通的zap的log
log.Info("get successfully", zap.String("ping", "pong"))
// 使用能打印traceID和spanID的log
log.InfoWithID(c, "get successfully", zap.String("ping", "pong"))
})
```
### P.S
三个模块均能单独使用,但trace和log相互依赖才有效果,而metric则完全独立
### What's the next?
设想:采用option模式,增添更多的可选择性:
- 是否添加trace exporter
- 是否自定义log日志文件参数
没有合适的资源?快使用搜索试试~ 我知道了~
基于porm-go、otelgin、zap实现对gin的可观测性支持.zip
共14个文件
go:5个
md:4个
png:2个
需积分: 5 0 下载量 38 浏览量
2024-05-23
17:09:50
上传
评论
收藏 44KB ZIP 举报
温馨提示
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
资源推荐
资源详情
资源评论
收起资源包目录
基于porm-go、otelgin、zap实现对gin的可观测性支持.zip (14个子文件)
content
metric
metrics.go 2KB
README.md 2KB
pic
log.png 10KB
metric.png 7KB
trace
traces.go 1KB
README.md 847B
go.mod 2KB
go.sum 54KB
.gitignore 15B
observability
observability.go 302B
example
main.go 552B
README.md 3KB
log
log.go 7KB
README.md 771B
共 14 条
- 1
资源评论
生瓜蛋子
- 粉丝: 3829
- 资源: 5969
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功