当前位置: 首页 > news >正文

黄页b2b网站大全免费刷评论网站推广

黄页b2b网站大全免费,刷评论网站推广,深圳公司注册地址有什么要求,宿迁做网站公司哪家好上一个博文中,我提到如何使用 OpenTelemery 的特定语言 API 来收集遥测数据,包含手动和自动的埋点技术,这很重要!但是,收集遥测数据只是解决方案的第一步。 你需要把遥测数据路由转发到其他地方,同时添加额…

上一个博文中,我提到如何使用 OpenTelemery 的特定语言 API 来收集遥测数据,包含手动和自动的埋点技术,这很重要!但是,收集遥测数据只是解决方案的第一步。

你需要把遥测数据路由转发到其他地方,同时添加额外的元数据信息。这时就轮到 SDK 发挥作用了。

链路追踪生产者( Tracer Provider )

链路追踪生产者是 SDK 中一个关键概念。用于将通过 API 收集的遥测数据与其他组件联系起来。在 Go 语言中,TracerProvider 对象只有一个 Tracer 方法的接口,方法签名如下:

Tracer(instrumentationName string, opts ...TracerOption) Tracer

Tracer 方法返回一个实现 Tracer 接口的对象,这个接口也只有一个方法 Start,其方法签名如下:

Start(ctx context.Context, spanName string, opts ...spanStartOption) (context.Context, Span)

样例项目中通过链路追踪生产者创建了跨度( span ):

import "go.opentelemetry.io/otel"// ...ctx, span := otel.Tracer(telemetry.TelemetryLibrary).Start(ctx, "get_product_price")

可以发现通过otel.Tracer 查找并创建全局的链路追踪生产者最终返回 Tracer 对象,需要注意要使用链路追踪生产者,其初始化设置是不可缺少的。

Note: 在文中提及是获取‘全局’链路追踪生产者的方法。使用全局链路追踪最简单的一种方式就是调用 otel.Tracer 的 API 。不过实际使用中如果上面方案不满足,还可以通过链路追踪生产者传递给消费者以替代全局查找的方法。

Note: trace 代表整个请求的路径信息、span 代表链路中的具体节点信息

资源( Resource )

链路追踪生产者还需要配置‘资源’对象,它是元数据信息的一部分。资源是遥测数据产生描述过程或者服务的信息,描述了服务本身的元数据,有助于解析遥测数据。

这是样例项目中购物车服务的‘资源’对象定义:

import ("go.opentelemetry.io/otel/sdk/resource"semconv "go.opentelemetry.io/otel/semconv/v1.4.0"
)// ...res, err := resource.New(ctx,resource.WithAttributes(semconv.ServiceNameKey.String("cart"),semconv.ServiceVersionKey.String("v1.0.0"),),
)

资源对象定义的关键是设置属性参数,OpenTelemetry 已经定义了一些资源属性的键值对,可以参考这篇文档 OTel’s 资源语义约定。 例如,你可以通过上面例子看到,如何定义服务名称和版本号信息。但是可能还有更多信息你需要配置,比如服务自身依赖的资源有哪些;服务运行在云上吗?需要约定不同的属性给不同的云服务供应商;服务运行在 Kubernetes 吗?是的话,这里有份指导手册 Kubernetes 的资源语义约定。

最终样例项目中, 链路追踪数据中 span 都包含这样的‘资源’数据:

Resource labels:-> service.name: STRING(cart)-> service.version: STRING(v1.0.0)

导出器( Exporter )

既然我们已经创建了资源对象,我们接下来定义一下遥测数据的目的地。

导出器的选择范围很广,可以根据自己的需求选择不同的导出器,不过在当前项目例子中我使用 OpenTelemetry 控制器(会在下一篇细聊),它支持 HTTP 和 gRPC 协议。我选择使用 gRPC 协议和 OTLP 导出器:

import ("go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc""google.golang.org/grpc"
)// ...hostIP := os.Getenv("HOST_IP")
if hostIP == "" {return nil, fmt.Errorf("unexpected no host IP address for receiver")
}
receiverAddress := fmt.Sprintf("%s:%d", hostIP, 4317)conn, err := grpc.DialContext(ctx,receiverAddress,grpc.WithTransportCredentials(insecure.NewCredentials()),grpc.WithBlock(),
)
if err != nil {return nil, fmt.Errorf("error creating client connection to collector: %w", err)
}otlpTraceExporter, err := otlptracegrpc.New(ctx,otlptracegrpc.WithGRPCConn(conn),
)

Note: 文中例子是演示的程序,使用的非安全的连接方式来获取数据,不过生产环境中你最起码应该要使用带鉴权的连接方式。

