发射器传送范围
来源:stackoverflow
时间:2024-03-19 20:00:34 357浏览 收藏
在 Go 中使用 Jaeger 时,可以通过调整配置来优化数据传输范围。通过设置 Sampler 和 Reporter 配置,可以控制向 Jaeger 后端发送数据的采样率和目标地址。例如,通过将 Sampler 的 Type 设置为 "const",可以指定恒定的采样率,确保所有跨度都发送到 Jaeger。此外,通过指定 LocalAgentHostPort,可以指定 Jaeger 代理的 IP 地址和端口,从而确定跨度发送的目标。
我正在尝试在 go 中与 jaeger 一起使用仪器。
我正在像这样使用 docker 运行 jaeger 后端(如 https://www.jaegertracing.io/docs/1.15/getting-started/ 中所述):
docker run -d --name jaeger \ -e collector_zipkin_http_port=9411 \ -p 5775:5775/udp \ -p 6831:6831/udp \ -p 6832:6832/udp \ -p 5778:5778 \ -p 16686:16686 \ -p 14268:14268 \ -p 9411:9411 \ jaegertracing/all-in-one:1.15
但是,运行以下 go 代码后,我无法在 http://localhost:16686 的 jaeger ui 中看到跨度,并且我不确定这段代码有什么问题?我从一段类似的 python 代码开始,它能够在 jaeger ui 上发布跨度。
package main import ( "fmt" "io" opentracing "github.com/opentracing/opentracing-go" jaeger "github.com/uber/jaeger-client-go" jaegercfg "github.com/uber/jaeger-client-go/config" ) func initJaeger(service string) (opentracing.Tracer, io.Closer) { agentIP := "localhost" agentPort := "5775" so := jaeger.SamplerOptionsFactory{} logger := jaeger.StdLogger logger.Infof("Sending Traces to %s %s", agentIP, agentPort) cfg := &jaegercfg.Configuration{ Sampler: &jaegercfg.SamplerConfig{ Type: "const", Param: 1, Options: []jaeger.SamplerOption{so.Logger(logger)}, }, ServiceName: service, Reporter: &jaegercfg.ReporterConfig{ LogSpans: true, LocalAgentHostPort: agentIP + ":" + agentPort, }, } tracer, closer, err := cfg.NewTracer(jaegercfg.Logger(logger)) if err != nil { panic(fmt.Sprintf("ERROR: cannot init Jaeger: %v\n", err)) } opentracing.SetGlobalTracer(tracer) return opentracing.GlobalTracer(), closer } func main() { tracer, closer := initJaeger("foo-go-service") span := tracer.StartSpan("GoTestSpan") var myMap = make(map[string]interface{}) myMap["foo"] = 42 myMap["bar"] = "42" span.LogKV(myMap) childSpanRef := opentracing.ChildOf(span.Context()) childSpan := tracer.StartSpan("GoChildSpan", childSpanRef) var myMap2 = make(map[string]interface{}) myMap2["foo2"] = 42 myMap2["bar2"] = "42" childSpan.LogKV(myMap2) closer.Close() }
我正在此处挖掘文档 https://godoc.org/github.com/uber/jaeger-client-go 以及此处的开放跟踪项目的文档 https://godoc.org/github.com/ opentracing/opentracing-go,但我对术语和库函数/方法有点困惑。
- 我想将“通用”事件发布到 jaeger 后端并在 jaeger ui 中查看这些事件。
- 我还想使用某种请求结构的自动包装器来发布“http 请求”事件,但目前即使是简单/通用事件也很好。
解决方案
我能够发布一些跨度,以便我可以在 http://localhost:16686 上看到它们
- 我们应该在 span 上使用
setoperationname
,以便我们可以在 ui 上使用人类可读的名称来识别它 - 我们还应该推迟
span.finish()
调用,这似乎就是我在 ui 上看不到任何内容的原因
这是更新后的主要功能:
func main() { tracer, closer := initJaeger("foo-go-service") defer closer.Close() span := tracer.StartSpan("GoTestSpan") defer span.Finish() span.SetOperationName("opNameGoTestSpan") var myMap = make(map[string]interface{}) myMap["foo"] = 42 myMap["bar"] = "42" span.LogKV(myMap) // time.Sleep(2 * time.Second) childSpanRef := opentracing.ChildOf(span.Context()) childSpan := tracer.StartSpan("GoChildSpan", childSpanRef) defer childSpan.Finish() childSpan.SetOperationName("opNameGoChildSpan") var myMap2 = make(map[string]interface{}) myMap2["foo2"] = 42 myMap2["bar2"] = "42" childSpan.LogKV(myMap2) }
理论要掌握,实操不能落!以上关于《发射器传送范围》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!
-
502 收藏
-
502 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
139 收藏
-
204 收藏
-
325 收藏
-
477 收藏
-
486 收藏
-
439 收藏
-
357 收藏
-
352 收藏
-
101 收藏
-
440 收藏
-
212 收藏
-
143 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 508次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习