OpenTelemetry

概述

OpenTelemetry 的自身定位很明确:数据采集和标准规范的统一,对于数据如何去使用、存储、展示、告警,官方是不涉及的

OpenTelemetry 要解决的是对可观测性的大一统,它提供了一组 API 和 SDK 来标准化遥测数据的采集和传输,opentelemetry 并不想对所有的组件都进行重写,而是最大程度复用目前业界在各大领域常用工具,通过提供了一个安全,厂商中立的能用协议、组件,这样就可以按照需要形成 pipeline 将数据发往不同的后端。

架构图

image.png
  • receivers(接收者): 定义从 client 端的数据要以何种数据模型进行接收, 支持很多种数据模型.
  • processors: 将 receivers 的数据进行某些处理,比如批量、性能分析等.
  • exporters: 将 processors 后的数据导出到特定的后端,比如 metrics 数据存储到 prometheus 中.

OTLP协议: otlp 是 opentelemetry 中比较核心的存在,在遥测数据及 Collector 之间制定了包括编码(encoding)、传输(transport)、传递(delivery)等协议。

image.png

核心概念

  • Specification: 是定义了 API/SDK 及数据模型,所有包含第三方实现的都需要遵循 spec 定义的规范。
  • Semantic Conventions: OpenTelemetry 项目保证所有的 instrumentation(不论任何语言)都包含相同的语义信息
  • Resource: resource 附加于某个 process 产生的所有 trace 的键值对,在初始化阶段指定并传递到 collector 中
  • Baggage: 为添加在 metrics、log、traces 中的注解信息,键值对需要唯一,无法更改
  • Propagators: 传播器,比如在多进程的调用中,开启传播器用于跨服务传播 spanContext。
  • Attributes: 其实就是 tag, 可以给 span 添加 metadata 数据,SetAttributes属性可以多次添加,不存在就添加,存在就覆盖
  • Events: 类似于日志, 比如在 trace 中嵌入请求体跟响应体。
  • Collector: 它负责遥测数据源的接收、处理和导出三部分,提供了与供应商无关的实现。
  • Data sources: OpenTelemetry 提供的数据源, 目前包含:
    • Traces
    • Metrics
    • Logs
    • Baggage

安装配置

wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.41.0/otelcol_0.41.0_linux_amd64.deb
sudo  dpkg -i otelcol_0.39.0_linux_amd64.deb      
sudo systemctl restart otelcol

// 安装完成后配置路径位于
cat /etc/otelcol/config.yaml

配置基于三部分

image.png

receiver 配置

// 使用默认配置创建 otlp 收集器, grpc 使用 0.0.0.0:4317, http 使用 0.0.0.0:4318 
receivers:
  otlp:
    protocols:
      grpc:
      http:

两个模块都可以展开, 分别配置对应项

  • grpc 配置
  • http 配置: 用于 grpc 的补充, 可以用 http/json 模式传递数据
receivers:
  otlp:
    protocols:
      http:
        endpoint: "localhost:4318"
        cors:
          allowed_origins:
            - http://test.com
            # Origins can have wildcards with *, use * by itself to match any origin.
            - https://*.example.com
          allowed_headers:
            - Example-Header
          max_age: 7200

除了 oltp 还支持很多其他的 receivers, 例如:

receivers:
  # Data sources: logs
  fluentforward:
    listenAddress: 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:

Processors

Processors 一般都有自己的默认配置, 但很多都需要配置, 配置完后会覆盖掉默认配置

配置Processor 并不会立马启动, 需要配置 service 模块

一般配置模板

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: "::"

详细配置

Exporters

Exporters 用于将处理好的数据发送到一个或多个 BACKEND, Exporters 一般支持一个或多个 DataSource

配置完通过 service 模块启动

下面提供了所有可用的导出器的基本示例。

exporters:
  # Data sources: traces, metrics, logs
  file:
    path: ./filename.json

  # Data sources: traces
  jaeger:
    endpoint: "http://jaeger-all-in-one:14250"
    tls:
      insecure: true

  # 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:
      insecure: true

  # 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"

  # Data sources: traces
  zipkin:
    endpoint: "http://localhost:9411/api/v2/spans"

Extensions

Extensions 主要用于非 Telemetry 数据处理, 包括运行状况监视、服务发现和数据转发。扩展名是可选

配置完通过 service 模块启动

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

zpages 用于调试安装不同组件的运行状态, 可以通过以下页面查看

关于 memory_ballast 可以参考

通过 service 开启

service:
  # Extensions specified below are going to be loaded by the service in the
  # order given below, and shutdown on reverse order.
  extensions: [memory_ballast, zpages]

service 配置

service 用于配置在Collector中启用哪些组件(receivers、processors、exporters和 extensions)

包含两个部分

  • extensions: 之前已描述
  • pipelines

Pipelines 支持以下类型

  • traces
  • metrics
  • logs

pipeline 由receivers, processors and exporters 组成, 基本配置如下

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

资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,264评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,549评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,389评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,616评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,461评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,351评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,776评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,414评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,722评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,760评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,537评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,381评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,787评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,030评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,304评论 1 252
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,734评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,943评论 2 336

推荐阅读更多精彩内容

  • 我也想好好爱一个人呀❤️什么时候能遇到我的缘呢
    子瞻阅读 119评论 0 0
  • Div{ Width:300px; Height:400px; Background:red; Border:5p...
    一面车包人阅读 113评论 0 0
  • 今天反弹了,不知道是真弹还是假弹,随它去吧,反正没挪腾空间。
    盛小隐阅读 103评论 0 1
  • 每个人都需要为自己的选择买单,被锤,无非是为自己曾经错误的选择买单,没啥可抱怨的。历史上那些睿智的人,总是能在关键...
    amdli阅读 220评论 0 0
  • 人们总是说,第一眼就看上的东西,无论过多久,再次看到还是满心的欢喜。 以前的时候,总是觉得,喜欢的东西一定要拥有,...
    花开花落在人间阅读 109评论 0 0