前言上一章我们主要介绍了OpenTelemetry客户端的一些数据生成方式,但是客户端的数据最终还是要发送到服务端进行统一采集整合,从而你可以看到完整的调用链、指标和其他信息。因此,本章主要介绍服务端的采集能力。客户端数据上报客户端会按照一定的规则生成调用链、指标、日志等信息,然后推送到远程服务器。一般来说,OpenTelemetry的server-client请求数据传输的协议标准是Http和Grpc协议,这两种数据协议的实现应该包含在各个语言的sdk和server实现中。按照常理,调用链等数据量巨大,所以在客户端会有一些类似Batch的操作选项。该选项会将多个Span信息整合在一起,一起发送,减少网络侧的损耗。.我们将这种客户端上报的数据统称为export,同时将实现这些上报的组件统称为exporter。导出器将包含不同的数据协议和格式,默认格式是OTLP。OTLPOTLP是指OpenTelemetryProtocol,即OpenTelemetry数据协议。OTLP规范规定了遥测数据在客户端和服务采集端之间的编码、传输和传递。OTLP从实现上分为OTLP/gRPC和OTLP/HTTP。OTLP/HTTPOTLP/HTTP在数据传输时支持两种模式:binary和jsonbinary使用proto3编码标准,请求头中必须标明Content-Type:application/x-protobufJSON格式使用定义的JSONMapping进行处理proto3标准中Protobuf与JSON的映射关系。OTLP/gRPC普通请求:客户端与服务端建立连接后,客户端可以不断向服务端发送请求,服务端会一一响应。并发请求:客户端可以在服务器响应之前发送下一个请求以增加并发量。CollectorCollector简介OpenTelemetry提供了一个开源的Collector来报告、收集、处理和输出客户端数据。otel收集器是一个支持多种协议和数据源的“通用”收集器。可以说他可以直接支持很多你能想到的数据源。otel收集器是用golang实现的,写文章的时候已经发布了rc1.0.0版本。Collector分为两个项目opentelemetry-collector和opentelemetry-collector-contrib。opentelemetry-collector是核心项目,实现了collector的基本机制和一些基础组件,而opentelemetry-collector-contrib会有大量的组件,这些组件因为各种原因不方便直接集成到核心collector中,所以单独构建了一个项目来集成这些组件。我们后续的collector功能介绍和验证会基于opentelemetry-collector-contrib。使用otelcollector的Collector组成非常清晰,分为:ReceiverProcessorExporterExtensionService整个配置文件的样例如下:receivers:otlp:protocols:grpc:http:exporters:jaeger:endpoint:localhost:14250tls:insecure:truelogging:loglevel:debugprocessors:batch:extensions:health_check:pprof:zpages:service:extensions:[pprof,zpages,health_check]pipelines:traces:receivers:[otlp]exporters:[jaeger,logging]处理器:[batch]这个配置是我本地测试用的A配置,这个配置很简单,接收otlphttp/grpc的上报数据,进行批处理,然后输出到控制台log和jaeger。在我们配置好各种数据源和插件之后,我们来配置流水线中使用的数据源和插件。ReceiverReceiver指的是接收者,即采集器接收到的数据源的形式。Receiver可以支持多种数据源,也可以支持pull和push模式。接收器:#数据源:日志fluentforward:endpoint:0.0.0.0:8006#数据源:指标hostmetrics:scrapers:cpu:disk:filesystem:load:memory:network:process:processes:swap:#数据源:tracesjaeger:protocols:grpc:thrift_binary:thrift_compact:thrift_http:#数据源:traceskafka:protocol_version:2.0.0#Datasources:traces,metricsopencensus:#数据源:traces,metrics,logsotlp:protocols:grpc:http:#Datasources:metricsprometheus:config:scrape_configs:-job_name:"otel-collector"scrape_interval:5sstatic_configs:-targets:["localhost:8888"]#Datasources:traceszipkin:以上是一个示例接收器,显示了各种配置用于接收数据源。ProcessorProcessor是一个类似于Receiver和Exportor之间执行的处理数据的插件。可以根据配置中管道的顺序配置多个处理器并依次执行。下面是一些Processor的配置示例:processors:#Datasources:tracesattributes:actions:-key:environmentvalue:productionaction:insert-key:db.statementaction:delete-key:emailaction:hash#Datasources:traces,metrics,logsbatch:#数据源:metricsfilter:metrics:include:match_type:regexpmetric_names:-prefix/.*-prefix_.*#数据源:traces,metrics,logsmemory_limiter:check_interval:5slimit_mib:4000spike_limit_mib:500#数据来源:tracesresource:attributes:-key:cloud.zonevalue:"zone-1"action:upsert-key:k8s.cluster.namefrom_attribute:k8s-clusteraction:insert-key:redundant-attributeaction:delete#数据来源:tracesprobabilistic_sampler:hash_seed:22sampling_percentage:15#数据来源:tracesspan:name:to_attributes:rules:-^\/api\/v1\/document\/(?P
