指标收集 - HTTP客户端
Code Source: https://github.com/gogf/examples/tree/main/observability/metric/http_client
简介
本示例演示了如何在 GoFrame
中使用 OpenTelemetry
和 Prometheus
集成来收集和监控HTTP客户端指标。主要展示:
- 监控HTTP客户端请求
- 跟踪请求持续时间
- 收集响应状态码
- 导出客户端指标数据
目录结构
.
├── go.mod # Go模块文件
├── go.sum # Go模块校验和
└── main.go # 主程序,演示HTTP客户端指标收集
功能特性
本示例展示了以下指标:
-
请求指标
- 总请求数(Total Requests Count)
- 活跃请求数(Active Requests)
- 请求持续时间(Request Duration)
- 请求大小(Request Size)
-
响应指标
- 响应状态码(Response Status Codes)
- 响应大小(Response Size)
- 错误计数(Error Count)
- 响应持续时间(Response Duration)
-
连接指标
- 连接池统计(Connection Pool Stats)
- DNS查询持续时间(DNS Lookup Duration)
- TLS握手持续时间(TLS Handshake Duration)
- 连接建立时间(Connection Establishment Time)
环境要求
Go
1.22 或更高版本GoFrame
框架GoFrame OpenTelemetry Metric
扩展
使用说明
-
运行示例:
go run main.go
-
访问指标:
# 使用curl
curl http://localhost:8000/metrics
# 或在浏览器中打开
http://localhost:8000/metrics -
指标输出示例:
# HELP goframe_http_client_request_duration_seconds HTTP请求的持续时间
goframe_http_client_request_duration_seconds_bucket{method="GET",status="200",url="https://goframe.org",le="0.1"} 1
# HELP goframe_http_client_requests_total HTTP请求的总数
goframe_http_client_requests_total{method="GET",status="200",url="https://goframe.org"} 1
# HELP goframe_http_client_response_size_bytes HTTP响应的大小
goframe_http_client_response_size_bytes{method="GET",status="200",url="https://goframe.org"} 12345
实现说明
-
配置指标导出器
// 创建Prometheus导出器,用于指标数据的导出
exporter, err := prometheus.New(
prometheus.WithoutCounterSuffixes(), // 移除计数器后缀以保持指标名称简洁
prometheus.WithoutUnits(), // 移除单位后缀以保持指标名称简洁
)
if err != nil {
g.Log().Fatal(ctx, err)
} -
初始化OpenTelemetry提供者
// 初始化并配置OpenTelemetry提供者
provider := otelmetric.MustProvider(
otelmetric.WithReader(exporter), // 配置指标读取器
otelmetric.WithBuiltInMetrics(), // 启用内置指标收集
)
provider.SetAsGlobal() // 设置为全局指标提供者
defer provider.Shutdown(ctx) // 确保程序退出时正确关闭提供者 -
使用HTTP客户端
// 发起HTTP请求并自动收集指标
url := `https://goframe.org`
content := g.Client().GetContent(ctx, url) // 发起HTTP GET请求