详解Opentelemetry Collector采集器

目录
  • 前言
  • 客户端数据上报
    • OTLP
      • OTLP/HTTP
      • OTLP/gRPC
  • Collector
    • Collector简介
    • Collector使用
      • Receiver
      • Processor
      • Exportor
      • Extension
      • Service
    • 个性化的Collector
  • 总结

前言

上个篇章中我们主要介绍了OpenTelemetry的客户端的一些数据生成方式,但是客户端的数据最终还是要发送到服务端来进行统一的采集整合,这样才能看到完整的调用链,metrics等信息。因此在这个篇章中会主要介绍服务端的采集能力。

客户端数据上报

客户端会根据一定的规则生成调用链,metrics,logs等信息,然后就会将其推送到服务器远端。一般来说OpenTelemetry的服务端客户端传递数据的请求协议标准是HttpGrpc协议,在各语言的sdk以及服务端实现中都应该包含这两个数据协议的的实现。

按照常理来说调用链等数据的数据量极大,因此在客户端就会有一些类似于Batch的操作选项,此选项会将多个Span信息整合到一起一并发送,以减小网络端的损耗。

客户端的这种数据上报我们会统称为export,同时,实现这些上报的组件我们统一称作exportersexporters会包含不同种的数据协议和格式,默认的格式为OTLP

OTLP

OTLP是指OpenTelemetry Protocol,即OpenTelemetry数据协议。OTLP规范规定了客户端和服务采集端之间的遥测数据的编码,传输和投送。

OTLP在实现上分为OTLP/gRPCOTLP/HTTP

OTLP/HTTP

OTLP/HTTP在数据传输的时候支持两种模式:二进制和json

二进制使用proto3编码标准,且必须在请求头中标注Content-Type: application/x-protobuf

JSON格式使用proto3标准定义的JSON Mapping来处理ProtobufJSON之间的映射关系。

OTLP/gRPC

普通请求:在客户端和服务端建立连接后,客户端可以持续不断的发送请求到服务端,服务端会一一回应。 并发请求:客户端可以在服务端未回应前发送下一个请求,以此提高并发量。

Collector

Collector简介

OpenTelemetry提供了开源的Collector来进行客户端数据的上报采集,处理和输出。otel collector是一个支持了多种协议,多种数据源的“万能”采集器。可以说是你能想到的很多数据源他都能够直接支持。

otel collector使用golang实现,到文章目前编写的时候已经发布了1.0.0的rc版本。Collector区分为了两个项目opentelemetry-collectoropentelemetry-collector-contribopentelemetry-collector是核心项目,实现了collector的基本机制以及一些基础的组件,而opentelemetry-collector-contrib则会有大量的组件,而这些组件由于不同原因不便被直接集成到核心的collector中,因此单独构建了一个项目来集成这些组件。我们后续的collector功能介绍和验证都会基于opentelemetry-collector-contrib来进行。

Collector使用

otel collector的组成是很清晰的,分为:

  • Receiver
  • Processor
  • Exporter
  • Extension
  • Service

整个配置文件的样例如下:

receivers:
  otlp:
    protocols:
      grpc:
      http:
exporters:
  jaeger:
    endpoint: localhost:14250
    tls:
      insecure: true
  logging:
    loglevel: debug
processors:
  batch:
extensions:
  health_check:
  pprof:
  zpages:
service:
  extensions: [pprof, zpages, health_check]
  pipelines:
    traces:
      receivers: [otlp]
      exporters: [jaeger, logging]
      processors: [batch]

这个配置是我本地测试时使用的一个配置,这个配置很简单,接收otlp http/grpc的上报数据,进行batch处理,然后输出到控制台日志和jaeger中。我们将各项数据源和插件配置完成后,在流水线中配置使用的数据源和插件。

Receiver

Receiver是指的接收器,即collector接收的数据源的形式。Receiver可以支持多个数据源,也能支持pullpush两种模式。

receivers:
  # Data sources: logs
  fluentforward:
    endpoint: 0.0.0.0:8006
  # Data sources: metrics
  hostmetrics:
    scrapers:
      cpu:
      disk:
      filesystem:
      load:
      memory:
      network:
      process:
      processes:
      swap:
  # Data sources: traces
  jaeger:
    protocols:
      grpc:
      thrift_binary:
      thrift_compact:
      thrift_http:
  # Data sources: traces
  kafka:
    protocol_version: 2.0.0
  # Data sources: traces, metrics
  opencensus:
  # Data sources: traces, metrics, logs
  otlp:
    protocols:
      grpc:
      http:
  # Data sources: metrics
  prometheus:
    config:
      scrape_configs:
        - job_name: "otel-collector"
          scrape_interval: 5s
          static_configs:
            - targets: ["localhost:8888"]
  # Data sources: traces
  zipkin:

上述是一个receiver的样例,里面展示了多种不同的接收数据源的配置。

Processor

Processor是在ReceiverExportor之间执行的类似于处理数据的插件。Processor可以配置多个并且根据在配置中pipeline的顺序,依次执行。

以下是一些Processor的配置样例:

processors:
  # Data sources: traces
  attributes:
    actions:
      - key: environment
        value: production
        action: insert
      - key: db.statement
        action: delete
      - key: email
        action: hash
  # Data sources: traces, metrics, logs
  batch:
  # Data sources: metrics
  filter:
    metrics:
      include:
        match_type: regexp
        metric_names:
          - prefix/.*
          - prefix_.*
  # Data sources: traces, metrics, logs
  memory_limiter:
    check_interval: 5s
    limit_mib: 4000
    spike_limit_mib: 500
  # Data sources: traces
  resource:
    attributes:
      - key: cloud.zone
        value: "zone-1"
        action: upsert
      - key: k8s.cluster.name
        from_attribute: k8s-cluster
        action: insert
      - key: redundant-attribute
        action: delete
  # Data sources: traces
  probabilistic_sampler:
    hash_seed: 22
    sampling_percentage: 15
  # Data sources: traces
  span:
    name:
      to_attributes:
        rules:
          - ^\/api\/v1\/document\/(?P<documentId>.*)\/update$
      from_attributes: ["db.svc", "operation"]
      separator: "::"

Exportor

Exportor是指的导出器,即collector输出的数据源的形式。Exportor可以支持多个数据源,也能支持pullpush两种模式。

以下是一些Exportor的样例:

exporters:
  # Data sources: traces, metrics, logs
  file:
    path: ./filename.json
  # Data sources: traces
  jaeger:
    endpoint: "jaeger-all-in-one:14250"
    tls:
      cert_file: cert.pem
      key_file: cert-key.pem
  # Data sources: traces
  kafka:
    protocol_version: 2.0.0
  # Data sources: traces, metrics, logs
  logging:
    loglevel: debug
  # Data sources: traces, metrics
  opencensus:
    endpoint: "otelcol2:55678"
  # Data sources: traces, metrics, logs
  otlp:
    endpoint: otelcol2:4317
    tls:
      cert_file: cert.pem
      key_file: cert-key.pem
  # Data sources: traces, metrics
  otlphttp:
    endpoint: https://example.com:4318/v1/traces
  # Data sources: metrics
  prometheus:
    endpoint: "prometheus:8889"
    namespace: "default"
  # Data sources: metrics
  prometheusremotewrite:
    endpoint: "http://some.url:9411/api/prom/push"
    # For official Prometheus (e.g. running via Docker)
    # endpoint: 'http://prometheus:9090/api/v1/write'
    # tls:
    #   insecure: true
  # Data sources: traces
  zipkin:
    endpoint: "http://localhost:9411/api/v2/spans"

Extension

Extensioncollector的扩展,要注意Extension不处理otel的数据,他负责处理的是一些类似健康检查服务发现,压缩算法等等的非otel数据的扩展能力。

一些Extension样例:

extensions:
  health_check:
  pprof:
  zpages:
  memory_ballast:
    size_mib: 512

Service

上述的这些配置都是配置的具体数据源或者是插件本身的应用配置,但是实际上的生效与否,使用顺序都是在Service中配置。主要包含如下几项:

  • extensions
  • pipelines
  • telemetry

Extensions是以数组的形式配置的,不区分先后顺序:

service:
  extensions: [health_check, pprof, zpages]

pipelines配置区分tracemetricslogs,每一项都可以配置单独的receiversprocessorsexportors,均是以数组的形式配置,其中processors的数组配置需要按照想要的执行顺序来配置,而其他的则无关顺序。

service:
  pipelines:
    metrics:
      receivers: [opencensus, prometheus]
      exporters: [opencensus, prometheus]
    traces:
      receivers: [opencensus, jaeger]
      processors: [batch]
      exporters: [opencensus, zipkin]

telemetry配置的是collector本身的配置,主要是logmetrics,下列配置就是配置了collector自身的日志级别和metrics的输出地址:

