Tüm Ürünler
Search
Belge Merkezi

Application Real-Time Monitoring Service:Associate trace IDs with logs for a Python application

Son Güncelleme:Oct 05, 2026

Dağıtık bir sistemde bir istek başarısız olduğunda, hizmetler arasındaki ilgili günlükleri bulmak bir ilişkilendirme anahtarı olmadan zordur. Application Real-Time Monitoring Service (ARMS), OpenTelemetry izlem bağlamını — izleme kimliği, span kimliği ve hizmet adı — Python günlük kayıtlarına ekleyerek bu sorunu çözer. Daha sonra kök nedeni belirlemek için Simple Log Service (SLS) içindeki günlükleri izleme kimliğine göre arayabilirsiniz.

Nasıl çalışır: ARMS Python aracı, Python'un standart logging modülüne bağlanır ve her bir LogRecord öğesine izlem bağlamı alanları ekler. Aracı yalnızca ekleme işlemini yönetir; günlükleri toplamaz veya iletmez. Ayrı bir günlük toplama işlem hattı (genellikle SLS) günlük teslimatını sağlar.

Önemli

Yalnızca Python standart logging modülü, OTEL_PYTHON_LOG_CORRELATION ortam değişkeni aracılığıyla otomatik izlem bağlamı eklemeyi destekler. Structlog ve diğer üçüncü taraf çerçeveler otomatik eklemeyi desteklemez.

Hızlı başlangıç

Üç ortam değişkenini ayarlayın ve uygulamanızı yeniden başlatın:

export OTEL_PYTHON_LOG_CORRELATION=true
export OTEL_PYTHON_LOG_LEVEL=info
export OTEL_PYTHON_LOG_FORMAT='%(asctime)s %(levelname)s [%(name)s] [%(filename)s:%(lineno)d] [trace_id=%(otelTraceID)s span_id=%(otelSpanID)s resource.service.name=%(otelServiceName)s trace_sampled=%(otelTraceSampled)s] - %(message)s'

Uygulama yeniden başlatıldıktan sonra, izlenen bir istek kapsamında oluşturulan her günlük satırı izlem bağlamını içerir:

2026-03-10 14:30:00,123 INFO [my_app] [app.py:42] [trace_id=ac1b2d3e4f5a6b7c8d9e0f1a2b3c4d5e6 span_id=1a2b3c4d5e6f7a8b resource.service.name=my-python-app trace_sampled=True] - Order created successfully

SLS bağlama ve doğrulama dahil olmak üzere tam kurulum için aşağıdaki bölümlere devam edin.

Ön koşullar

SLS'yi ARMS'e bağlama

Konsolun izlemeleri günlüklerle ilişkilendirebilmesi için SLS projenizi ve Logstore'unuzu ARMS'e bağlayın.

  1. ARMS konsoluna oturum açın.

  2. Sol gezinme bölmesinde Application Monitoring > Application List seçeneğini tıklayın.

  3. Üst gezinme çubuğundan bir bölge seçin ve uygulamanızı tıklayın.

    Not

    Language sütunundaki simgeler programlama dilini gösterir: - Java icon: Java - Go icon: Go - Python icon: Python - - (Tire): Managed Service for OpenTelemetry'de izlenen bir uygulama

  4. Üst gezinme çubuğunda Configuration > Custom Configurations seçeneğini seçin.

  5. Application log Association configuration bölümünde, Log Source değerini Log service SLS olarak ayarlayın. SLS'nin dağıtıldığı bölgeyi seçin ve bir proje ile bir Logstore bağlayın.

İzlem-günlük ilişkilendirmesini etkinleştirme

İzlem bağlamı eklemeyi etkinleştirmek ve günlük biçimini tanımlamak için üç ortam değişkenini yapılandırın.

Ortam değişkenleri

Değişken Amaç Varsayılan
OTEL_PYTHON_LOG_CORRELATION İzlem-günlük ilişkilendirmesini etkinleştirir veya devre dışı bırakır. Etkinleştirmek için true olarak ayarlayın. false olarak ayarlanırsa veya boş bırakılırsa ilişkilendirme devre dışı kalır. false
OTEL_PYTHON_LOG_LEVEL İlişkilendirme için minimum günlük düzeyi. Geçerli değerler: debug, info, warning, error. -
OTEL_PYTHON_LOG_FORMAT Günlük çıktısı için biçim dizesi. Değeri iş gereksinimlerinize göre özelleştirebilirsiniz. Günlük çıktısına izlem bağlamını dahil etmek için aşağıda listelenen izlem bağlamı alanlarını kullanın. -

İzlem bağlamı alanları

Günlük çıktısına izlem bağlamını dahil etmek için OTEL_PYTHON_LOG_FORMAT biçim dizesinde şu alanları kullanın:

Alan Açıklama
%(otelTraceID)s Günlüğü dağıtık bir izlemeden bağlayan izleme kimliği
%(otelSpanID)s Mevcut günlük tarafından oluşturulan span kimliği
%(otelTraceSampled)s İzlemenin örnekleme yapılıp yapılmadığı (True veya False)
%(otelServiceName)s ARMS'e kaydedilen uygulama adı

Ortam değişkenlerini ayarlama

Uygulamanızı başlatmadan önce aşağıdaki ortam değişkenlerini ayarlayın:

export OTEL_PYTHON_LOG_CORRELATION=true
export OTEL_PYTHON_LOG_LEVEL=info
export OTEL_PYTHON_LOG_FORMAT='%(asctime)s %(levelname)s [%(name)s] [%(filename)s:%(lineno)d] [trace_id=%(otelTraceID)s span_id=%(otelSpanID)s resource.service.name=%(otelServiceName)s trace_sampled=%(otelTraceSampled)s] - %(message)s'

Uygulama başladıktan sonra günlük çıktısı izlem bağlamını içerir:

Submitting thread
INFO:     Started server process [271]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
2025-01-02 21:55:31,142 WARNING [__main__] [app.py:14] [trace_id=534xxx021eb span_id=15xxx32 resource.service.name=fastapi-agent-manual trace_sampled=True] - calling client
INFO:     127.0.0.1:59956 - "GET / HTTP/1.1" 200 OK

Özel işleyicilere izlem bağlamı ekleme

İzlem bağlamı yalnızca kök logger'a otomatik olarak eklenir. Özel işleyiciler kullanıyorsanız, biçimlendiricilerini OTEL_PYTHON_LOG_FORMAT ortam değişkeninden okuyacak şekilde ayarlayın:

import os
import logging

# Read the format string from the environment variable
log_format = os.getenv('OTEL_PYTHON_LOG_FORMAT')

# Create a custom handler with trace context fields
my_handler = logging.StreamHandler()
formatter = logging.Formatter(log_format)
my_handler.setFormatter(formatter)

# Attach the handler to a logger
logger = logging.getLogger('my_module')
logger.addHandler(my_handler)
logger.setLevel(logging.INFO)

structlog'a izlem bağlamı ekleme

Uygulamanız structlog kullanıyorsa otomatik izlem bağlamı eklemesi desteklenmez. OpenTelemetry SDK'sından izlem bağlamını okuyan özel bir işlemciyi structlog işlem hattınıza ekleyin:

from opentelemetry import trace
import structlog

def add_otel_context(logger, method, event_dict):
    span = trace.get_current_span()
    ctx = span.get_span_context()
    if ctx.is_valid:
        event_dict['trace_id'] = format(ctx.trace_id, '032x')
        event_dict['span_id'] = format(ctx.span_id, '016x')
    return event_dict

structlog.configure(
    processors=[
        add_otel_context,
        structlog.processors.JSONRenderer(),
    ]
)

Yapılandırmadan sonra, izlenen bir istek kapsamında oluşturulan her structlog girişi trace_id ve span_id alanlarını içerir. SLS, günlüğü ilgili dağıtık izlemden ilişkilendirmek için bu alanları kullanır.

Günlük toplamayı yapılandırma (isteğe bağlı)

ARMS Python aracı yalnızca izlem bağlamı alanlarını günlük kayıtlarına eklemekle sorumludur. Uygulama günlüklerini toplamaz veya iletmez. Uygulama günlükleriniz doğrudan SLS tarafından toplanır; OpenTelemetry konsoluna ek raporlama gerekmez.

İlişkilendirilmiş günlükleri ARMS konsolunda görüntülemek için, uygulamanızdan günlükleri toplayıp SLS'yi ARMS'e bağlama bölümünde bağladığınız SLS projesine ve Logstore'a iletecek şekilde SLS'yi yapılandırın.

SLS günlük toplama hakkında daha fazla bilgi için bkz. Veri toplama genel bakış.

Yapılandırmayı doğrulama

  1. Uygulamanıza bir test isteği gönderin.

  2. Uygulama günlük çıktısını kontrol edin. İzlenen bir istek kapsamında oluşturulan her günlük satırı sıfır olmayan bir trace_id değeri içerir:

       2026-03-10 14:30:00,123 INFO [my_app] [app.py:42] [trace_id=ac1b2d3e4f5a6b7c8d9e0f1a2b3c4d5e6 span_id=1a2b3c4d5e6f7a8b resource.service.name=my-python-app trace_sampled=True] - Order created successfully
  3. ARMS konsolunda, istek için izlem ayrıntıları sayfasını açın ve ilişkili günlüklerin doğru izleme kimliğini görüntülediğini onaylayın.