Zipkin 插件

本文原文链接:https://docs.konghq.com/hub/kong-inc/zipkin/

传播Zipkin分布式跟踪跨度,并向Zipkin服务器报告跨度。

注意:此插件的功能与0.14.1之前的Kong版本和0.34之前的Kong Enterprise版本捆绑在一起,与此处记录的不同。 有关详细信息,请参阅CHANGELOG

术语

  • plugin: 在请求被代理到上游API之前或之后,在Kong内部执行操作的插件。
  • Service: 表示外部 upstream API或微服务的Kong实体。
  • Route: 表示将下游请求映射到上游服务的方法的Kong实体。
  • Consumer: 代表使用API的开发人员或机器的Kong实体。当使用Kong时,Consumer 仅与Kong通信,其代理对所述上游API的每次调用。
  • Credential: 与Consumer关联的唯一字符串,也称为API密钥。
  • upstream service: 这是指位于Kong后面的您自己的 API/service,转发客户端请求。

配置

此插件与具有以下协议的请求兼容:

  • http
  • https
  • tcp
  • tls

此插件与无DB模式兼容。

在 Service 上启用插件

使用数据库:

通过发出以下请求在Service上配置此插件:

  1. $ curl -X POST http://kong:8001/services/{service}/plugins \
  2. --data "name=zipkin" \
  3. --data "config.http_endpoint=http://your.zipkin.collector:9411/api/v2/spans" \
  4. --data "config.sample_ratio=0.001"

不使用数据库:

通过添加此部分在服务上配置此插件执行声明性配置文件:

  1. plugins:
  2. - name: zipkin
  3. service: {service}
  4. config:
  5. http_endpoint: http://your.zipkin.collector:9411/api/v2/spans
  6. sample_ratio: 0.001

在这两种情况下,{service}是此插件配置将定位的Service的idname

在 Route 上启用插件

使用数据库:

在Route上配置此插件:

  1. $ curl -X POST http://kong:8001/routes/{route}/plugins \
  2. --data "name=zipkin" \
  3. --data "config.http_endpoint=http://your.zipkin.collector:9411/api/v2/spans" \
  4. --data "config.sample_ratio=0.001"

不使用数据库:

通过添加此部分在路由上配置此插件执行声明性配置文件:

  1. plugins:
  2. - name: zipkin
  3. route: {route}
  4. config:
  5. http_endpoint: http://your.zipkin.collector:9411/api/v2/spans
  6. sample_ratio: 0.001

在这两种情况下,{route}是此插件配置将定位的RouteID或名称。

在 Consumer 上启用插件

使用数据库:

您可以使用http://localhost:8001/plugins在特定的Consumers上启用此插件:

  1. $ curl -X POST http://kong:8001/consumers/{consumer}/plugins \
  2. --data "name=zipkin" \
  3. \
  4. --data "config.http_endpoint=http://your.zipkin.collector:9411/api/v2/spans" \
  5. --data "config.sample_ratio=0.001"

不使用数据库:

通过添加此部分在Consumer上配置此插件执行声明性配置文件:

  1. plugins:
  2. - name: zipkin
  3. consumer: {consumer}
  4. config:
  5. http_endpoint: http://your.zipkin.collector:9411/api/v2/spans
  6. sample_ratio: 0.001

在这两种情况下,{consumer}都是此插件配置将定位的Consumeridusername
您可以组合consumer_idservice_id 。 在同一个请求中,进一步缩小插件的范围。

全局插件

  • 使用数据库: 可以使用http://kong:8001/plugins/配置所有插件。
  • 不使用数据库: 可以通过plugins:配置所有插件:声明性配置文件中的条目。

与任何 Service ,Route 或 Consumer (或API,如果您使用旧版本的Kong)无关的插件被视为“全局”,并将在每个请求上运行。有关更多信息,请阅读插件参考插件优先级部分。

参数

以下是可在此插件配置中使用的所有参数的列表:

参数 默认值 描述
name 要使用的插件的名称,在本例中为datadog
service_id 此插件将定位的 Service 的ID。
route_id 此插件将定位的 Route 的ID。
enabled true 是否将应用此插件。
consumer_id 此插件将定位的Consumer的id
config.http_endpoint
optional
127.0.0.1 Zipkin跨度的完整HTTP端点应该由Kong发送到该端点。
config.sample_ratio
optional
0.001 对不包含跟踪ID的请求进行采样的频率。设置为0以关闭采样,或设置为1以采样所有请求。

它是怎么工作的

启用后,此插件以与zipkin兼容的方式跟踪请求。

代码围绕一个opentracing核心构建,使用opentracing-lua库来收集每个Kong阶段的请求的时间数据。该插件使用opentracing-lua兼容的提取器、注入器和报告器来实现Zipkin的协议。

提取器和注入器

打开追踪“提取器”从传入的请求中收集信息。如果传入请求中不存在跟踪ID,则基于sample_ratio配置值概率地生成一个跟踪ID。

打开追踪“注入器”将跟踪信息添加到传出请求中。目前,仅对kong代理的请求调用注入器;它尚未用于对数据库或其他插件(例如http-log插件)的请求。

报告

操作员“Reporter”是如何将跟踪数据报告给另一个系统的。此插件记录给定请求的跟踪数据,并使用Zipkin v2 API将其作为批处理发送到Zipkin服务器。请注意,需要zipkin 1.31或更高版本。

http_endpoint配置变量必须包含完整的uri,包括scheme,host,port和path部分(即你的uri可能以/api/v2/spans结尾)。

FAQ

我可以将此插件与类似Jaeger等其他跟踪系统一起使用吗?

大概! Jaeger接受Zipkin格式的跨度 - 请参阅https://www.jaegertracing.io/docs/features/#backwards-compatibility-with-zipkin 查看更多信息。