Python에서 OpenTelemetry를 사용한 Kafka용 분산 추적
이 자습서에서는 Apache Kafka, OpenTelemetry 및 Python에서 0에서 1까지의 실제 예제와 함께 작동하는 방법을 다룰 것입니다.
Python에서 OpenTelemetry 추적을 활성화하여 범위를 생성하고 다양한 Kafka 작업에 대한 추적을 시각화하는 방법을 배웁니다.
뭘 기대 할까
이 가이드는 두 부분으로 구성되어 있습니다.
다양한 Kafka 작업(예: 소비 및 생산)에 대한 범위를 생성하기 위해 OpenTelemetry 라이브러리를 사용합니다.
Kafka 및 OpenTelemetry에 이미 익숙하다면 이 가이드의 practical 부분으로 바로 이동하십시오.
아파치 카프카란?
Kafka is an open-source distributed event stream platform, where we can send events to topics and consume them. You can learn more about Kafka here .OpenTelemetry란 무엇입니까?
In a world where microservices are becoming a standard architecture and distributed messaging systems like Kafka play a core part in enabling the independent microservices to communicate, the world needed a way to visualize and troubleshoot the complexity of a distributed architecture.
Led by the CNCF (Cloud Native Computing Foundation), OpenTelemetry is an open-source project, a set of APIs and SDKs, that allows us to collect, export, and generate traces, logs, and metrics.
With OpenTelemetry, we gather data from the events happening within the different components in our systems (including all sorts of message brokers like Kafka), which ultimately help us understand our software’s performance and behavior and visualize our microservices architecture.
For this specific guide, we will focus on traces, you can learn more about OpenTelemetry in this friendly guide for developers .OpenTelemetry 추적
A trace tracks the progression of a single request, as it is handled by the different microservices/ moving parts.
The atomic unit of work in a trace is called a span, for example, a call to a database, external service, send message to Kafka topic, etc.
Each trace contains a collection of 1 or more spans and more information like how much time the entire trace took to complete.
OpenTelemetry 계측이란 무엇입니까?
So now you know what traces and spans mean, but how do you create them?
That can be done using the SDKs provided to us by OpenTelemetry, which bundles useful instrumentations.
What’s an instrumentation? A piece of code that is responsible for creating spans and traces and sending them to some backend, for later visualizing them.
OpenTelemetry contains instrumentations for a lot of different libraries, including ones for Kafka.
Python에서 OpenTelemetry와 함께 Kafka를 사용하는 방법
By now you should have all the theory you need, so let’s start writing some code.
실용적인 부분
먼저 관련 라이브러리를 설치해 보겠습니다.
pip install opentelemetry-api
pip install opentelemetry-sdk
pip install opentelemetry-instrumentation-kafka-python
pip install kafka-python
그런 다음 tracing.py 파일을 추가해 보겠습니다.
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import (
SimpleSpanProcessor,
ConsoleSpanExporter,
)
from opentelemetry.instrumentation.kafka import KafkaInstrumentor
def instrument(*args, **kwargs):
provider = TracerProvider()
simple_processor = SimpleSpanProcessor(ConsoleSpanExporter())
provider.add_span_processor(simple_processor)
trace.set_tracer_provider(provider)
KafkaInstrumentor().instrument()
이 파일은 OpenTelemetry SDK를 사용하여 스팬 및 추적을 생성할 수 있도록 합니다.
콘솔 출력으로 스팬을 보낼 것임을 의미하는 콘솔 스팬 익스포터가 있습니다.
보시다시피 KafkaInstrumentor를 사용하여 소비 및 생산과 같은 Kafka 관련 작업을 위한 범위를 만듭니다.
이것은 Kafka 스팬을 생성하는 데 필요한 모든 OpenTelemetry 코드입니다.
생산자 파일을 만들어 봅시다:
from tracing import instrument
instrument()
from kafka import KafkaProducer
producer = KafkaProducer(bootstrap_servers='localhost:9092')
for _ in range(1):
producer.send('foobar', b'some_message_bytes')
producer.flush()
그리고 소비자 파일을 만듭니다.
from tracing import instrument
instrument()
from kafka import KafkaConsumer
consumer = KafkaConsumer('foobar', bootstrap_servers='localhost:9092')
for msg in consumer:
print(msg)
두 파일 모두 다음 두 줄이 있습니다.
from tracing import instrument
instrument()
이는 계측기 기능 호출이며 다음 명령을 사용하여 소비자 및 생산자 파일을 실행할 때 스팬 생성을 활성화합니다.
python producer.py
python consumer.py
콘솔 내보내기를 사용하므로 콘솔 출력에서 소비자와 생산자의 범위를 볼 수 있습니다.
{
"name": "foobar receive",
"context": {
"trace_id": "0x436c0e9807b2f61b4a72bc63e5205954",
"span_id": "0xdda310172f7297cd",
"trace_state": "[]"
},
"kind": "SpanKind.CONSUMER",
"parent_id": "0x711a6a5d5bb977d8",
"start_time": "2022-03-02T10:40:36.695519Z",
"end_time": "2022-03-02T10:40:36.720864Z",
"status": {
"status_code": "UNSET"
},
"attributes": {
"messaging.system": "kafka",
"messaging.destination": "foobar",
"messaging.kafka.partition": 0,
"messaging.url": "\"localhost:9092\""
},
"events": [],
"links": [],
"resource": {
"telemetry.sdk.language": "python",
"telemetry.sdk.name": "opentelemetry",
"telemetry.sdk.version": "1.9.1",
"service.name": "unknown_service"
}
}
{
"name": "foobar send",
"context": {
"trace_id": "0x436c0e9807b2f61b4a72bc63e5205954",
"span_id": "0x711a6a5d5bb977d8",
"trace_state": "[]"
},
"kind": "SpanKind.PRODUCER",
"parent_id": null,
"start_time": "2022-03-02T10:40:36.609135Z",
"end_time": "2022-03-02T10:40:36.610410Z",
"status": {
"status_code": "UNSET"
},
"attributes": {
"messaging.system": "kafka",
"messaging.destination": "foobar",
"messaging.url": "\"localhost:9092\""
},
"events": [],
"links": [],
"resource": {
"telemetry.sdk.language": "python",
"telemetry.sdk.name": "opentelemetry",
"telemetry.sdk.version": "1.9.1",
"service.name": "unknown_service"
}
}
하지만 콘솔 로그보다 더 나은 시각화를 원한다는 느낌이 듭니다. 그렇다면 – 계속 읽어보세요 🙂
OpenTelemetry 추적 데이터 시각화
For this article, I will be using Aspecto 내 흔적을 시각화합니다. quickly creating a free account을(를) 따라갈 수 있습니다.Aspecto는 Kafka와 같은 비동기 메시징 플랫폼을 시각화하기 위한 지원 기능을 내장하고 있으므로 이 가이드의 목적에 완벽하게 부합합니다.
로그인하면 API 키를 받고 몇 줄의 코드, 환경 변수를 변경하고 일부 패키지를 설치하기만 하면 됩니다. 아래에서 그 방법을 알려드리겠습니다.
최종 결과는 다음과 같아야 합니다.
먼저 다음을 설치해 보겠습니다.
pip install opentelemetry-exporter-otlp-proto-grpc
그런 다음 콘솔 내보내기 대신 otlp 내보내기를 사용하여 데이터를 Aspecto로 보내도록 tracing.py 파일을 수정해 보겠습니다.
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import (
BatchSpanProcessor,
SimpleSpanProcessor,
ConsoleSpanExporter,
)
from opentelemetry.instrumentation.kafka import KafkaInstrumentor
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
def instrument(*args, **kwargs):
provider = TracerProvider()
simple_processor = SimpleSpanProcessor(OTLPSpanExporter())
provider.add_span_processor(simple_processor)
trace.set_tracer_provider(provider)
KafkaInstrumentor().instrument()
소비자를 실행하려면
OTEL_SERVICE_NAME=kafka-consumer OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=https://otelcol.aspecto.io:4317 OTEL_EXPORTER_OTLP_HEADERS=Authorization=YOUR_ASPECTO_API_KEY_HERE python consumer.py
프로듀서를 실행하려면
OTEL_SERVICE_NAME=kafka-producer OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=https://otelcol.aspecto.io:4317 OTEL_EXPORTER_OTLP_HEADERS=Authorization=YOUR_ASPECTO_API_KEY_HERE python producer.py
그리고 그게 다야! Aspecto 플랫폼에 들어가 추적 검색을 클릭하면 1~2분 후에 추적을 볼 수 있어야 합니다.
언제든지 채팅 버튼을 클릭하고 저희에게 연락하십시오. 모든 것을 파악하고 질문에 답할 수 있도록 기꺼이 도와드리겠습니다.
추신 오픈 소스를 사용하여 추적을 시각화하는 것을 선호하는 경우 Jaeger 추적을 확인하십시오. 이것을 따르십시오guide to learn how to use OpenTelemetry to send traces to Jaeger. 필요한 환경을 설정하는 데 시간이 조금 더 걸린다는 점에 유의하십시오.
유용한 가이드가 되었기를 바라며 궁금한 점이 있으면 언제든지 문의해 주세요.
Reference
이 문제에 관하여(Python에서 OpenTelemetry를 사용한 Kafka용 분산 추적), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aspecto/distributed-tracing-for-kafka-with-opentelemetry-in-python-279m텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)