当前位置:首页 > 科技  > 软件

实操 OpenTelemetry:通过 Demo 掌握微服务监控的艺术

来源: 责编: 时间:2024-05-27 17:21:33 244观看
导读项目介绍我们参考官方文档构建几个 spring boot 、Golang 项目再配合 Agent 其实也可以很方便的集成 OpenTelemetry。但是要完整的体验 OpenTelemetry 的所有功能,包含 trace、logs、metrics,还有社区这么多语言的支持

项目介绍

我们参考官方文档构建几个 spring boot 、Golang 项目再配合 Agent 其实也可以很方便的集成 OpenTelemetry。dZX28资讯网——每日最新资讯28at.com

但是要完整的体验 OpenTelemetry 的所有功能,包含 trace、logs、metrics,还有社区这么多语言的支持其实还是比较麻烦的。dZX28资讯网——每日最新资讯28at.com

我们还需要单独部署 collector、存储的 backend service 等组件、包括 trace UI 展示所需要的 Jaeger,metric 所需要的 grafana 等。dZX28资讯网——每日最新资讯28at.com

这些所有东西都自己从头弄的话还是比较费时,不过好在社区已经将这些步骤都考虑到了。dZX28资讯网——每日最新资讯28at.com

特地为大家写了一个 opentelemetry-demo。dZX28资讯网——每日最新资讯28at.com

这个项目模拟了一个微服务版本的电子商城,主要包含了以下一些项目:dZX28资讯网——每日最新资讯28at.com

Service
dZX28资讯网——每日最新资讯28at.com

Language
dZX28资讯网——每日最新资讯28at.com

Description
dZX28资讯网——每日最新资讯28at.com

accountingservice
dZX28资讯网——每日最新资讯28at.com

Go
dZX28资讯网——每日最新资讯28at.com

处理和计算订单数据
dZX28资讯网——每日最新资讯28at.com

adservice
dZX28资讯网——每日最新资讯28at.com

Java
dZX28资讯网——每日最新资讯28at.com

广告服务
dZX28资讯网——每日最新资讯28at.com

cartservice
dZX28资讯网——每日最新资讯28at.com

.NET
dZX28资讯网——每日最新资讯28at.com

购物车服务,主要会依赖 Redis
dZX28资讯网——每日最新资讯28at.com

checkoutservice
dZX28资讯网——每日最新资讯28at.com

Go
dZX28资讯网——每日最新资讯28at.com

checkout
dZX28资讯网——每日最新资讯28at.com

currencyservice
dZX28资讯网——每日最新资讯28at.com

C++
dZX28资讯网——每日最新资讯28at.com

货币转换服务,提供了较高的 QPS 能力。
dZX28资讯网——每日最新资讯28at.com

emailservice
dZX28资讯网——每日最新资讯28at.com

Ruby
dZX28资讯网——每日最新资讯28at.com

邮件服务
dZX28资讯网——每日最新资讯28at.com

frauddetectionservice
dZX28资讯网——每日最新资讯28at.com

Kotlin
dZX28资讯网——每日最新资讯28at.com

风控服务
dZX28资讯网——每日最新资讯28at.com

frontend
dZX28资讯网——每日最新资讯28at.com

JavaScript
dZX28资讯网——每日最新资讯28at.com

前端应用
dZX28资讯网——每日最新资讯28at.com

loadgenerator
dZX28资讯网——每日最新资讯28at.com

Python/Locust
dZX28资讯网——每日最新资讯28at.com

模拟压测服务
dZX28资讯网——每日最新资讯28at.com

paymentservice
dZX28资讯网——每日最新资讯28at.com

JavaScript
dZX28资讯网——每日最新资讯28at.com

支付服务
dZX28资讯网——每日最新资讯28at.com

productcatalogservice
dZX28资讯网——每日最新资讯28at.com

Go
dZX28资讯网——每日最新资讯28at.com

商品服务
dZX28资讯网——每日最新资讯28at.com

quoteservice
dZX28资讯网——每日最新资讯28at.com

PHP
dZX28资讯网——每日最新资讯28at.com

成本服务
dZX28资讯网——每日最新资讯28at.com

recommendationservice
dZX28资讯网——每日最新资讯28at.com

Python
dZX28资讯网——每日最新资讯28at.com

推荐服务
dZX28资讯网——每日最新资讯28at.com

shippingservice
dZX28资讯网——每日最新资讯28at.com

