Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >gRPC: 如何添加 API Tracing(调用链)监控拦截器/中间件?

gRPC: 如何添加 API Tracing(调用链)监控拦截器/中间件?

原创
作者头像
尹东勋
修改于 2021-12-12 16:16:01
修改于 2021-12-12 16:16:01
1K0
举报

介绍

本文将介绍如何在 gRPC 微服务中添加 API Tracing(调用链)拦截器/中间件。也就是可以在 jaeger 里做的 API 监控

什么是 API Tracing(调用链)拦截器/中间件?Tracing(调用链)拦截器会对每一个 API 请求记录 Tracing 数据,用户可以使用类似 Jaeger 工具查看。

我们将会使用 rk-boot 来启动 gRPC 服务。

请访问如下地址获取完整教程:https://rkdev.info/cn https://rkdocs.netlify.app/cn (备用)

安装

代码语言:txt
AI代码解释
复制
go get github.com/rookie-ninja/rk-boot
go get github.com/rookie-ninja/rk-grpc

快速开始

rk-boot 默认会使用 OpenTelemetry-CNCF 来处理 Tracing。

1.创建 boot.yaml

为了验证,我们启动了 commonService,commonService 里包含了一系列常用 API,例如 /rk/v1/healthy。

代码语言:txt
AI代码解释
复制
---
grpc:
  - name: greeter                   # Name of grpc entry
    port: 8080                         # Port of grpc entry
    enabled: true                     # Enable grpc entry
    commonService:
      enabled: true                   # Enable common service for testing
    interceptors:
      tracingTelemetry:
        enabled: true                 # Enable tracing interceptor/middleware
        exporter:
          jaeger:
            agent:
              enabled: true           # Export to jaeger agent

2.创建 main.go

代码语言:txt
AI代码解释
复制
package main

import (
	"context"
	"github.com/rookie-ninja/rk-boot"
	_ "github.com/rookie-ninja/rk-grpc/boot"
)

// Application entrance.
func main() {
	// Create a new boot instance.
	boot := rkboot.NewBoot()

	// Bootstrap
	boot.Bootstrap(context.Background())

	// Wait for shutdown sig
	boot.WaitForShutdownSig(context.Background())
}

3.文件夹结构

代码语言:txt
AI代码解释
复制
$ tree
.
├── boot.yaml
├── go.mod
├── go.sum
└── main.go

0 directories, 4 files

4.本地启动 jaeger

代码语言:txt
AI代码解释
复制
$ docker run -d --name jaeger \
    -e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
    -p 5775:5775/udp \
    -p 6831:6831/udp \
    -p 6832:6832/udp \
    -p 5778:5778 \
    -p 16686:16686 \
    -p 14268:14268 \
    -p 14250:14250 \
    -p 9411:9411 \
    jaegertracing/all-in-one:1.23

5.启动 main.go

代码语言:txt
AI代码解释
复制
$ go run main.go

6.验证

  • 发送请求
代码语言:txt
AI代码解释
复制
$ curl -X GET localhost:8080/rk/v1/healthy
{"healthy":true}
  • 访问 jaeger 主页: http://localhost:16686/

rk-boot 会使用 go.mod 文件中的 module 后缀来命名 Service。举例: 如果你的 go.mod 文件内容如下,则 Service 名字就是 rk-demo

代码语言:txt
AI代码解释
复制
module github.com/rookie-ninja/rk-demo

go 1.16

require (
	github.com/grpc-ecosystem/grpc-gateway/v2 v2.5.0
	github.com/rookie-ninja/rk-boot v1.4.0
	github.com/rookie-ninja/rk-grpc v1.2.15
	google.golang.org/grpc v1.38.0
	google.golang.org/protobuf v1.26.0
)

输出到 Stdout

可以通过修改 boot.yaml 文件来修改输出路径,比如 STDOUT。

  • boot.yaml
