链路追踪接入

此篇文章是介绍如何使用 Apache ShenYu Agent中的tracing功能。

目录结构

  1. .
  2. ├── conf
  3. ├── logback.xml
  4. ├── shenyu-agent.yaml
  5. └── tracing-point.yaml
  6. ├── plugins
  7. ├── shenyu-agent-plugin-tracing-common-${latest.release.version}.jar
  8. ├── shenyu-agent-plugin-tracing-jaeger-${latest.release.version}.jar
  9. ├── shenyu-agent-plugin-tracing-opentelemetry-${latest.release.version}.jar
  10. └── shenyu-agent-plugin-tracing-zipkin-${latest.release.version}.jar
  11. └── shenyu-agent.jar

配置文件

配置文件 shenyu-agent.yaml 位于 shenyu-agent-dist 模块中:

  1. appName: shenyu-agent
  2. supports:
  3. tracing:
  4. - jaeger
  5. - opentelemetry
  6. - zipkin
  7. plugins:
  8. tracing:
  9. jaeger:
  10. host: "localhost"
  11. port: 5775
  12. props:
  13. SERVICE_NAME: "shenyu-agent"
  14. JAEGER_SAMPLER_TYPE: "const"
  15. JAEGER_SAMPLER_PARAM: "1"
  16. zipkin:
  17. host: "localhost"
  18. port: 9411
  19. props:
  20. SERVICE_NAME: "shenyu-agent"
  21. URL_VERSION: "/api/v2/spans"
  22. SAMPLER_TYPE: "const"
  23. SAMPLER_PARAM: "1"
  24. opentelemetry:
  25. props:
  26. otel.traces.exporter: jaeger #zipkin #otlp
  27. otel.resource.attributes: "service.name=shenyu-agent"
  28. otel.exporter.jaeger.endpoint: "http://localhost:14250/api/traces"
  • 在 supports 中选择要使用的插件,如果不需要则去除。
  • 在 plugins 中配置插件的参数,其中各插件props参数的具体使用见下面几个表格:
jaeger
名称类型默认值说明
SERVICE_NAMEStringshenyu-agent在traces系统中显示的名称
JAEGER_SAMPLER_TYPEStringconstJaeger 采样率类型
JAEGER_SAMPLER_PARAMString1Jaeger 采样率参数
opentelemetry
名称类型默认值说明
otel.traces.exporterStringjaegertraces导出器类型,若不填默认是otlp
otel.resource.attributesStringservice.name=shenyu-agentotel资源属性,若填写多个,可用逗号分隔

opentelemetry 插件使用的sdk基于 opentelemetry-sdk-extension-autoconfigure 初始化,更多使用请参考 OpenTelemetry SDK自动配置说明

zipkin
名称类型默认值说明
SERVICE_NAMEStringshenyu-agent在traces系统中显示的名称
URL_VERSIONString/api/v2/spansZipkin的版本
SAMPLER_TYPEStringconstZipkin 采样率类型
SAMPLER_PARAMString1Zipkin 采样率参数

使用 jaeger 插件

  • 修改配置文件

shenyu-agent.yaml 文件中通过supports.tracing指定使用 jaeger 插件,通过 plugins.tracing 填写 jaeger 的配置信息。

  1. appName: shenyu-agent
  2. supports:
  3. tracing:
  4. - jaeger
  5. plugins:
  6. tracing:
  7. jaeger:
  8. host: "localhost"
  9. port: 5775
  10. props:
  11. SERVICE_NAME: "shenyu-agent"
  12. JAEGER_SAMPLER_TYPE: "const"
  13. JAEGER_SAMPLER_PARAM: "1"
  • 启动 jaeger 服务

请参考 jaeger-quickstart 启动 jaeger

使用 zipkin 插件

  • 修改配置文件

shenyu-agent.yaml 文件中通过supports.tracing指定使用 zipkin 插件,通过 plugins.tracing 填写 zipkin 的配置信息。

  1. appName: shenyu-agent
  2. supports:
  3. tracing:
  4. - zipkin
  5. plugins:
  6. tracing:
  7. zipkin:
  8. host: "localhost"
  9. port: 9411
  10. props:
  11. SERVICE_NAME: "shenyu-agent"
  12. URL_VERSION: "/api/v2/spans"
  13. SAMPLER_TYPE: "const"
  14. SAMPLER_PARAM: "1"
  • 启动 zipkin-server

请参考 zipkin-quickstart 启动 zipkin-server

使用 opentelemetry 插件

  • 修改配置文件

shenyu-agent.yaml 文件中通过supports.tracing指定使用 opentelemetry 插件,通过 plugins.tracing 填写 opentelemetry 的配置信息。

  1. appName: shenyu-agent
  2. supports:
  3. tracing:
  4. - opentelemetry
  5. plugins:
  6. tracing:
  7. opentelemetry:
  8. props:
  9. otel.traces.exporter: jaeger #zipkin #otlp
  10. otel.resource.attributes: "service.name=shenyu-agent"
  11. otel.exporter.jaeger.endpoint: "http://localhost:14250/api/traces"
  • 根据导出器配置启动 jaeger 或 zipkin 或 opentelemetry-collector

启动 jaeger 可参考 jaeger-quickstart

启动 zipkin 可参考 zipkin-quickstart

启动 otel-collector 可参考 opentelemetry-collector-quickstart

  • 测试

    • 参考 运维部署 的相关文章,启动 shenyu-admin

    • 参考上述操作步骤,启动网关;

    • 参考 Http快速开始 ,启动 shenyu-examples-http

    • 向网关发起请求:

      GET http://localhost:9195/http/order/findById?id=1

      Accept: application/json

    • 请求成功后,可在相应后端看到链路日志,效果与上面的jaeger插件和zipkin插件相同。