Setelah Anda menggunakan Jaeger untuk menginstrumentasi aplikasi Python dan melaporkan data jejak ke Managed Service for OpenTelemetry, Managed Service for OpenTelemetry mulai memantau aplikasi Python. Anda dapat melihat data pemantauan aplikasi seperti topologi aplikasi, jejak, transaksi abnormal, transaksi lambat, dan analisis SQL. Topik ini menjelaskan cara menggunakan Jaeger untuk menginstrumentasi aplikasi Python dan melaporkan data jejak.
Disarankan untuk menghubungkan aplikasi Anda ke Managed Service for OpenTelemetry menggunakan OpenTelemetry Protocol (OTLP). Dengan cara ini, Anda mendapatkan lebih banyak fitur, kemampuan jejak yang lebih canggih, dan pengalaman pengguna terbaik.
Alibaba Cloud menyediakan panduan terperinci tentang integrasi OpenTelemetry dengan aplikasi serta praktik terbaik dalam menggunakan OpenTelemetry untuk membantu Anda memulai dengan Managed Service for OpenTelemetry. Untuk informasi lebih lanjut, lihat Persiapan.
Informasi Latar Belakang
Catatan Penggunaan
Untuk Python, Jaeger v1.25 hanya memungkinkan pelaporan data jejak menggunakan agen Jaeger. Pelaporan data jejak melalui HTTP tidak didukung. Untuk informasi lebih lanjut, lihat Fitur Pustaka Klien dalam dokumentasi resmi Jaeger.
Untuk Python, Jaeger v1.25 memungkinkan pelaporan data jejak dari klien Jaeger ke agen Jaeger hanya melalui UDP. Protokol UDP tidak menjamin keandalan komunikasi. Untuk memastikan transfer data jejak yang andal, disarankan menjalankan klien Jaeger dan agen Jaeger di host yang sama.
Langkah 1: Membangun Lingkungan
Contoh ini memerlukan versi berikut untuk Docker, agen Jaeger, klien Jaeger, dan Python untuk membangun lingkungan.
Docker dan Agen Jaeger
Versi Docker: 20.10.7
Versi Agen Jaeger: 1.25
Jalankan perintah berikut di Docker Hub untuk menarik gambar agen Jaeger v1.25:
docker pull jaegertracing/jaeger-agent:1.25Jalankan perintah berikut untuk menjalankan agen Jaeger v1.25:
docker run -d --name jaeger-agent -p 5775:5775/udp -p 6831:6831/udp -p 6832:6832/udp -p 5778:5778/tcp jaegertracing/jaeger-agent:1.25 --reporter.type=grpc --reporter.grpc.host-port=<endpoint>(Masukkan titik akhir) --agent.tags=<auth>(Masukkan informasi autentikasi)CatatanGanti
<endpoint>dan<auth>dengan titik akhir dan informasi autentikasi yang ditampilkan di halaman Cluster Configurations konsol Managed Service for OpenTelemetry. Untuk informasi lebih lanjut tentang cara memperoleh titik akhir, lihat bagian "Prasyarat" dari topik ini.
Python dan Klien Jaeger
Versi Python: 3.8.5
Versi Klien Jaeger: 4.6.0
Instal paket Python berikut untuk mengonfigurasi lingkungan klien Jaeger:
certifi==2021.5.30
charset-normalizer==2.0.4
idna==3.2
jaeger-client==4.6.0
opentracing==2.4.0
requests==2.26.0
six==1.16.0
threadloop==1.0.2
thrift==0.13.0
tornado==6.1
urllib3==1.26.6Langkah 2: Buat Objek Tracer
Buat file Python yang berisi konten berikut.
Jalankan kode berikut untuk membuat objek Tracer dan gunakan objek Tracer untuk membuat rentang untuk melaporkan data ke backend Managed Service for OpenTelemetry:
import logging import time from jaeger_client import Config def construct_span(tracer): with tracer.start_span('AliyunTestSpan') as span: span.log_kv({'event': 'test message', 'life': 42}) print("tracer.tages: ", tracer.tags) with tracer.start_span('AliyunTestChildSpan', child_of=span) as child_span: span.log_kv({'event': 'down below'}) return span if __name__ == "__main__": log_level = logging.DEBUG logging.getLogger('').handlers = [] logging.basicConfig(format='%(asctime)s %(message)s', level=log_level) config = Config( config={ # biasanya dibaca dari beberapa konfigurasi yaml 'sampler': { 'type': 'const', 'param': 1, }, 'local_agent': { # Tentukan nama host dan nomor port agen Jaeger. # Untuk memastikan keandalan data, kami sarankan Anda menjalankan klien Jaeger dan agen Jaeger di host yang sama. Oleh karena itu, parameter reporting_host disetel ke 127.0.0.1. 'reporting_host': '127.0.0.1', 'reporting_port': 6831, }, 'logging': True, }, # Tentukan nama aplikasi. service_name="mytest3", validate=True ) # panggilan ini juga menyetel opentracing.tracer tracer = config.initialize_tracer() span = construct_span(tracer) time.sleep(2) # yield to IOLoop untuk flush spans - https://github.com/jaegertracing/jaeger-client-python/issues/50 tracer.close() # flush spans yang tersimpan dalam bufferJalankan file Python.
Lihat Data di Konsol Managed Service for OpenTelemetry
Masuk ke konsol ARMS. Di panel navigasi sisi kiri, pilih .
Di halaman Applications, pilih wilayah di bilah navigasi atas dan klik nama aplikasi.
CatatanJika ikon
ditampilkan di kolom Language, aplikasi tersebut terhubung ke Pemantauan Aplikasi. Jika tanda hubung (-) ditampilkan, aplikasi tersebut terhubung ke Managed Service for OpenTelemetry.Di bagian Application Overview, Anda dapat melihat metrik performa utama dan topologi aplikasi.

Di panel navigasi sisi kiri, klik Application Details.
Di tab Ikhtisar bagian Application Details, Anda dapat melihat ikhtisar aplikasi.

Di bagian Application Details, klik tab Traces.
Di tab Traces, Anda dapat melihat jejak aplikasi.

Gunakan Jaeger
Bagian ini memberikan metode umum untuk menggunakan Jaeger. Untuk informasi lebih lanjut, lihat Memulai dalam dokumentasi resmi Jaeger.
Buat objek Tracer:
from jaeger_client import Config def init_jaeger_tracer(service_name='your-app-name'): config = Config(config={}, service_name=service_name) return config.initialize_tracer()Buat dan selesaikan rentang:
# Mulai rentang yang tidak memiliki rentang induk. tracer.start_span('TestSpan') # Mulai rentang yang memiliki rentang induk. tracer.start_span('ChildSpan', child_of=span) # Selesaikan rentang. span.finish()Teruskan Konteks Rentang:
# Serialisasi: Injeksi Konteks Rentang dan teruskan ke rentang berikutnya. tracer.inject( span_context=span.context, format=Format.TEXT_MAP, carrier=carrier ) # Deserialisasi: Ekstrak Konteks Rentang yang diteruskan. span_ctx = tracer.extract(format=Format.TEXT_MAP, carrier={})