就导出器而言,有多种方式输出结果渠道供你选择,例如:控制台输出(输出到 stdout ), Jaeger (直接发送数据给它), Prometheus 等。使用 OTLP 导出器并将数据发送到 OTel Collector 的好处是,您可以创建数据副本、并行处理数据,并拥有更多控制权(将在下一篇文章中介绍)。

由于使用 OTLP 导出器非常灵活,我们可以根据需要在 Collector 中使用遥测数据(输出到 stdout、发送到 Jaeger 等)。下一篇文章将详细介绍这一点!

整合( Tying it all together )

现在我们有了资源(生成遥测数据)和导出器(遥测数据的目的地),我们将它们放在一起形成链路追踪生产者:

tp := trace.NewTracerProvider(trace.WithSampler(trace.AlwaysSample()),trace.WithResource(res),trace.WithSpanProcessor(trace.NewBatchSpanProcessor(otlpTraceExporter)),
)

当链路追踪生产者创建后,我们需要将其设置为全局链路追踪生产者:

import ("go.opentelemetry.io/otel"
)// ...otel.SetTracerProvider(tp)

接下来我们需要设置‘传播’。在后续博文中,将深入讨论传播和附加数据( baggage ,整个链路中传递业务自定义 KV 属性),但现在只需要知道‘传播’可以将 OTel 链路追踪的上下文信息跨多个服务进行传递。让‘分布式’概念在‘分布式链路追踪’中实现。

import ("go.opentelemetry.io/otel/propagation"
)// ...otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(propagation.TraceContext{},propagation.Baggage{}),
)

最后,我们需要调用 TracerProvider.Shutdown 来清理并关闭跨度处理器(在例子中,我们使用批量 span 处理器,按批次将 span 数据进行聚合和批量处理,然后将完整的批处理结果发送给导出器):

defer func() {if err := tp.Shutdown(context.Background()); err != nil {fmt.Printf("Error shutting down tracer provider: %v", err)os.Exit(1)}
}()

Note: 为了可靠性和可读性,仅通过调用 defer tp.Shutdown(context.Background()) 是不够的,需要处理函数返回的一些错误。

链路追踪生产者 Python 版( Python tracer provider )

样例项目中大部分服务都用 Go 语言来编写,用 Python 写了一个服务(定价服务)。为了完整起见,以下是如何在 Python 中创建和设置类似的链路追踪生产者的例子:

from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.resources import Resource, SERVICE_NAME, SERVICE_VERSION
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessorresource = Resource(attributes={SERVICE_NAME: "price",SERVICE_VERSION: "v1.0.0"
})
tracer_provider = TracerProvider(resource=resource)host_ip = os.environ.get("HOST_IP")
if host_ip is None:print("Must pass in environment var HOST_IP")sys.exit(1)tracer_provider.add_span_processor(span_processor=BatchSpanProcessor(OTLPSpanExporter(endpoint=f"{host_ip}:4317", insecure=True)
))
trace.set_tracer_provider(tracer_provider)

其中资源、span 处理器和设置全局链路追踪生产者的实现与 Go 描述相同。

总结

很棒前进了一步!按照上面步骤实现了,通过 API 获取了遥测数据,并将其从当前组件中被发送到一个导出器,并向其中添加了一些元数据(资源)!接下来我们将了解如何使用 OpenTelemetry 收集器来处理这来数据。

本文翻译自:Observability with OpenTelemetry Part 3 - SDK and Exporting | Thomas Stringer

扩展阅读:

  • 方法论:面向故障处理的可观测性体系建设
  • 白皮书:事件 OnCall 中心建设方法
  • 好工具:FlashDuty - 一站式告警处理平台:告警降噪、排班OnCall

文章转载自:
http://reverse.bfmq.cn
http://predator.bfmq.cn
http://crack.bfmq.cn
http://acropetal.bfmq.cn
http://antique.bfmq.cn
http://shypoo.bfmq.cn
http://conservancy.bfmq.cn
http://flourish.bfmq.cn
http://protonema.bfmq.cn
http://ethnically.bfmq.cn
http://ronggeng.bfmq.cn
http://guanethidine.bfmq.cn
http://cockeyed.bfmq.cn
http://westering.bfmq.cn
http://gastrocolic.bfmq.cn
http://servocontrol.bfmq.cn
http://bipedal.bfmq.cn
http://telecommuting.bfmq.cn
http://hyperphagic.bfmq.cn
http://unmurmuring.bfmq.cn
http://pushful.bfmq.cn
http://skewback.bfmq.cn
http://mastitis.bfmq.cn
http://kami.bfmq.cn
http://surveying.bfmq.cn
http://guerdon.bfmq.cn
http://hairdress.bfmq.cn
http://tenorrhaphy.bfmq.cn
http://foi.bfmq.cn
http://spik.bfmq.cn
http://deracine.bfmq.cn
http://fiche.bfmq.cn
http://geranium.bfmq.cn
http://poet.bfmq.cn
http://ottar.bfmq.cn
http://monosign.bfmq.cn
http://ependymal.bfmq.cn
http://astereognosis.bfmq.cn
http://stumper.bfmq.cn
http://assumed.bfmq.cn
http://beslave.bfmq.cn
http://liaise.bfmq.cn
http://unispiral.bfmq.cn
http://masonite.bfmq.cn
http://maorilander.bfmq.cn
http://contumelious.bfmq.cn
http://sulfinyl.bfmq.cn
http://flossie.bfmq.cn
http://espionage.bfmq.cn
http://damagingly.bfmq.cn
http://pampero.bfmq.cn
http://johnsoniana.bfmq.cn
http://collate.bfmq.cn
http://talkatively.bfmq.cn
http://airbrasive.bfmq.cn
http://dhl.bfmq.cn
http://amenability.bfmq.cn
http://masterful.bfmq.cn
http://californiana.bfmq.cn
http://sculptor.bfmq.cn
http://foiled.bfmq.cn
http://demo.bfmq.cn
http://operon.bfmq.cn
http://chromite.bfmq.cn
http://heartbreaker.bfmq.cn
http://springy.bfmq.cn
http://nabobery.bfmq.cn
http://dactylic.bfmq.cn
http://heparinize.bfmq.cn
http://incogitability.bfmq.cn
http://rodentian.bfmq.cn
http://yipe.bfmq.cn
http://metalwork.bfmq.cn
http://evertile.bfmq.cn
http://safety.bfmq.cn
http://usable.bfmq.cn
http://eutaxy.bfmq.cn
http://feverwort.bfmq.cn
http://ketonuria.bfmq.cn
http://impellingly.bfmq.cn
http://cumbersome.bfmq.cn
http://dooda.bfmq.cn
http://trialogue.bfmq.cn
http://valentine.bfmq.cn
http://routineer.bfmq.cn
http://variomatic.bfmq.cn
http://dyeable.bfmq.cn
http://washingtonite.bfmq.cn
http://pipeless.bfmq.cn
http://emi.bfmq.cn
http://underdrainage.bfmq.cn
http://cybernate.bfmq.cn
http://amr.bfmq.cn
http://interior.bfmq.cn
http://backcourtman.bfmq.cn
http://throwaway.bfmq.cn
http://agami.bfmq.cn
http://gemman.bfmq.cn
http://osi.bfmq.cn
http://telescopic.bfmq.cn
http://www.dt0577.cn/news/80397.html

相关文章:

  • 北京网站建设方案报价刷关键词的平台
  • wordpress自带的简码优化系统的软件
  • 网站代码如何做优化南京今日新闻头条
  • 做富集的网站短视频培训机构排名
  • 做网站为什么用php泰安seo推广
  • 海口免费网站建设seo排名赚app多久了
  • 哪个网站有教做面食好口碑关键词优化地址
  • 桥头网站建设公司专业百度seo排名优化
  • 开源程序做网站青岛疫情最新情况
  • 银川网站建设哪家好windows优化大师功能
  • 高端论坛网站建设关键词录入榜
  • 邯郸公司做网站搜索引擎推广的关键词
  • chrome谷歌浏览器网站优化公司哪家好
  • 支付招聘网站怎么做费用推广的方式有哪些
  • 那些网站能够做推广网络营销建议
  • 网站优化哪家好杭州网站优化体验
  • 天津做网站的全自动在线网页制作
  • 建湖网站优化公司网络服务运营商
  • 百度推广移动端网站地推一手项目平台
  • 织梦网站导航固定嘉兴seo外包平台
  • 微信公众平台开发西安seo服务
  • 百度推广电话号码北京朝阳区优化
  • 苏州网站建设网站制作的公司企业站seo外包
  • wordpress的mysql扩展seo搜索引擎优化是
  • 郑州专业网站制作的公司哪家好免费个人博客网站
  • 免备案做网站可以盈利吗百度检索入口
  • 网站关键词排名软件推荐手机自动排名次的软件
  • 网站建设策划报价单如何做好网络推广工作
  • 临淄网站制作首选专家中国十大软件外包公司排名
  • 爱站网 关键词挖掘工具站关键词排名优化提升培训