Rust
dZX28资讯网——每日最新资讯28at.com

shipping service
dZX28资讯网——每日最新资讯28at.com

可以发现在这个 demo 中提供了许多的服务,而且包含了几乎所有主流的语言,可以很好的模拟我们实际的使用场景了。
dZX28资讯网——每日最新资讯28at.com


dZX28资讯网——每日最新资讯28at.com


dZX28资讯网——每日最新资讯28at.com

图片图片dZX28资讯网——每日最新资讯28at.com

通过这张图可以更直观的查看各个服务之间的关系。dZX28资讯网——每日最新资讯28at.com

整体来说前端所有的请求都会通过 front-end-proxy 这个组件代理,最终再由 front 这个服务进行转发到不同的后端服务中。dZX28资讯网——每日最新资讯28at.com

图片图片dZX28资讯网——每日最新资讯28at.com

除了一个项目的架构图之外,还有一个关于 OpenTelemetry 的数据流转图。dZX28资讯网——每日最新资讯28at.com

在 OpenTelemetry 中数据流转是它的特点也是非常重要的核心,这点在上一篇文章中讲过,用户可以自由定制数据的流转以及任意的处理数据,在这个图中就将数据流转可视化了。dZX28资讯网——每日最新资讯28at.com

  • 客户端可以通过 OTLP 协议或者是 HTTP 将数据上传到 OTel Collector 中。
  • 在 collector 中会根据我们配置的 Process pipeline 处理数据。
  • Metric 数据通过  OTLP HTTP exporter 将数据导入到 Prometheus 中。

Prometheus 已经于 23 年七月份支持 OTLP 格式的 metric 数据导入了。dZX28资讯网——每日最新资讯28at.com

  • Trace 数据则是通过 OTLP Exporter 写入到 Jaeger 中进行存储,最后通过 Jaeger 的 UI 进行查询展示。
  • 而存入 Prometheus 中的 metric 数据则是有 grafana 进行查询。

关于 collector 的配置会在后文讲解。dZX28资讯网——每日最新资讯28at.com

部署

接下来便是安装 Demo 了,我更推荐使用 helm 安装。dZX28资讯网——每日最新资讯28at.com

这里的版本要求是:dZX28资讯网——每日最新资讯28at.com

  • Kubernetes 1.24+
  • Helm 3.9+
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-chartshelm repo updatehelm install my-otel-demo open-telemetry/opentelemetry-demo

这样就可以很简单的将 demo 所涉及到的所有组件和服务都安装到 default 命名空间中。dZX28资讯网——每日最新资讯28at.com

helm show values open-telemetry/opentelemetry-demo > demo.yaml

不过在安装前还是建议先导出一份 value.yaml,之后可以使用这个 yaml 定制需要安装的组件。dZX28资讯网——每日最新资讯28at.com

在这个 yaml 中我们可以看到有哪些组件和服务可以定制:dZX28资讯网——每日最新资讯28at.com

图片图片dZX28资讯网——每日最新资讯28at.com

可以看到这里包含了我们刚才提到的所有服务,以及这些服务所依赖的 Kafka、redis、Prometheus 等中间件,都可以自己进行定制修改。dZX28资讯网——每日最新资讯28at.com

图片图片dZX28资讯网——每日最新资讯28at.com

当所有的 Pod 都成功运行之后表示安装成功。dZX28资讯网——每日最新资讯28at.com

正常情况下安装不会有什么问题,最大可能的问题就是镜像拉取失败,此时我们可以先在本地手动 docker pull 下来镜像后再上传到私服,然后修改 deployment 中的镜像地址即可。dZX28资讯网——每日最新资讯28at.com

暴露服务

为了方便使用我们可以用这个 demo 进行测试,还需要将 front-proxy 的服务暴露出来可以在本地访问:dZX28资讯网——每日最新资讯28at.com

kubectl port-forward svc/my-otel-demo-frontendproxy 8080:8080

Component
dZX28资讯网——每日最新资讯28at.com

Path
dZX28资讯网——每日最新资讯28at.com

Shop 首页
dZX28资讯网——每日最新资讯28at.com

http://localhost:8080dZX28资讯网——每日最新资讯28at.com

Grafana
dZX28资讯网——每日最新资讯28at.com

http://localhost:8080/grafanadZX28资讯网——每日最新资讯28at.com

压测页面
dZX28资讯网——每日最新资讯28at.com

http://localhost:8080/loadgendZX28资讯网——每日最新资讯28at.com

Jaeger UI
dZX28资讯网——每日最新资讯28at.com

http://localhost:8080/jaeger/uidZX28资讯网——每日最新资讯28at.com

正常情况下就可以打开这些页面进行访问了。
dZX28资讯网——每日最新资讯28at.com


dZX28资讯网——每日最新资讯28at.com

不过使用 port-forward 转发的方式只是临时方案,使用 ctrl+c 就会停止暴露服务,所以如果想要一个稳定的访问链接时便可以配置一个 ingress。dZX28资讯网——每日最新资讯28at.com

components:  frontendProxy:    ingress:      enabled: true      annotations: {}      hosts:        - host: otel-demo.my-domain.com          paths:            - path: /              pathType: Prefix              port: 8080

在之前的 helm 的 value.yaml 中配置即可,本地测试的话需要将这个 host 和 ingress 暴露出来的 IP 进行绑定才可以使用这个域名机进行访问。dZX28资讯网——每日最新资讯28at.com

更多关于 ingress 的使用可以参考我之前的文章:dZX28资讯网——每日最新资讯28at.com

  • k8s入门到实战-使用Ingress

当然简单起见也可以直接将 front-proxy 的 service 类型改为 LoadBalancer。(默认是 ClusterIP 只可以在集群内访问)dZX28资讯网——每日最新资讯28at.com

这样就可以直接通过这个 service 的 IP 进行访问了。dZX28资讯网——每日最新资讯28at.com

components:  frontendProxy:    service:      type: LoadBalancer

不过需要注意的是如果 demo 安装完成之后是不可以再次修改 service 的类型的,需要手动这个 service 删掉之后再次新建才可以。dZX28资讯网——每日最新资讯28at.com

临时测试使用的话还是推荐直接使用 port-forward 进行转发。dZX28资讯网——每日最新资讯28at.com

查看 Trace

通过之前的项目架构图可以得知,我们在项目首页刷新会直接请求 AdService 来获取广告。dZX28资讯网——每日最新资讯28at.com

为了简单起见我们只查询这一链路的调用情况:dZX28资讯网——每日最新资讯28at.com

图片图片dZX28资讯网——每日最新资讯28at.com

打开 http://localhost:8080/jaeger/ui/search Jeager 的 UI 页面便可以筛选服务,之后点击查找 Traces 就可以列出一段时间内的访问 trace。dZX28资讯网——每日最新资讯28at.com

图片图片dZX28资讯网——每日最新资讯28at.com

可以看到这个请求链路是从前端访问到 adService 中的 getAds()接口,然后在这个接口中再访问了 getAdsByCategory 函数。dZX28资讯网——每日最新资讯28at.com

图片图片dZX28资讯网——每日最新资讯28at.com

最终在源码中也可以看到符合链路的调用代码。dZX28资讯网——每日最新资讯28at.com

在刚才的链路图的右下角有一个 spanID,整个 trace 是由这些小的 span 组成,每一个 span 也会有唯一 spanID;trace 也会有一个 traceID 将这些 span 串联起来;更多关于 trace 的内容会在后面的文章进行分析。dZX28资讯网——每日最新资讯28at.com

查看 Metrics

我们再打开 grafana 便可以看到刚才访问的 adService 的延迟和接口的 QPS 情况:dZX28资讯网——每日最新资讯28at.com

图片图片dZX28资讯网——每日最新资讯28at.com

在opentelemetry-collector-data-flow 面板中还可以看到 OpenTelemetry 的数据流转。dZX28资讯网——每日最新资讯28at.com

图片图片dZX28资讯网——每日最新资讯28at.com

更多监控信息可以查看其它的面板。dZX28资讯网——每日最新资讯28at.com

而刚才面板中的数据流转规则则是在我们的 collector 中进行配置的:dZX28资讯网——每日最新资讯28at.com

receivers:  otlp:    protocols:      grpc:      http:        cors:          allowed_origins:            - "http://*"            - "https://*"  httpcheck/frontendproxy:    targets:      - endpoint: http://frontendproxy:${env:ENVOY_PORT}exporters:  debug:  otlp:    endpoint: "jaeger:4317"    tls:      insecure: true  otlphttp/prometheus:    endpoint: "http://prometheus:9090/api/v1/otlp"    tls:      insecure: true  opensearch:    logs_index: otel    http:      endpoint: "http://opensearch:9200"      tls:        insecure: trueprocessors:  batch:connectors:  spanmetrics:service:  pipelines:    traces:      receivers: [otlp]      processors: [batch]      exporters: [otlp, debug, spanmetrics]    metrics:      receivers: [httpcheck/frontendproxy, otlp, spanmetrics]      processors: [batch]      exporters: [otlphttp/prometheus, debug]    logs:      receivers: [otlp]      processors: [batch]      exporters: [opensearch, debug]