代码语言:txt
AI代码解释
复制
---
grpc:
  - name: greeter                   # Name of grpc entry
    port: 8080                         # Port of grpc entry
    enabled: true                     # Enable grpc entry
    commonService:
      enabled: true                   # Enable common service for testing
    interceptors:
      tracingTelemetry:
        enabled: true
        exporter:
          file:
            enabled: true
            outputPath: "stdout"    # Output to stdout

输出到文件

可以通过修改 boot.yaml 文件来保存 Tracing 信息到文件。

  • boot.yaml
代码语言:txt
AI代码解释
复制
---
grpc:
  - name: greeter                             # Name of grpc entry
    port: 8080                                   # Port of grpc entry
    enabled: true                               # Enable grpc entry
    commonService:
      enabled: true                             # Enable common service for testing
    interceptors:
      tracingTelemetry:
        enabled: true
        exporter:
          file:
            enabled: true
            outputPath: "logs/tracing.log"    # Log to files

选项

名字

描述

类型

默认值

grpc.interceptors.tracingTelemetry.enabled

启动调用链拦截器

boolean

false

grpc.interceptors.tracingTelemetry.exporter.file.enabled

启动文件输出

boolean

false

grpc.interceptors.tracingTelemetry.exporter.file.outputPath

输出文件路径

string

stdout

grpc.interceptors.tracingTelemetry.exporter.jaeger.agent.enabled

jaeger agent 作为数据输出

boolean

false

grpc.interceptors.tracingTelemetry.exporter.jaeger.agent.host

jaeger agent 地址

string

localhost

grpc.interceptors.tracingTelemetry.exporter.jaeger.agent.port

jaeger agent 端口

int

6831

grpc.interceptors.tracingTelemetry.exporter.jaeger.collector.enabled

jaeger collector 作为数据输出

boolean

false

grpc.interceptors.tracingTelemetry.exporter.jaeger.collector.endpoint

jaeger collector 地址

string

http://localhost:16368/api/trace

grpc.interceptors.tracingTelemetry.exporter.jaeger.collector.username

jaeger collector 用户名

string

""

grpc.interceptors.tracingTelemetry.exporter.jaeger.collector.password

jaeger collector 密码

string

""

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Gin 框架: 添加调用链(Tracing)中间件
通过一个完整例子,在基于 Gin 框架的微服务中添加调用链(Tracing)中间件。
尹东勋
2021/11/10
1.3K0
Gin 框架: 添加调用链(Tracing)中间件
Echo 框架: 添加调用链(Tracing)中间件
通过一个完整例子,在基于 Echo 框架的微服务中添加调用链(Tracing)中间件。
尹东勋
2021/11/10
5040
Echo 框架: 添加调用链(Tracing)中间件
gorilla/mux 框架(rk-boot): 添加调用链(Tracing)中间件
通过一个完整例子,在基于 gorilla/mux 微服务中添加调用链(Tracing)中间件。
尹东勋
2022/02/14
7380
gorilla/mux 框架(rk-boot): 添加调用链(Tracing)中间件
GoFrame 框架: 添加调用链(Tracing)中间件
通过一个完整例子,在基于 gogf/gf 微服务中添加调用链(Tracing)中间件。
尹东勋
2022/01/01
8280
GoFrame 框架: 添加调用链(Tracing)中间件
gRPC: 如何添加 API 日志拦截器/中间件?
为了验证,我们同时启动了 commonService。commonService 里包含了一系列通用 API。
尹东勋
2021/10/11
9980
gRPC: 如何添加 API 日志拦截器/中间件?
gRPC: 实现 gRPC 超时拦截器
为了验证,我们启动了 commonService,commonService 里包含了一系列常用 API,例如 /rk/v1/gc。
尹东勋
2021/11/15
7530
gRPC: 实现 gRPC 超时拦截器
gRPC: 如何添加 API Prometheus 监控拦截器/中间件?
本文将介绍如何在 gRPC 微服务中添加 API Prometheus(普罗米修斯)拦截器/中间件。也就是可以在 Grafana 里做的 API 监控。
尹东勋
2021/10/15
1.7K0
gRPC: 如何添加 API Prometheus 监控拦截器/中间件?
gRPC: 实现服务端限流
为了验证,我们启动了 commonService,commonService 里包含了一系列常用 API,例如 /rk/v1/healthy。
尹东勋
2021/10/25
1.2K0
gRPC: 实现服务端限流
gRPC: 快速配置通用 API 获取进程元信息
boot.yaml 会告诉 rk-boot 如何启动 gRPC 服务。为了 Demo,除了开启 commonService,我们还开启了如下服务。
尹东勋
2021/12/16
5960
gRPC: 快速配置通用 API 获取进程元信息
gRPC 安全篇-1: 快速配置服务端 CORS
gRPC 协议本身是没有跨域(CORS)问题的,因为无法从浏览器里直接发送 HTTP 请求给 gRPC。
尹东勋
2021/12/07
9730
gRPC 安全篇-1: 快速配置服务端 CORS
Go每日一库之127:rk-boot(快速构建服务)
通过 rk-boot,用户可以通过yaml格式的配置文件启动gRPC、gin、echo、GoFrame、prometheus客户端或自定义入口服务。很容易易编译、运行和调试你的 grpc 服务、grpc 网关、swagger UI 和 rk-tv Web UI。 该库是引用了rookie-ninja组织下面的gRPC、gin、echo、GoFrame和prometheus客户端定制boot包。
luckpunk
2023/09/30
2680
gRPC: 如何实现分布式日志跟踪?
我们会创建 /api/v1/greeter API 进行验证,同时开启 logging, meta 和 tracing 拦截器以达到目的。
尹东勋
2021/10/20
1.1K2
gRPC: 如何实现分布式日志跟踪?
gRPC: 如何在 gRPC 服务中加入 Prometheus 监控?
gRPC 函数的自动监控,将会在后续的文章中介绍,这里我们只介绍如何在 gRPC 代码中,实现 prometheus 监控。
尹东勋
2021/10/10
1.7K0
gRPC: 如何在 gRPC 服务中加入 Prometheus 监控?
gorilla/mux 框架(rk-boot):添加 API 日志中间件
请访问如下地址获取完整教程:https://github.com/rookie-ninja/rk-mux
尹东勋
2022/02/11
4620
gorilla/mux 框架(rk-boot):添加 API 日志中间件
GoFrame 框架:添加 API 日志中间件
通过一个完整例子,在基于 GoFrame 框架的微服务中添加 API 日志中间件。
尹东勋
2021/12/29
4200
GoFrame 框架:添加 API 日志中间件
Echo 框架:添加 HTTP 基本验证中间件
通过一个完整例子,在基于 Echo 框架的微服务中添加 HTTP 基本验证中间件。
尹东勋
2021/11/08
1.1K0
Echo 框架:添加 HTTP 基本验证中间件
gRPC: 快速创建静态文件下载 Web 服务
rk-boot 提供了一个方便的方法,让用户快速实现网页【浏览和下载】静态文件的功能。
尹东勋
2021/12/06
8010
gRPC: 快速创建静态文件下载 Web 服务
Gin 框架:添加 API 日志中间件
请访问如下地址获取完整教程:https://rkdocs.netlify.app/cn
尹东勋
2021/11/03
6150
Gin 框架:添加 API 日志中间件
GRPC: 实现 gRPC 代理
使用 rk-boot 启动的 gRPC 代理有一个限制。只有通过代码形式发送的请求,才可以被代理。grpc-gateway 或者 grpcurl 形式的请求暂时不支持。
尹东勋
2021/11/13
2.6K0
GRPC: 实现 gRPC 代理
GoFrame 框架:优雅关闭进程
rk-boot 是一个可通过 YAML 启动多种 Web 服务的框架。请参考本文最后章节,了解 rk-boot 细节。
尹东勋
2022/01/05
1.8K0
GoFrame 框架:优雅关闭进程
相关推荐
Gin 框架: 添加调用链(Tracing)中间件
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文