OpenTelemetry 与 Jaeger 应用

[环境建置,Elasticsearch 需要先建置,Collector 组件会将资讯存入 Elasticsearch中

query:
    container_name: jaeger_query
    image: jaegertracing/jaeger-query
    environment:
      - SPAN_STORAGE_TYPE=elasticsearch
      - ES_SERVER_URLS=http://192.168.101.129:3001
      - ES_TAGS_AS_FIELDS_ALL=true
      - LOG_LEVEL=debug
collector:
    container_name: jaeger_collector
    image: jaegertracing/jaeger-opentelemetry-collector
    environment:
      - SPAN_STORAGE_TYPE=elasticsearch
      - LOG_LEVEL=debug
    command: [
      "--es.server-urls=http://192.168.101.129:3001",
      "--es.num-shards=3",
      "--es.num-replicas=0"
    ]
agent:
    container_name: jaeger_agent
    image: jaegertracing/jaeger-opentelemetry-agent
    command: ["--reporter.grpc.host-port=jaeger_collector:14250", "--log-level=debug"]

导入 OoenTelemetry
一般运行 Spring boot 是用 java –jar file.jar,而 Opentelemetry 提供自动配置的 Jar 可参考 opentelemetry-java-instrumentation,最後透过 javaagent 导入 java -javaagent:opentelemetry-javaagent-all.jar –jar file.jar。为了与 jaeger 进行交互,需配置以下

  • OTEL_TRACES_EXPORTER=jaeger # 指定将蒐集的资讯传播到哪个框架
  • OTEL_EXPORTER_JAEGER_ENDPOINT=http://192.168.101.129:9000 # 该框架传递资讯的端点
  • OTEL_RESOURCE_ATTRIBUTES=service.name=java-dev-be,service.version=v1.0.0 # 当有多个服务时可用来识别
    官方环境变数设置参考

当中 Service 是 OTEL_RESOURCE_ATTRIBUTES 所设置的 service.name

上图有一个时间轴,而每个圈圈表示一个 trace。每个 trace 所需时间都不一样,因此可藉由此时间轴观察花费时间最大的 trace 并进行观察有无优化可能,当中 Sort 选项也可选择排序方式。

  • 总共 8 个 Span(Total Spans),通常可以视为一个请求做了 8 个不同动作
  • 深度为 3(Depth)
  • 关联服务为 1 个(Services)
  • 该 API 花费 444.4 ms(Duration)

将每个 Span 展开後,基本上都会存在着 Tages 和 Process 的资讯。Tages 是每个 Span 的补充字段以 key:value 显示,相对的 Process 偏向对系统层面的补充字段。当过程中有错误时,将会以 Logs 栏位呈现错误的堆叠。

使用 Trace Graph 观察,结果如下更加直观清楚知道调用过程。每个不同的呈现其细节都不一样。

在 Jaeger 上还有很多东西可以使用。透过 opentelemetry 规范,可让不断扩展的服务,利於追踪并查明其可能故障或性能降低的地方。与日志比较,日志储存成本高,在做除错时没适当的搜寻格式,每个服务同时打印日志时,这除错过程更加艰辛,日志不会有上下文关系。


<<:  day9: CSS style 规划 - CSS in JS(emotion 使用 - 3)

>>:  [Day 13] 第一主餐 pt.6-叮咚,有您的包裹

Day 18 Odoo画面新增栏位显示

不罗嗦! 直接上图 基本上要先在odoo原生的Xml找到你要放置新栏位的位置, 然後使用xpath语...

第29天:解构语法、余集(...)

ES6开始支援解构语法,可以拆解某个资料结构,并指定给变数。 例如: let arr = [ 1, ...

Day23_控制项(A18遵循性) -2021/10/06

阿呜~第23天了,再撑一个星期~XDD" ▉A.18 Compliance 遵循性 所有的...

Hoisting

关於Hoisting很像是变数被拉升到上层 提升变数不会赋值 var a = 2 LHS conso...

【Day09】陈述式与表达式

陈述式(Statement) JavaScript 语句类型,用於命令执行指定一系列操作,最大的特徵...