gm

package
v1.2.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 15, 2026 License: MIT Imports: 17 Imported by: 0

README

gRPC Middleware (gm)

gm 包提供了构建 gRPC 微服务所需的通用中间件(Interceptor)与 OpenTelemetry StatsHandler 适配。

功能列表

1. Access Logger (NewAccessLogger)

提供 gRPC 访问日志记录功能,输出结构化字段(zap fields)。

特性

  • 链路关联:通过 otelzapctx 自动关联 trace(要求服务端启用 OTel stats handler,日志使用 zap.Any("ctx", ctx))。
  • 身份识别:从 metadata 读取 SourceIp/ClientIp/InvokeService*/TargetService*/UserId/AppId/TenantId 等字段。
  • 性能字段duration(微秒)、status(gRPC code)、path 等。

用法

import (
	"github.com/fireflycore/go-micro/logger"
	"github.com/fireflycore/go-micro/middleware/grpc" // 别名通常为 gm
	"google.golang.org/grpc"
)

// 创建 gRPC Server 时注入
accessLog := logger.NewAccessLogger(zl)
s := grpc.NewServer(
	grpc.UnaryInterceptor(gm.NewAccessLogger(accessLog)),
)
2. Validation 映射 (ValidationErrorToInvalidArgument)

protovalidate.ValidationError 统一转换为 codes.InvalidArgument,避免在上层重复判断。

3. OpenTelemetry gRPC 埋点(StatsHandler)

NewOtelServerStatsHandler 返回 stats.Handler,用于 grpc.StatsHandler(...) 挂载到服务端,自动完成 trace/metrics 采集与 W3C traceparent 传播。

组合使用

通常建议使用 grpc.ChainUnaryInterceptor 组合多个中间件:

s := grpc.NewServer(
    grpc.StatsHandler(gm.NewOtelServerStatsHandler()),
    grpc.ChainUnaryInterceptor(
        gm.ValidationErrorToInvalidArgument(),
        gm.NewAccessLogger(accessLog),
    ),
)

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewAccessLogger added in v1.1.8

func NewAccessLogger(log *logger.AccessLogger) grpc.UnaryServerInterceptor

NewAccessLogger 访问日志中间件

func NewOtelServerStatsHandler added in v1.1.8

func NewOtelServerStatsHandler(opts ...otelgrpc.Option) stats.Handler

func ValidationErrorToInvalidArgument added in v1.1.7

func ValidationErrorToInvalidArgument() grpc.UnaryServerInterceptor

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL