Grafana 系列文章(二):使用 Grafana Agent 和 Grafana Tempo 进行 Tracing

news2024/12/23 4:21:42

👉️URL: https://grafana.com/blog/2020/11/17/tracing-with-the-grafana-cloud-agent-and-grafana-tempo/

✍Author: Robert Fratto • 17 Nov 2020

📝Description:

Here's your starter guide to configuring the Grafana Agent to collect traces and ship them to Tempo, our new distributed tracing system.

编者注:代码片段已于 2021-06-23 更新。

早在 3 月份,我们 介绍 了 Grafana Agent,这是 Prometheus 的一个子集,为托管指标而建。它使用了很多与 Prometheus 相同的经过实战检验的代码,可以节省 40%的内存使用。

自推出以来,我们一直在为 Agent 添加功能。现在,新增功能有:集群机制,额外的 Prometheus exporters,以及对 Loki 的支持。

我们的最新功能。Grafana Tempo! 这是一个易于操作、规模大、成本低的分布式追踪系统。

在这篇文章中,我们将探讨如何配置 Agent 来收集跟踪,并将其发送到 Tempo。

配置 Tempo 支持

在你现有的 Agent 配置文件中添加 trace 支持很简单。你所需要做的就是添加一个tempo 块。熟悉 OpenTelemetry Collector 的人可能会认出以下代码块中的一些设置。

# other Agent settings
tempo:
  configs:
  - name: default
    receivers:
      jaeger:
        protocols:
          thrift_compact:
    attributes:
      actions:
        - action: upsert
            key: env
            value: prod
    remote_write:
     - endpoint: tempo-us-central1.grafana.net:443
       basic_auth:
         username: 12345
         # Replace <Grafana API Key> below with an API key that
         # has the "Metrics Publisher" role
         password: <Grafana API Key>

接收器允许 Grafana Agent 接受来自众多系统的追踪数据。我们目前支持从 Jaeger、Kafka、OpenCensus、OTLP 和 Zipkin 接收跨度。

虽然 OpenTelemetry Collector 允许你配置指标和日志接收器,但我们目前只公开了与追踪有关的接收器。我们相信 Agent 内现有的 Prometheus 和 Loki 支持将满足其他支柱观察能力的需要。

如果你愿意,你可以将代理配置为接受每一个接收器的数据。

tempo:
  # 键,配置启用一个接收器或其协议。
  # 把它设置为空值可以启用该接收器或协议的默认配置。
  receivers:
    # 支持 grpc14250 端口的 spans,
    # 6832 端口的 thrift_binary,
    # 6831 端口的 thrift_compact,
    # 以及 14268 端口的 thrift_http。
    # 具体的端口号可以 特定的端口号可以在协议的配置中自定义。
    jaeger:
      protocols:
        grpc:
        thrift_binary:
        thrift_compact:
        thrift_http:
    # 配置 opencensus 支持。span 可以通过端口 55678 发送,
    # 这是默认的。
    opencensus:
    # 配置 otlp 支持。Spans 可以被发送到 55680 端口,
    # 这是默认的。
    otlp:
      protocols:
        grpc:
        http:
    # 配置 zipkin 支持。Spans 可以被发送到 9411 端口,
    # 这是默认的。
    zipkin:

另一方面,属性使操作者能够操作发送到 Grafana Agent 的传入 span 上的标签。当你想添加一组固定的元数据时,这真的很有用,比如备注一个环境。

attributes:
  actions:
  - action: upsert
    key: env
    value: prod

上面的配置例子为所有收到的 span 设置了一个 env标签,其值为produpsert动作意味着具有现有 env标签的span将被覆盖。这对于保证你知道哪个 Agent 收到了 span 以及它在哪个环境下运行是很有用的。

属性 (Attributes ) 真的很强大,并且支持超出这里的例子的使用情况。请查看 OpenTelemetry 关于它们的文档 以了解更多信息。

但在 Grafana Labs,我们并没有仅仅使用 OpenTelemetry Collector 的一个子集就了事;我们增加了对 Prometheus 风格的scrape_configs的支持,可以用来根据发现目标的元数据自动标记传入的 span。

用 Prometheus 服务发现附加元数据

Promtail 是一个日志客户端,用于收集日志并将其发送到 Loki。它最强大的功能之一是支持使用 Prometheus 的服务发现机制。这些服务发现机制使你能够将相同的元数据附加到你的日志和你的指标上。

当你的指标和日志有相同的元数据时,你就可以降低在系统之间切换的认知开销,并且让有一种你的所有数据都储存在一个系统中的 "感觉"。我们希望这种能力也能扩展到追踪方面。

Joe Elliott 在 Agent 的追踪子系统中增加了相同的 Prometheus 服务发现机制。它的工作原理是将发送 span 的系统的 IP 地址与发现的服务发现目标的地址相匹配。

对于 Kubernetes 用户来说,这意味着你可以动态地附加发送 span 的容器的命名空间、pod 和 container 名称的元数据。

tempo:
  configs:
  - name: default
    receivers:
    jaeger:
        protocols:
        thrift_compact:
    scrape_configs:
    - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    job_name: kubernetes-pods
    kubernetes_sd_configs:
    - role: pod
    relabel_configs:
    - source_labels: [__meta_kubernetes_namespace]
      target_label: namespace
    - source_labels: [__meta_kubernetes_pod_name]
      target_label: pod
    - source_labels: [__meta_kubernetes_pod_container_name]
      target_label: container
    tls_config:
      ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
      insecure_skip_verify: false
    # remote_write, etc

Tempo 通过 Prometheus 服务发现附加 metadata

不过,这个功能不仅仅对 Kubernetes 用户有用。这里支持 Prometheus 的所有 各种服务发现机制。这意味着你可以在你的度量、日志和追踪之间使用相同的scrape_configs来获得相同的标签集,当从你的度量、日志和追踪中切换时,可以轻松地在你的可观察性数据之间转换。

配置 Span 的推送方式

当然,仅仅收集 span 并不十分有用!配置 Tempo 支持的最后部分是通过remote_write部分。remote_write描述了一个类似于 Prometheus 的配置块,用来控制收集的 span 被发送到哪里。

对于好奇的人来说,这是对 OpenTelemetry Collector 的 OTLP exporter 的一个封装。由于 Agent 导出 OTLP 格式的 span,这意味着你可以将 span 发送到任何支持 OTLP 数据的系统。我们今天的重点是 Tempo,但你甚至可以让 Agent 发送跨度到另一个 OpenTelemetry 采集器。

除了端点和认证,remote_write允许你控制 span 的排队和重试功能。批处理 (Batching)是在remote_write之外管理的,可以更好地压缩 span,减少用于向 Tempo 传输数据的出站连接数。和前面一样,OpenTelemetry 在这方面有一些 相当好的文档。

tempo:
  configs:
  - name: default
    # span 的批处理设置。在收集 10,000 个跨度后
    # 或 10s 后(以先到者为准)完成一个批次。
    batch:
      send_batch_size: 10000
      timeout: 10s
    # remote_write, etc

remote_write方面,queuesretries允许你配置在内存中保留多少个批次,以及如果一个批次碰巧失败了,你将重试多长时间。这些设置与 OpenTelemetry's OTLP exporter 的retry_on_failuresending_queue设置相同。

tempo:
  configs:
  - name: default
    remote_write:
    - endpoint: tempo-us-central1.grafana.net:443
      basic_auth:
        username: 12345
        password: api_key
      # 将默认的队列大小增加一倍,以便在内存中保留更多的批次,
      # 但在 5 秒后放弃重试失败的 span。
      sending_queue:
        queue_size: 10000
      retry_on_failure:
        max_elapsed_time: 5s

虽然把最大重试时间设置得很高很诱人,但它很快就会变得很危险。重试会增加从 Agent 到 Tempo 的网络流量总量,与其不断重试,不如放弃 span 。另一个风险是内存的使用。如果你的后端发生故障,高重试时间将迅速填满 span 队列,并可能以 Out Of Memory 错误使 Agent 宕机。

因为对于一个有大量 span 吞吐量的系统来说,100%的 span 被存储是不现实的,控制批处理、队列和重试逻辑以满足你的特定网络使用,对于有效追踪是至关重要的。

下回见

我们已经谈到了如何手动配置 Grafana Agent 以获得 tracing 支持,但要想了解一个实际的例子,请查看 production-ready tracing Kubernetes manifest。这个清单附带的配置涉及到这里的所有内容,包括服务发现机制,以自动将 Kubernetes 元数据附加到传入的 span 上。

我非常感谢 Joe 从他繁忙的 Tempo 工作中抽出时间,在 Agent 中添加跟踪支持。我很高兴 Grafana Agent 现在支持大部分的 Grafana 堆栈,而且我对接下来的产品更感兴趣

原文内置:

开始使用 Tempo 的最简单方法是在 Grafana Cloud。我们有免费的(包括 50GB 的痕迹)和付费的 Grafana Cloud 计划,以满足各种使用情况 - 现在注册免费。

词汇表

英文中文备注
Receivers接收器Grafana Agent 组件
Trace追踪
span跨度Tracing 专有名词

Grafana 系列文章

Grafana 系列文章

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【刷题】多数元素

这是leetcode第169题的解答。 目录 一、多数元素 二、实现思路 1.排序中间下标求众数 2.投票法 总结 一、多数元素 多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 二、实现思路 1.排序中间下标求众数 原理&#xff1a; 通过排序使得数组有序&#xff0c;因为多数元素…

ESP32设备驱动-TM1637-驱动4位7段数码管

TM1637-驱动4位7段数码管 1、TM1637介绍 TM1637是一款带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路,内部集成了MCU数字接口、数据锁存、LED高压驱动、键盘扫描等功能。 TM1637使用DIP20/SOP20封装,主要适用于电磁炉、微波炉、小家电的显示驱动。 TM1637有如下…

【C++】初识C++

本期博客我们来正式进入到期待已久C嘎嘎的学习希望C语言以后别给我打电话了&#xff0c;我怕C误会&#x1f63c;一、认识C1. 什么是C C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的 程序&#xff0c;需要高度的抽象和…

蓝奥声无线单火控制技术在单火开关应用中的优势

随着科技的发展&#xff0c;智能产品在生活中越来越常见&#xff0c;为方便业主使用&#xff0c;就连开关也有了高阶智能版&#xff0c;据相关专家介绍&#xff0c;智能开关主要分为单火和零火两种&#xff0c;很多非专业人士搞不明白&#xff0c;但又害怕因此选择失误。那么&a…

关于微服务的一些总结和经验之谈,来看看你都了解吗

文章目录一 谈谈对微服务的理解1. 什么微服务&#xff1f;2. 微服务体系3. 微服务优点4. 微服务缺点5. 什么是gRPC&#xff1f;6. ProtoBuf协议好处&#xff1f;7. gPRC和ProtoBuf联系&#xff1f;二 本次微服务项目学习流程梳理三 微服务项目一般开发流程梳理四 从本次微服务项…

数据结构 | 图结构的讲解与模拟实现 | DFS与BFS的实现

文章目录前言常见概念总结图的模拟实现邻接矩阵和邻接表的优劣图的模拟实现&#xff08;邻接表&#xff09;广度优先遍历&#xff08;BFS&#xff09;深度优先遍历&#xff08;DFS&#xff09;前言 在聊图的结构之前&#xff0c;我们可以先从熟悉的地方开始&#xff0c;这有一…

Leetcode 剑指 Offer II 012. 左右两边子数组的和相等

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给你一个整数数组 nums &#xff0c;请计算数组的 中心下标 。 …

Android 启动速度优化

Android 启动速度优化前序统计adb测量手动打点方案预加载class字节码的预加载Activity预创建Glide预初始化WebView预加载数据预加载三方库初始化布局方面ViewStub标签减少层级主题的选择约束布局使用X2C方案过度绘制如何检测过度绘制如何监控页面的渲染速度移除多余背景Recycle…

Linux系列 Linux常用命令(2)

作者简介&#xff1a;一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.Linux常用命令后续 1.创建目录和文件 &#xff08;1&#x…

DaVinci:Camera Raw(Blackmagic RAW)

本文主要介绍 Blackmagic Raw 格式&#xff08;.braw&#xff09;素材相关的 Camera Raw 参数。解码质量Decode Quality解码质量决定了图像解拜耳之后所呈现的素质。默认为“使用项目设置” Use project setting&#xff0c;表示使用项目设置对话框中的“Camera RAW”解码质量设…

PPT录制视频的方法有哪些?分享5种亲测好用的方法

PPT文稿可以通过图文或者动画的形式&#xff0c;直观形象地把内容展现给观众&#xff0c;从而给观众留下深刻的印象。比如老师讲课时会用到PPT&#xff0c;公司开会时也会用到PPT。除了需要使用到PPT文稿之外&#xff0c;有时还要对它进行录制。那你知道PPT录制视频的方法有哪些…

[JavaWeb]HTML

目录1.简介1.1 HTML基本结构1.2 标签使用细节2.常用标签使用2.1 font 字体标签2.2 字符实体2.3 标题标签2.4 超链接标签2.5 有序无序标签(1)无序列表ul/li(2)有序列表ol/li2.6 图像标签(img)2.7 表格(table)标签表格标签-跨行跨列表格2.8 form(表单)标签介绍2.9 input单选多选标…

Unity-ROS与Navigation 2(四)

0. 简介 对于Gazebo而言&#xff0c;我们知道其是可以通过与ROS的连接完成机器人建图导航的&#xff0c;那我们是否可以通过Unity来完成相同的工作呢&#xff0c;答案是肯定的。这一讲我们就来讲述使用Unity的“Turtlebot3”模拟环境&#xff0c;来运行ROS2中的“Navigation 2…

Rust机器学习之tch-rs

Rust机器学习之tch-rs tch-rs是PyTorch接口的Rust绑定&#xff0c;可以认为tch-rs是Rust版的PyTorch。本文将带领大家学习如何用tch-rs搭建深度神经网络识别MNIST数据集中的手写数字。 本文是“Rust替代Python进行机器学习”系列文章的第五篇&#xff0c;其他教程请参考下面表…

autodeauth:一款功能强大的自动化Deauth渗透测试工具

关于autodeauth autodeauth是一款功能强大的自动化Deauth渗透测试工具&#xff0c;该工具可以帮助广大研究人员以自动化的形式针对本地网络执行Deauth渗透测试&#xff0c;或者枚举公共网络。当前版本的autodeauth已在树莓派OS和Kali Linux平台上进行过测试&#xff0c;之后的…

Presidential靶机总结

Presidential靶机渗透总结 靶机下载地址: https://download.vulnhub.com/presidential/Presidential.ova 打开靶机,使用nmap扫描出靶机的ip和所有开放的端口 可以看到靶机开放了80端口和2082端口 使用-sV参数查看详细服务 80端口是http服务 2082端口是ssh服务 那么我们先根据…

双向链表实现简单的增删查改

前言&#xff1a;上次分享了单向链表的增删查改&#xff0c;这次要介绍双向链表的增删查改&#xff0c;其实双向链表也有多种&#xff0c;这次主要介绍结构最复杂但是实现起功能反而最简单的带头双向循环链表&#xff0c;希望我的分享对各位有些许帮助。学习这篇文章的内容最好…

[虾说IT]GIS与三高架构(一)什么是高性能

大家好&#xff0c;我是消失了一个年假的不愿意透露姓名的神秘虾神&#xff0c;这是癸卯兔年虾神的第一个系列&#xff0c;聊聊GIS中的架构设计&#xff0c;不过你如果是做其他架构的也差不多……总之是架构是虾神的本职工作之一&#xff0c;那么培养更多的架构设计者和爱好者&…

基于前馈补偿的PID控制算法及仿真

在高精度伺服控制中&#xff0c;前馈控制可用来提高系统的跟踪性能。经典控制理论中的前馈控制设计是基于复合控制思想&#xff0c;当闭环系统为连续系统时&#xff0c;使前馈环节与闭环系统的传递函数之积为1&#xff0c;从而实现输出完全复现输入。利用前馈控制的思想&#x…

剑指 Offer 05. 替换空格 [C语言]

目录题目思路1代码1结果1思路2代码2结果2该文章只是用于记录考研复试刷题题目 请实现一个函数&#xff0c;把字符串 s 中的每个空格替换成"%20"。 示例 1&#xff1a; 输入&#xff1a;s “We are happy.” 输出&#xff1a;“We%20are%20happy.” 限制&#xff…