重点的就是这里的 service.piplines,可以进行任意的组装。dZX28资讯网——每日最新资讯28at.com

更多关于 collector 的配置也会在后续文章中继续讲解。dZX28资讯网——每日最新资讯28at.com

我们也可以继续访问这个 demo 网站,模拟加入购物车、下单等行为,再结合 trace 和 metric 观察系统的变化。dZX28资讯网——每日最新资讯28at.com

这样一个完整的 OpenTelemetry-Demo 就搭建完毕了,我们实际在生产环境使时完全可以参考这个 demo 进行配置,可以少踩很多坑。dZX28资讯网——每日最新资讯28at.com

参考链接:dZX28资讯网——每日最新资讯28at.com

  • https://github.com/open-telemetry/opentelemetry-demo/blob/main/src/adservice/Dockerfile
  • https://github.com/open-telemetry/opentelemetry-demo
  • https://github.com/prometheus/prometheus/pull/12571
  • https://github.com/open-telemetry/opentelemetry-demo/blob/main/src/otelcollector/otelcol-config.yml

本文链接:http://www.28at.com/showinfo-26-91019-0.html实操 OpenTelemetry:通过 Demo 掌握微服务监控的艺术

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 亿级流量下通用的高并发架构设计

下一篇: 阿里面试:NIO为什么会导致CPU 100% ?

标签:
  • 热门焦点
  • MIX Fold3包装盒泄露 新机本月登场

    小米的全新折叠屏旗舰MIX Fold3将于本月发布,近日该机的真机包装盒在网上泄露。从图上来看,新的MIX Fold3包装盒在外观设计方面延续了之前的方案,变化不大,这也是目前小米旗舰
  • 印度登月最关键一步!月船三号今晚进入环月轨道

    8月5日消息,据印度官方消息,月船三号将于北京时间今晚21时30分左右开始近月制动进入环月轨道。这是该探测器能够成功的最关键步骤之一,如果成功将开始围
  • 摸鱼心法第一章——和配置文件说拜拜

    为了能摸鱼我们团队做了容器化,但是带来的问题是服务配置文件很麻烦,然后大家在群里进行了“亲切友好”的沟通图片图片图片图片对比就对比,简单对比下独立配置中心和k8s作为配
  • 掘力计划第 20 期:Flutter 混合开发的混乱之治

    在掘力计划系列活动第20场,《Flutter 开发实战详解》作者,掘金优秀作者,Github GSY 系列目负责人恋猫的小郭分享了Flutter 混合开发的混乱之治。Flutter 基于自研的 Skia 引擎
  • 每天一道面试题-CPU伪共享

    前言:了不起:又到了每天一到面试题的时候了!学弟,最近学习的怎么样啊 了不起学弟:最近学习的还不错,每天都在学习,每天都在进步! 了不起:那你最近学习的什么呢? 了不起学弟:最近在学习C
  • 一条抖音4亿人围观 ! 这家MCN比无忧传媒还野

    作者:Hiu 来源:互联网品牌官01 擦边少女空降热搜,幕后推手曝光被网友誉为“纯欲天花板”的女网红井川里予,近期因为一组哥特风照片登上热搜,引发了一场互联网世界关于
  • 三星Galaxy Z Fold5今日亮相:厚度缩减但仍略显厚重

    据官方此前宣布,三星将于7月26日也就是今天在韩国首尔举办Unpacked活动,届时将带来带来包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy
  • 3699元!iQOO Neo8 Pro顶配版今日首销:1TB UFS 4.0同价位唯一

    5月23日,iQOO推出了全新的iQOO Neo8系列,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更是首发搭载了联发科天玑9200+旗舰
  • 亲历马斯克血洗Twitter,硅谷的苦日子在后头

    文/刘哲铭  编辑/李薇  马斯克再次挥下裁员大刀。  美国时间11月14日,Twitter约4400名外包员工遭解雇,此次被解雇的员工的主要工作为内容审核等。此前,T
Top