OpenTelemetry Learning
OpenTelemetry Collector

Connectors

Nối các pipeline Collector, chuyển đổi signal và kiểm soát ranh giới lỗi bằng connector.

Ý chính

Cùng một connector xuất dữ liệu khỏi pipeline nguồn và nhận dữ liệu vào pipeline đích. Connector chỉ dùng được khi có trong distribution đang chạy; stability và signal pair được công bố riêng cho từng component. Các tên và mức stability dễ thay đổi trong bài được kiểm chứng với release v0.157.0.

Mục lục

Mental model

Connector là một node có hai vai trò trong service graph:

  • Trong pipeline nguồn, tên connector nằm trong exporters.
  • Trong pipeline đích, chính tên đó nằm trong receivers.

Trong sơ đồ, count nhận traces qua phía exporter, đếm span và phát metrics qua phía receiver. Nhánh traces gốc chỉ còn nếu pipeline nguồn cũng khai báo một exporter traces thật. Connector không tự chuyển tiếp dữ liệu gốc trừ khi contract của component nói như vậy.

Connector khác gì processor và exporter

ComponentPhạm viĐầu ra điển hìnhKhi nên dùng
ProcessorMột pipelineCùng luồng/signal sau sửa hoặc lọcEnrich, redact, batch, sample trong pipeline
ExporterBiên ngoài CollectorBackend, broker hoặc endpoint khácĐưa telemetry ra khỏi process
ConnectorGiữa hai pipeline trong cùng service graphSignal giữ nguyên hoặc signal mớiFan-in/fan-out nội bộ, route, aggregate hoặc convert signal

Connector không thay thế exporter bền vững. Nếu cần vượt process boundary, retry lâu hoặc lưu đệm bền, hãy dùng exporter và hạ tầng vận chuyển phù hợp. Xem Processors, ExportersService pipelines.

Đồ thị pipeline và vòng lặp

Hãy đọc cấu hình như đồ thị có hướng: pipeline nguồn → connector → pipeline đích. Một connector có thể nối nhiều pipeline theo contract của nó, nhưng graph nên là directed acyclic graph (DAG).

Cycle connector hoàn toàn nằm trong cùng service graph bị validation topo từ chối, nên Collector không khởi động. Validator không nhìn thấy vòng đi qua network, ví dụ OTLP exporter gửi tới receiver của Collector khác rồi cuối cùng quay về nguồn. Vì vậy, hãy kiểm tra cả DAG trong process lẫn topology giữa các process.

Chuyển đổi và tổng hợp signal

Connector có thể:

  • chuyển traces, logs hoặc metrics thành metrics đếm;
  • tổng hợp span thành RED metrics (request rate, errors, duration);
  • route telemetry sang pipeline đích dựa trên điều kiện;
  • forward cùng signal để chia graph thành các pipeline có policy khác nhau.

Aggregation làm mất chi tiết. Metric đếm không thể tái tạo span gốc, và restart có thể ảnh hưởng state/temporality tùy connector. Dimension như service.name, operation hoặc status tạo series mới cho mỗi tổ hợp giá trị. Chỉ thêm dimension có cardinality hữu hạn và theo dõi số active series.

Sampling ảnh hưởng metric dẫn xuất

Nếu connector tạo metric sau khi traces đã bị sample, metric phản ánh tập trace còn lại chứ không mặc nhiên phản ánh toàn bộ traffic. Đặt connector trước/ sau sampling có trade-off về độ chính xác, chi phí và dữ liệu được giữ; xác minh bằng một nguồn metric độc lập.

Ví dụ count đã kiểm chứng

Trong release v0.157.0, count có trong distribution contrib và K8s; các cặp traces→metrics, metrics→metrics, logs→metrics và profiles→metrics được công bố ở mức alpha. Ví dụ dùng hành vi mặc định traces→metrics: tạo trace.span.counttrace.span.event.count.

receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 127.0.0.1:4317

connectors:
  count: {}

processors:
  memory_limiter:
    check_interval: 1s
    limit_percentage: 75
    spike_limit_percentage: 15
  batch: {}

exporters:
  debug/traces:
    verbosity: basic
  debug/metrics:
    verbosity: detailed

service:
  pipelines:
    traces/app:
      receivers: [otlp]
      processors: [memory_limiter, batch]
      exporters: [debug/traces, count]

    metrics/derived:
      receivers: [count]
      processors: [memory_limiter, batch]
      exporters: [debug/metrics]

count xuất hiện đúng hai lần trong service.pipelines: exporter của traces/app, receiver của metrics/derived. debug/traces giữ nhánh trace gốc; bỏ exporter này nếu chủ đích chỉ cần metrics dẫn xuất. Hai instance memory_limiter trong danh sách cùng tham chiếu một component; production cần sizing toàn process, không cộng các phần trăm như quota riêng từng pipeline.

Span Metrics và Routing

