Skip to content

使用 Open Telemetry Tracing 来追踪数据

eKuiper 的规则是一个持续运行的流式计算任务。规则用于处理无界的数据流,正常情况下,规则启动后会一直运行,不断产生运行状态数据。我们可以使用 open telemetry tracing 来追踪每一条数据在各个算子中的数据变化。

Open Telemetry Tracing 配置

你可以通过配置将 Open Telemetry 的数据暴露给远端的 Open Telemetry Collector, 同时 eKuiper 也支持内置收集 Open Telemtry Trcing 的数据,你可以通过以下配置限制最大保存数据的数量。

yaml
openTelemetry:
  serviceName: kuiperd-service
  enableRemoteCollector: false
  remoteEndpoint: localhost:4318
  localTraceCapacity: 2048

开启规则级别的追踪

你可以通过 REST API 开启特定规则的数据追踪

获取每条数据的 Trace ID

你可以通过 Rest API 获取规则对应的最近 Trace ID。

根据规则 ID 查看最近的 Trace ID

根据 Trace ID 查看追踪的数据流变化

如果你配置了 Open Telemetry Tracing 收集器,你可以通过 Trace ID 向 Open Telemetry 收集器背后的存储与查询平台进行查询。 同时,你也可以通过访问本地 Rest API 的方式获取详细的追踪数据。

根据 Trace ID 查看详细追踪数据

通过 Open Telemetry Collector 和 Jaeger 集成数据追踪

eKuiper 支持将 Trace 数据暴露到 Open Telemetry Collector,Open Telemetry 则支持将 Tracing 的数据暴露到 Jaeger 中进行展示。 我们通过以下例子进行展示:

本地启动 Open Telemetry Collector 与 Jaeger

通过 docker-compose 启动 open telemetry collector 和 Jaeger

shell
docker-compose up -d
yaml
receivers:
  otlp:
    protocols:
      http:
        endpoint: 0.0.0.0:4318

exporters:
  otlp:
    endpoint: jaeger:4317
    tls:
      insecure: true

processors:
  batch:

service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [batch]
      exporters: [otlp]
yaml
version: '3.8'

services:
  jaeger:
    image: jaegertracing/all-in-one:latest
    ports:
      - "16686:16686"  # Jaeger UI
      - "14250:14250"  # gRPC for Jaeger
      - "14268:14268"  # HTTP for Jaeger
    networks:
      - otel-net

  otel-collector:
    image: otel/opentelemetry-collector-contrib:latest
    command: ["--config=/etc/otel-collector-config.yaml"]
    volumes:
      - ./collector.yaml:/etc/otel-collector-config.yaml
    ports:
      - "4318:4318"  # OTLP HTTP receiver
    depends_on:
      - jaeger
    networks:
      - otel-net

networks:
  otel-net:
    driver: bridge

配置 eKuiper 开启将数据追踪发送到 Collector

yaml
openTelemetry:
  serviceName: kuiperd-service
  enableRemoteCollector: true
  remoteEndpoint: localhost:4318
  localTraceCapacity: 2048

创建规则并开启规则数据链路追踪

通过 REST API 创建规则

通过 REST API 为规则开启数据追踪

访问 Jaeger 查看 Trace 数据

访问 localhost:16686 查看 Jaeger 内的 Trace 数据

通过数据追踪来 debug 规则

在本例中我们将通过数据追踪来 debug 规则,查看在 SQL 中,数据是如何在各个算子中传输的。

创建规则

首先我们创建一个规则,该规则会根据 a 列来将数据进行筛选

json
{
    "id": "rule1",
    "sql": "select * from demo where a > 5",
    "actions": [
        {
            "log": {
            }
        }
    ]
}

发送数据

发送两条数据,其中一条数据会被过滤条件过滤,另一条则不会。

json
{"a":10}
{"a":4}

通过 REST API 获取规则的 TraceID 列表

我们可以通过 Rest API 来获取规则的 TraceID 列表

通过 TraceID 在 Jaeger 中查看对应的数据追踪

对于 {"a":10} 这条数据,在 Jaeger 中可以查看该数据在各个算子中的传输:

traced_png

由于 a 列满足了 SQL 的筛选条件,所以该数据没有被过滤,最终被输出了。

对于 {"a":4} 这条数据,在 Jaeger 中可以查看该数据在各个算子中的传输:

un_traced_png

由于 a 列没有满足 SQL 的筛选条件,所以该数据被过滤,最终没有被输出。