首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

使用 SpanMetrics Connector 将 OpenTelemetry 跟踪转换为指标

编程知识
2024年08月26日 10:41

原文:https://last9.io/blog/convert-opentelemetry-traces-to-metrics-using-spanconnector/

如果您已经实施了跟踪但缺乏强大的指标功能怎么办? SpanConnector 是一个通过将跟踪数据转换为可操作指标来弥补这一差距的工具。这篇文章详细介绍了 SpanConnector 的工作原理,提供了有关其配置和实现的指南。

OpenTelemetry 的一个常见问题是语言支持跟踪检测(Trace埋点),但指标方面正在进行中或尚不可用。在这种情况下,您可以使用 SpanConnector 将跟踪生成的跨度(Span)转换为指标。

什么是 Connector?

SpanConnector 是 OpenTelemetry Collector 中的一个组件,允许您从跨度(Span)数据中获取指标。当您拥有强大的跟踪功能但您的语言或框架缺乏原生指标支持时,这尤其有用。

将跟踪(Trace)转换为指标可以提供有关系统性能和运行状况的宝贵见解,而无需单独的插桩埋点。这种统一的方法创建了更全面的可观测性视野,并减少了管理两个不同埋点系统的开销。

SpanMetrics 连接器的工作原理

SpanMetrics 相关配置

聚合跨度(Span)数据中的请求(Request)、错误(Error)和持续时间(Duration) (R.E.D) OpenTelemetry 指标。

connectors:
  spanmetrics:
    histogram:
      explicit:
        buckets: [100us, 1ms, 2ms, 6ms, 10ms, 100ms, 250ms]
    dimensions:
      - name: http.method
        default: GET
      - name: http.status_code
      - name: host.name
    exemplars:
      enabled: true
    dimensions_cache_size: 1000
    aggregation_temporality: "AGGREGATION_TEMPORALITY_CUMULATIVE"
    metrics_flush_interval: 15s
    metrics_expiration: 5m
    events:
      enabled: true
      dimensions:
        - name: exception.type
        - name: exception.message
    resource_metrics_key_attributes:
      - service.name
      - telemetry.sdk.language
      - telemetry.sdk.name

了解 SpanMetrics 配置

让我们分解一下此配置的关键部分:

  • Histogram Buckets:histogram.explicit.buckets 字段定义指标的延迟桶。这使您可以查看请求持续时间的分布。
  • Dimensions:这些是 Span 中的属性,将用于为指标创建标签。在此示例中,我们使用 http.methodhttp.status_code 和 host.name
  • Exemplars:启用后,您可以将指标链接回特定的跟踪示例,从而为您的指标提供更多上下文。
  • Dimensions Cache:设​​置要存储的“维度组合”的最大数量。它有助于管理内存使用情况。
  • Aggregation Temporality:这决定了指标如何随时间聚合。 “CUMULATIVE” 意味着指标从流程开始就累积。
  • Metrics Flush Interval:从连接器生成指标的频率。
  • Metrics Expiration:这定义了指标在未更新时被丢弃之前在内存中保留的时间。
  • Events:启用后,您可以从跨度事件(例如异常)创建指标。
  • Resource Metrics Key Attributes:与跨度(Span)关联的资源中的这些属性将作为标签添加到所有生成的指标中。

使用 SpanMetrics 连接器的好处

  • 统一的可观察性:将跟踪转换为指标可以让您更全面地了解系统的性能,而无需单独的指标检测。
  • 一致性:确保您的指标与来自同一来源的跟踪完美一致。
  • 减少开销:消除了应用程序代码中双重检测(跟踪和指标)的需要。
  • 灵活性:您可以根据您的需求和跨度属性生成自定义指标。

实施 SpanMetrics 的指南

1. 设置 OpenTelemetry 跟踪:首先,确保您的应用程序已正确检测以进行跟踪。

下面是一个使用 Python 的简单示例:

from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import (
    ConsoleSpanExporter,
    BatchSpanProcessor,
)
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter

# Set up the tracer provider
trace.set_tracer_provider(TracerProvider())

# Create an OTLP exporter
otlp_exporter = OTLPSpanExporter(endpoint="http://localhost:4317", insecure=True)

# Create a BatchSpanProcessor and add the exporter to it
span_processor = BatchSpanProcessor(otlp_exporter)

# Add the span processor to the tracer provider
trace.get_tracer_provider().add_span_processor(span_processor)

# Get a tracer
tracer = trace.get_tracer(__name__)

# Use the tracer to create spans in your code
with tracer.start_as_current_span("main"):
    # Your application code here
    pass

2. 安装和配置 OpenTelemetry Collector

a. 下载 OpenTelemetry 收集器:

curl -OL https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.81.0/otelcol-contrib_0.81.0_linux_amd64.tar.gz
tar xzf otelcol-contrib_0.81.0_linux_amd64.tar.gz

b. 创建名为otel-collector-config.yaml的配置文件

receivers:
  otlp:
    protocols:
      grpc:
      http:

processors:
  batch:

connectors:
  spanmetrics:
    histogram:
      explicit:
        buckets: [100us, 1ms, 2ms, 6ms, 10ms, 100ms, 250ms]
    dimensions:
      - name: http.method
        default: GET
      - name: http.status_code
      - name: host.name
    exemplars:
      enabled: true
    dimensions_cache_size: 1000
    aggregation_temporality: "AGGREGATION_TEMPORALITY_CUMULATIVE"
    metrics_flush_interval: 15s
    metrics_expiration: 5m
    events:
      enabled: true
      dimensions:
        - name: exception.type
        - name: exception.message
    resource_metrics_key_attributes:
      - service.name
      - telemetry.sdk.language
      - telemetry.sdk.name

exporters:
  prometheus:
    endpoint: "0.0.0.0:8889"
  logging:
    verbosity: detailed

service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [batch]
      exporters: [logging, spanmetrics]
    metrics:
      receivers: [spanmetrics]
      exporters: [logging, prometheus]

3. 启动 OpenTelemetry 收集器

使用您的配置运行收集器:

./otelcol-contrib --config otel-collector-config.yaml

4. 将跟踪发送到收集器

修改您的应用程序以将跟踪发送到收集器。如果您使用步骤1中的 Python 示例,则您已设置为将跟踪发送到 http://localhost:4317

5. 查看生成的指标

Otel Collector 会在 http://localhost:8889/metrics 公开指标,您可以通过 curl 查看原始指标:

curl http://localhost:8889/metrics

为了获得更用户友好的视图,您可以设置 Prometheus 来抓取这些指标,创建 prometheus.yml 文件:

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'otel-collector'
    static_configs:
      - targets: ['localhost:8889']

启动 Prometheus(假设您已经下载了它):

./prometheus --config.file=prometheus.yml

您现在可以通过 http://localhost:9090 访问 Prometheus UI 来查询和可视化您的指标。

小结

SpanConnector 是 OpenTelemetry 生态系统中的一个强大工具,它弥合了跟踪和指标之间的 gap。通过利用现有跟踪数据生成有意义的指标,您可以增强可观察性策略,而无需额外的埋点开销。这种方法对于过渡到 OpenTelemetry 特别有价值,对于那些指标埋点不太完备的语言,也很有价值。

From:https://www.cnblogs.com/ulricqin/p/18380705
本文地址: http://shuzixingkong.net/article/1454
0评论
提交 加载更多评论
其他文章 在 SQLAlchemy 中实现数据处理的时候,实现表自引用、多对多、联合查询,有序id等常见的一些经验总结
有时候,我们在使用SQLAlchemy操作某些表的时候,需要使用外键关系来实现一对多或者多对多的关系引用,以及对多表的联合查询,有序列的uuid值或者自增id值,字符串的分拆等常见处理操作。
Swahili-text:华中大推出非洲语言场景文本检测和识别数据集 | ICDAR 2024
论文提出了一个专门针对斯瓦希里语自然场景文本检测和识别的数据集,这在当前研究中是一个未充分开发的语言领域。数据集包括976张带标注的场景图像,可用于文本检测,以及8284张裁剪后的图像用于识别。 来源:晓飞的算法工程笔记 公众号 论文: The First Swahili Language Scen
Swahili-text:华中大推出非洲语言场景文本检测和识别数据集 | ICDAR 2024 Swahili-text:华中大推出非洲语言场景文本检测和识别数据集 | ICDAR 2024 Swahili-text:华中大推出非洲语言场景文本检测和识别数据集 | ICDAR 2024
OpenCV开发笔记(七十九):基于Stitcher类实现全景图片拼接
前言 一个摄像头视野不大的时候,我们希望进行两个视野合并,这样让正视的视野增大,从而可以看到更广阔的标准视野。拼接的方法分为两条路,第一条路是stitcher类,第二条思路是特征点匹配。 本篇使用stitcher匹配,进行两张图来视野合并拼接。 Demo 两张图拼接过程 步骤一:打开图片 cv::M
OpenCV开发笔记(七十九):基于Stitcher类实现全景图片拼接 OpenCV开发笔记(七十九):基于Stitcher类实现全景图片拼接 OpenCV开发笔记(七十九):基于Stitcher类实现全景图片拼接
组合逻辑环(Combinational Logic Loop)
组合逻辑电路 组合逻辑电路是数字电子学中一类基本的电路类型,它由一系列逻辑门组成,用于实现特定的逻辑功能。与时序逻辑电路不同,组合逻辑电路的输出完全取决于当前的输入信号,而不受之前输入的影响。换句话说,组合逻辑电路没有记忆功能,输出仅由当前时刻的输入决定。 组合逻辑电路的基本特点: 无记忆性:输出只
《数据资产管理核心技术与应用》读书笔记-第五章:数据服务(二)
《数据资产管理核心技术与应用》是清华大学出版社出版的一本图书,全书共分10章,第1章主要让读者认识数据资产,了解数据资产相关的基础概念,以及数据资产的发展情况。第2~8章主要介绍大数据时代数据资产管理所涉及的核心技术,内容包括元数据的采集与存储、数据血缘、数据质量、数据监控与告警、数据服务、数据权限
《数据资产管理核心技术与应用》读书笔记-第五章:数据服务(二) 《数据资产管理核心技术与应用》读书笔记-第五章:数据服务(二) 《数据资产管理核心技术与应用》读书笔记-第五章:数据服务(二)
【故障公告】博客站点遭遇大规模疑似 CC 攻击
在上周五 12:24-14:05 遭遇大规模 DDoS 攻击后,今天11:40左右开始遭遇疑似大规模 CC 攻击,明显的特征是有很多来自海外各个国家IP的异常高频次访问请求。 虽然我们针对海外访问临时采取了躲避措施,但攻击请求不仅限于海外,我们躲不过去。 非常抱歉,这次攻击给大家带来了麻烦,请大家谅
TwinCAT3 - 实现CiA402
目录1,起缘2,想办法3,开搞3.1,CANOpen通信3.1.1 对象字典3.1.2 通信建立3.2,CiA402伺服状态机3.3,伺服运行3.3.1 操作模式3.3.2 轮廓位置模式3.3.3 轮廓速度模式3.3.4 其他4,用起来 1,起缘 在TwinCAT3项目中涉及到轴运动时,通常做法都是
TwinCAT3 - 实现CiA402 TwinCAT3 - 实现CiA402 TwinCAT3 - 实现CiA402
SpringBoot多环境日志配置
SpringBoot多环境日志配置 SpringBoot 默认使用 LogBack 日志系统 默认情况下,SpringBoot项目的日志只会在控制台输入。 如果想查询历史日志则无法找到,我们需要一个日志系统来统一管理日志。 一般正式项目会有单独日志系统,将日志操作存入数据库。 第一种方式是 在 ap
SpringBoot多环境日志配置 SpringBoot多环境日志配置