span_metrics chuyển traces thành metrics về calls và duration. Trong release v0.157.0, component thuộc distribution contrib và cặp traces→metrics được công bố mức alpha. Alias cũ spanmetrics đã deprecated; cấu hình mới nên dùng span_metrics. Component hữu ích cho RED dashboards nhưng giữ state và tạo series theo dimension. Trước khi dùng, đọc README đúng tag release để chọn histogram, temporality, dimensions và cache; không dựa vào default không được pin.

routing route telemetry tới pipeline dựa trên điều kiện OTTL. Ở v0.157.0, component được liệt kê trong contrib/K8s, nhưng sự hiện diện đã khác giữa các release cũ. Cú pháp bảng route và signal support cũng có thể thay đổi. Vì vậy trang này không đưa snippet routing dùng chung cho mọi version: chạy otelcol components, pin image, rồi dùng README tại tag release tương ứng.

Alpha là contract có thể thay đổi

countspan_metrics chưa có stability guarantee như stable component. Pin phiên bản, đọc release notes, test migration và chuẩn bị rollback. Distribution tùy biến có thể loại component dù distribution chuẩn có nó.

Ranh giới lỗi và delivery semantics

Connector nằm trong cùng Collector process, nhưng vẫn tạo ranh giới giữa hai pipeline:

  • Pipeline nguồn có thể fan-out sang backend gốc và connector. Một nhánh lỗi không biến hai nhánh thành transaction nguyên tử.
  • Backpressure từ pipeline đích có thể truyền ngược qua connector, tùy implementation. Queue hoặc batch ở đích vẫn tiêu thụ bộ nhớ chung.
  • Restart làm mất dữ liệu/state chỉ nằm trong process. Connector không phải write-ahead log.
  • Lỗi transform, aggregation hoặc route có thể làm mất nhánh dẫn xuất trong khi nhánh dữ liệu gốc vẫn thành công, hoặc ngược lại.
  • Nhiều replica tạo nhiều state aggregation độc lập. Backend phải xử lý temporality, identity và duplicate/overlap đúng theo contract của connector.

Nếu metric dẫn xuất là SLO-critical, giữ metric ứng dụng gốc làm nguồn kiểm tra. Nếu cần durability, xuất qua queue/broker hoặc backend thay vì coi connector là ranh giới lưu trữ.

Cách xác minh

  1. Chạy otelcol components trong đúng image. Xác nhận connector và mọi receiver/processor/exporter có mặt.
  2. Chạy Collector với cấu hình trong CI. Lỗi unknown type, signal pair không hợp lệ, cycle hoặc decode failure phải chặn deploy.
  3. Gửi fixture có số span và span event biết trước. Với cấu hình count mặc định, kiểm tra metric names và giá trị trong debug/metrics.
  4. Đồng thời kiểm tra debug/traces để chắc chắn nhánh gốc vẫn hoạt động. Tắt detailed debug sau thử nghiệm vì payload có thể chứa PII.
  5. Restart Collector trong test để quan sát state/temporality, rồi gây chậm exporter đích để đo backpressure, memory và refused data.
  6. Với nhiều replica, gửi cùng trace theo chiến lược routing production và so sánh tổng metric dẫn xuất với nguồn độc lập.

Kiểm tra graph tĩnh cũng quan trọng: liệt kê mỗi connector, pipeline nguồn, pipeline đích và signal pair trong review. Mỗi node phải có chủ đích, và không đường nào quay về tổ tiên.

Failure modes và best practices

Failure modeDấu hiệuGiảm thiểu
Connector không có trong distributionStartup báo unknown typeotelcol components; pin đúng core/contrib/K8s hoặc custom build
Chỉ khai báo một phíaPipeline không nhận output hoặc validation failConnector phải là exporter nguồn và receiver đích
Signal pair không được hỗ trợBuild/startup fail hoặc dữ liệu không đúng contractĐọc bảng Supported Pipeline Types ở README đúng release
Vô tình bỏ exporter dữ liệu gốcChỉ còn metric dẫn xuấtFan-out rõ ràng tới exporter gốc và connector
Graph connector trong process có cycleValidation/startup thất bạiVẽ DAG và review cạnh connector trong CI
Vòng lặp qua networkTăng tải và duplicate mà validation cục bộ không thấyReview topology exporter/receiver giữa mọi Collector
Dimension cardinality caoActive series và memory tăng nhanhAllowlist dimension hữu hạn; loại ID/raw URL
Backend metrics chậmBackpressure, queue đầy, mất cả nhánhGiới hạn queue/batch, memory limiter, alert và capacity test
Nâng version làm đổi alpha configDecode fail hoặc semantic driftPin version, release notes, golden fixture, canary/rollback
Aggregation sau samplingCount thấp hoặc biasChọn vị trí có chủ đích và đối chiếu metric độc lập

Best practice là giữ graph nhỏ và đặt tên pipeline theo vai trò (traces/app, metrics/derived). Không dùng connector chỉ để làm cấu hình trông mô-đun nếu một processor trong cùng pipeline đã đủ.

Nguồn tham khảo

On this page