service:
  telemetry:
    logs:
      level: debug
      initial_fields:
        service: my-instance
    metrics:
      level: detailed
      address: 0.0.0.0:8888

个性化的Collector

如果你想要自定义个性化的Collector包含你想要的ReceiverExportor等,一种终极的方案就是下载源代码,然后配置golang的环境,根据自己的需求修改代码并且编译。这种方式能够完美自定义,但是会比较麻烦,特别是对于非golang的开发者,还需要搭建一套golang的环境实在是非常麻烦。

OpenTelemetry提供了一种ocb(OpenTelemetry Collector Builder)的方式来方便大家自定义Collector。感兴趣的朋友可以参照此文档使用。

总结

collector是整个调用链重要的一环,所有的客户端的数据都需要一个统一的采集器来进行接收数据并进行一定的清洗工作和转发工作。目前的OpenTelemetry Collector做了非常多的工作来保持兼容性和性能。期待OpenTelemetry Collector的1.0.0版本能够早日正式发布。

以上就是详解Opentelemetry Collector采集器的详细内容,更多关于Opentelemetry Collector采集器的资料请关注我们其它相关文章!

(0)

相关推荐

  • Go使用Gin+mysql实现增删改查的详细实例

    目录 0.前置知识 1.架构 2.功能模块 3.实现流程 4.代码 5.结果 总结 0.前置知识 Go中的struct. mysql.Gin框架. Web基础. 1.架构 使用mysql作为数据库,Gin作为Web框架. 2.功能模块 1.自定义Person结构体 2.实现对Person的增删改查. 根据id查询或查询所有 插入 修改 删除 3.实现流程 1.建立数据库连接池db,然后连接指定的数据库. 2.编写Web接口(增删改查) 3.通过postman测试或者直接网页请求测试. 4.代码

  • OpenTelemetry-go的SDK使用方法详解

    目录 例子 原理 方法使用 newExporter newResource trace.NewTracerProvider otel 注意 获取当前跨度 设置span状态 设置span属性 记录错误 设置活动 tp.Shutdown 2019年5月,OpenCensus 和 OpenTracing形成了 OpenTelemetry(简称 OTel) 也就是说,我们在使用链路追踪SDK的时候就需要使用OpenTelemetry的新规范.OpenTelemetry帮我们实现了相应语言的SDK,所以我

  • golang使用excelize库操作excel文件的方法详解

    目录 1. 准备工作 2. 使用excelize读取excel文件 3. 使用excelize将数据写入excel文件 4. 参考资料: 总结 ​ 今天我们讲一下使用excelize操作excel,首先熟悉一下excel的文件构成,excel分为以下结构: ​ 1. excel文件,2. sheet页, 3. 行row, 4. 列col, 5. 项cell ​ 对应结构如下图: 1. 准备工作 我们读取的文件格式如上图所示, 我们先定义一个StockInfo结构来存储相应字段 type Stoc

  • Go语言调用ffmpeg-api实现音频重采样

    目录 前言 环境部署 代码 总结 前言 最近对golang处理音视频很感兴趣,对golang音视频常用库goav进行了一番研究.自己写了一个wav转采样率的功能.给大家分享一下,中间遇到了不少坑,解决的过程中还是蛮有意思的. 环境部署 代码运行在Ubuntu环境上,需要使用到goav,goav是对ffmpeg源码的golang封装. goav地址:https://github.com/giorgisio/goav goav安装如下 sudo apt-get -y install autoconf

  • 详解Opentelemetry Collector采集器

    目录 前言 客户端数据上报 OTLP OTLP/HTTP OTLP/gRPC Collector Collector简介 Collector使用 Receiver Processor Exportor Extension Service 个性化的Collector 总结 前言 上个篇章中我们主要介绍了OpenTelemetry的客户端的一些数据生成方式,但是客户端的数据最终还是要发送到服务端来进行统一的采集整合,这样才能看到完整的调用链,metrics等信息.因此在这个篇章中会主要介绍服务端的采

  • 详解IDEA中类加载器调用getResourceAsStream()方法需注意的问题

    当我们使用类加载器调用getResourceAsStream()时,经常会出现空指针异常,明明路径名称都没有问题,为什么就是报空指针异常呢? 查了一下getResourceAsStream()的用法: 1. Class.getResourceAsStream(String path) : path 不以'/'开头时默认是从此类所在的包下取资源,以'/'开头则是从ClassPath根下获取.其只是通过path构造一个绝对路径,最终还是由ClassLoader获取资源. 2. Class.getCl

  • javaCV开发详解之收流器实现

    本章基于javaCV实现收流器功能和录制功能 补充:基于本功能可以实现远程流媒体服务器实时视频录制到本地 一.开发所依赖的包 javacv.jar,javacpp.jar,ffmpeg.jar,ffmpeg-系统平台.jar,opencv.jar,opencv-系统平台.jar. 其中ffmpeg-系统平台.jar,opencv-系统平台.jar中的系统平台根据开发环境或者测试部署环境自行更改为对应的jar包,比如windows7 64位系统替换为ffmpeg-x86-x64.jar 本章使用w

  • 详解Linux下调试器GDB的基本使用方法

    一.概述 GDB调试的三种方式: 1. 目标板直接使用GDB进行调试. 2. 目标板使用gdbserver,主机使用xxx-linux-gdb作为客户端. 3. 目标板使用ulimit -c unlimited,生成core文件:然后主机使用xxx-linux-gdb ./test ./core. 二.gdb调试 构造测试程序如下main.c和sum.c如下: main.c:#include <stdio.h> #include <stdlib.h> extern int sum(

  • Python语法详解之decorator装饰器

    python 是一门优雅的语言,有些使用方法就像魔法一样.装饰器(decorator)就是一种化腐朽性为神奇的技巧.最近一直都在使用 Tornado 框架,一直还是念念不忘 Flask .Flask 是我最喜欢的 Python 框架,最早被它吸引也是源自它使用装饰器这个语法糖(Syntactic sugar)来做 Router,让代码看上去就感觉甜甜的. Tornado 中的 Router 略显平淡,怀念 Flask 的味道,于是很好奇的想知道 Flask 是如何使用这个魔法.通过阅读 Flas

  • 详解SpringMVC HandlerInterceptor拦截器的使用与参数

    目录 拦截器概念: 拦截器VS过滤器 自定义拦截器开发过程: 拦截器配置项: 多拦截器配置: 拦截器概念: 拦截器( Interceptor)是一种动态拦截方法调用的机制,请求处理过程解析 核心原理: AOP思想 拦截器链:多个拦截器按照一定的顺序,对原始被调用功能进行增强 作用: 在指定的方法调用前后执行预先设定后的的代码 阻止原始方法的执行 拦截器VS过滤器 归属不同: 过滤器属于Servlet技术, 拦截器属于SpringMVC技术拦截内容不同: 过滤器对所有访问进行增强, 拦截器仅针对S

  • 详解Flutter中视频播放器插件的使用教程

    目录 创建一个新的视频播放器 添加播放和暂停按钮 创建一个快进 添加一个视频进度指示器 应用视频的字幕 结论 您已经看到很多包含视频内容的应用程序,比如带有视频教程的食谱应用程序.电影应用程序和体育相关的应用程序.您是否想知道如何将视频内容添加到您的下一个Flutter应用程序中? 从头开始实现视频功能将是一项繁重的任务.但有几个插件可以让开发者的生活变得轻松.视频播放器插件是可用于 Flutter 的最佳插件之一,可满足这一要求. 在这篇文章中,您将学习如何应用视频播放器插件以及控制视频播放器

  • 详解利用上下文管理器扩展Python计时器

    目录 一个 Python 定时器上下文管理器 了解 Python 中的上下文管理器 理解并使用 contextlib 创建 Python 计时器上下文管理器 使用 Python 定时器上下文管理器 写在最后 上文中,我们一起学习了手把手教你实现一个 Python 计时器.本文中,云朵君将和大家一起了解什么是上下文管理器 和 Python 的 with 语句,以及如何完成自定义.然后扩展 Timer 以便它也可以用作上下文管理器.最后,使用 Timer 作为上下文管理器如何简化我们自己的代码. 上

  • 详解SpringMVC的拦截器参数及拦截器链配置

    目录 一.拦截器参数 二.拦截器链配置 一.拦截器参数 前置处理 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("preHandle..."); return true; } 参数: ■ request:请求对象 ■ response:响应对象 ■ handle

  • 详解SpringMVC中拦截器的概念及入门案例

    目录 一.拦截器概念 二.拦截器入门案例 一.拦截器概念 拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行 作用: 在指定的方法调用前后执行预先设定的代码 阻止原始方法的执行 拦截器与过滤器区别  归属不同:Filter属于Servlet技术,Interceptor属于SpringMVC技术 拦截内容不同:Filter对所有的访问进行增强,Interceptor仅针对SpringMVC的访问进行增强 二.拦截器入门案例 1.声明拦截器的

随机推荐