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

news/2024/9/20 5:05:54/文章来源:https://www.cnblogs.com/ulricqin/p/18380705

原文: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.methoddefault: GET- name: http.status_code- name: host.nameexemplars:enabled: truedimensions_cache_size: 1000aggregation_temporality: "AGGREGATION_TEMPORALITY_CUMULATIVE"metrics_flush_interval: 15smetrics_expiration: 5mevents:enabled: truedimensions:- name: exception.type- name: exception.messageresource_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 herepass

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.methoddefault: GET- name: http.status_code- name: host.nameexemplars:enabled: truedimensions_cache_size: 1000aggregation_temporality: "AGGREGATION_TEMPORALITY_CUMULATIVE"metrics_flush_interval: 15smetrics_expiration: 5mevents:enabled: truedimensions:- name: exception.type- name: exception.messageresource_metrics_key_attributes:- service.name- telemetry.sdk.language- telemetry.sdk.nameexporters:prometheus:endpoint: "0.0.0.0:8889"logging:verbosity: detailedservice: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: 15sscrape_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 特别有价值,对于那些指标埋点不太完备的语言,也很有价值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/787455.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

001、安装thinkphp8

01、在目录右键打开powershell,输入composer,能正常显示 02、输入composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ ,切换到国内镜像 03、输入composer create-project topthink/think PHMTP8创建一个名字叫phmtp8的工程 04、在有composer…

【JS逆向百例】携某 testab 参数补环境详解

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术…

Zotero在我的文库中查看文献所在的分类子文件夹

在我的文库中查找到文献,ubuntu选中后按option+alt,win按ctrl,可以看到所属的分类会黄色高亮。

黎曼积分的轮换对称性

二积分的轮换对称性:积分区域中的变量具有轮换对称性,例如 \(x^2+y^2=1\),将被积函数中的所有变量进行轮换后的积分值相同。(\(\iint_D xyd\sigma \neq \iint_D x^2d\sigma\))例题:三重积分中,积分区域关于 \(x,y,z\) 都具有轮换对称性的例题:三重积分中,积分区域只关…

第十五期 03 Stable Diffusion模型

一:Transformer Transformer是来自 NLP 领域的非常著名的模型方法。Transformer在语言建模和构建对话式 AI 工具方面取得了巨大成功。 在视觉应用中,Transformer 表现出了泛化和自适应的优势,这使得它们非常适合通用学习。 它们比其他技术能够更好地捕捉文本甚至图像中的语义…

AI Agents有哪些风险?哪些措施可以减少风险?

引言 许多人工智能开发者正在创建具有更高自主性、能够访问外部工具或服务,并在可靠适应、规划和开放式长期行动以实现目标方面能力更强的系统。我们将这类系统视为具有相对较高程度的代理性,并将它们称为(人工智能)代理或具有代理性的系统。相对较低程度的代理性系统仅辅助…

Markdown学习(选做)

一.已掌握 1.基本语法 (1)标题: 使用#符号表示标题,#的数量表示标题的级别,最多支持六级标题。 (2)段落: Markdown使用空行来分隔段落。 (3)强调: 使用 * 或_符号表示强调,一个符号表示斜体,两个符号表示加粗。例如: 斜体 加粗 (4)列表:序号 姓名 年龄 职业1 张三 30…

算法与数据结构——内存与缓存

内存与缓存 数组和链表两种数据结构分别代表了“连续存储”和“分散存储”两种物理结构。实际上,物理结构在很大程度上决定了程序对内存和缓存的使用效率,进而影响算法程序的整体性能。 计算机存储设备 计算机中包括三种类型的存储设备:硬盘(hard disk)、内存(random-acc…

SpringBoot - [07] Web入门

题记部分 一、Web 入门SpringBoot将传统Web开发的mvc、json、tomcat等框架整合,提供了spring-boot-starter-web组件,简化了Web应用配置。创建SpringBoot项目勾选SpringWeb选项后,会自动将spring-boot-starter-web组件加入到项目中。spring-boot-starter-web启动器主要包括w…

k8s~ServiceAccount_ClusterRole_ClusterRoleBinding

apisix的k8s服务发现配置 命名空间权限是基于Kubernetes RBAC能力的授权,通过权限设置可以让不同的用户或用户组拥有操作不同Kubernetes资源的权限。Kubernetes RBAC API定义了四种类型:Role、ClusterRole、RoleBinding与ClusterRoleBinding,这四种类型之间的关系和简要说明…

国产化适配——银河麒麟V10(2)

续上文 三、nignx安装 ng版本是:nginx-1.20.2 链接:https://pan.baidu.com/s/1gVJ_YgD-_gyJ6JL2VxoFhA 提取码:bqf4 版本比较老了,大家可以自己去官网下载最新的版本使用。 官网地址:https://nginx.org/en/download.html 1.挂载镜像 mount -t iso9660 /mnt/tools/Kylin-Se…

nessus使用教程心得

安装教程网络一大堆,这里就不多哔哔。点击查看代码 倒计时发USD不符合萨达办法1.输入你注册的账号密码进行登录,进入主页面。 ![](https://img2024.cnblogs.com/blog/3471184/202408/3471184-20240826102025745-788321108.png)2.点击“New Scan”新建一个扫描。 ![](https://…