全部产品
Search
文档中心

Application Real-Time Monitoring Service:Gunakan Jaeger untuk melaporkan data jejak aplikasi Python

更新时间:Jul 06, 2025

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.

Penting

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

Bagaimana Data Dilaporkan?

  • Gambar berikut menunjukkan cara melaporkan data tanpa menggunakan agen Jaeger.

  • Gambar berikut menunjukkan cara melaporkan data dengan menggunakan agen Jaeger.

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

  1. Jalankan perintah berikut di Docker Hub untuk menarik gambar agen Jaeger v1.25:

    docker pull jaegertracing/jaeger-agent:1.25
  2. Jalankan 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)
    Catatan

    Ganti <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.6

Langkah 2: Buat Objek Tracer

  1. 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 buffer
  2. Jalankan file Python.

Lihat Data di Konsol Managed Service for OpenTelemetry

  1. Masuk ke konsol ARMS. Di panel navigasi sisi kiri, pilih Application Monitoring > Applications.

  2. Di halaman Applications, pilih wilayah di bilah navigasi atas dan klik nama aplikasi.

    Catatan

    Jika ikon image ditampilkan di kolom Language, aplikasi tersebut terhubung ke Pemantauan Aplikasi. Jika tanda hubung (-) ditampilkan, aplikasi tersebut terhubung ke Managed Service for OpenTelemetry.

  3. Di bagian Application Overview, Anda dapat melihat metrik performa utama dan topologi aplikasi.

    图1.应用总览界面

  4. Di panel navigasi sisi kiri, klik Application Details.

    Di tab Ikhtisar bagian Application Details, Anda dapat melihat ikhtisar aplikasi.图2.应用详情-概览界面

  5. Di bagian Application Details, klik tab Traces.

    Di tab Traces, Anda dapat melihat jejak aplikasi.图3.应用详情-调用链路界面

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={})