-
Notifications
You must be signed in to change notification settings - Fork 58
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
如何自訂支援如asynq gRPC: 实现分布式日志跟踪? #123
Comments
@linchao0815 这个场景还没有研究过,我先研究一下具体用法,然后尽快给出一个方案 |
@linchao0815 Hi Q1: 我这里写了一个 Demo 程序,可以参考一下。 Demo: https://github.com/rookie-ninja/rk-demo/tree/master/grpc/v2/asynq-jaeger Q2: 这里是两个 grpc server 相互之间 share same traceId 的 Demo 程序。 |
@dongxuny 非常感謝您的幫助,目前我在測試Q1的回應sample code |
@dongxuny Q2 問題我重新描述,client A是使用http , server B使用grpc , server B如何回應traceId不定義在proto中而附加在http resopnse中, client A第二個request 再利用http headher帶入traceId給sever B,而使jaeger追踨這三個以上的API ? |
用同一个 YAML 这个没问题,我把例子改一下。呼叫其他 Func 原理上一样,我在例子上也加一下,应该就能比较清晰。 |
场景清楚了,我重新整理一下例子吧,这个在现在的 rk-boot 里可以实现。 |
@linchao0815 根据我理解的场景,重新上传了例子,可以参考一下。如果希望 http-server 不创建 trace,而使用 grpc-server 产生的 trace,场景会略有不同,不过还是建议 http-server 创建 trace,跟例子里一样。 https://github.com/rookie-ninja/rk-demo/tree/master/grpc/v2/distributed-log |
@linchao0815 根据需求,更新了例子,参考一下~ |
@dongxuny 我試著利用您的二個例子組合我的需求,但遇到問題, |
@linchao0815 我会 Fork 你的例子,然后做一些修改。 在执行 go run httpclient.go 的时候开始,就生成一个 Trace,然后进行追踪。 |
@linchao0815 这里是我 Fork 了你的项目之后,做的修改,可以参考一下。 https://github.com/dongxuny/grpc_asynq 效果如下图: |
@dongxuny 感謝您的快速回應 |
@linchao0815 根据描述,更新了例子。https://github.com/dongxuny/grpc_asynq 新的例子里,发送 second-enqueue 之前,不会等待 first-enqueue Task 结束。TraceID 在整个生命周期里是唯一的,span.SpanContext().TraceID().String() 这个函数可以在任何地方得到一摸一样的 TraceID。 |
@dongxuny 我參考您的範例試著修改要整合到我的專案,但遇到底層一些panic,我再修改https://github.com/linchao0815/grpc_asynq 模擬, 我有使用https://github.com/linchao0815/protoc-gen-go-asynqgen 來將asynq做類似proto-go 輸出框架,將需要呼叫span相關再gen code中實作,而不在實作API中每個地方都要再呼叫span |
@linchao0815 按照你的思路改了一下 protoc-gen-go-asynqgen |
感謝 大神幫忙! |
@dongxuny 請問在trace中的 ignore: ["/v1/CreateUser"] ,我設定但無效, jaeger中還是會看到 app:
|
@linchao0815 grpc 里 ignore 应该用 grpc 的Path,我给你个例子吧。 |
@linchao0815 这是 ignore 日志的例子,trace 的 ignore 也一样。 https://github.com/rookie-ninja/rk-demo/tree/master/grpc/v2/ignore-middleware gRPC 得用 gRPC 的 Path。 |
@dongxuny 雖然加到 |
@linchao0815 ignore 只会忽略 jaeger,不会影响 API 的调用。你的这个错误是从哪里出来的?有全部的 Stack trace 吗? |
@linchao0815 我重新写了个 trace ignore 的例子,可以对比一下哈。 https://github.com/rookie-ninja/rk-demo/tree/master/grpc/v2/ignore-middleware |
@dongxuny 請參考以下範例 $ go run user-server.go 就會出現以下 2022-10-20T13:58:42.210+0800 ERROR panic/interceptor.go:42 panic occurs: |
@linchao0815 rk-entry 有一个很隐蔽的 Bug,修好了。并且把 rk-xxx 其他 package 的版本也升级了一下。我用你的例子验证了一下,不会再抛出 Panic 了。 升级成下面的版本应该就 OK,可以验证一下。 |
感謝!! |
@dongxuny 我測試以下範例 https://github.com/dongxuny/grpc_asynq |
@dongxuny 請問上面有解? |
@linchao0815 我先研究一下吧,可能会晚一点。 |
@linchao0815 https://github.com/dongxuny/protoc-gen-go-asynqgen 有个 Bug,改了之后,error 能在 jaeger 里查到了。 |
Q1:我有使用 https://github.com/hibiken/asynq 這個套件, 將task 拆分, 造成中斷而無法使用jaeger將後續利用asynq 的task 連結, 請問要如何修改, 我要如何使用將TraceId手動設定到ctx ?我使用rkgrpcctx.AddHeaderToClient(ctx, rkmid.HeaderTraceId, traceId)
Q2: client 二個相依的Grpc call, 如何讓此二個在jaeger中相關(trace Id相同)?
The text was updated successfully, but these errors were encountered: