我尝试了什么: 配置了用于记录的OpenTelemetry:
使用logginginstrumentor()。仪器(set_logging_format = true)启用自动日志仪器。 确保正确设置OpenTelemetry SDK和OTLP GRPC出口商。 验证的跟踪数据:
检查了在Signoz中成功发送和显示的痕迹,以确认OTLP出口商正在运行。 在本地检查日志记录输出:
确保正在生成日志并写入本地日志文件或控制台
Code:
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.resources import Resource
from opentelemetry.instrumentation.logging import LoggingInstrumentor
import logging
# Configure the tracer to use OTLP exporter
resource = Resource(attributes={
"service.name": "your_service_name"
})
provider = TracerProvider(resource=resource)
trace.set_tracer_provider(provider)
otlp_exporter = OTLPSpanExporter(
endpoint="***********:4317",
insecure=True
)
span_processor = BatchSpanProcessor(otlp_exporter)
provider.add_span_processor(span_processor)
# Initialize automatic logging instrumentation
LoggingInstrumentor().instrument(set_logging_format=True)
# Example of logging
logging.getLogger().setLevel(logging.INFO)
def my_function():
logging.info("This is an info log from my_function")
您将必须创建一个提供商和Hanlder,并将其附加到Logger
import logging
from opentelemetry import trace
from opentelemetry._logs import set_logger_provider
from opentelemetry.exporter.otlp.proto.grpc._log_exporter import (
OTLPLogExporter,
)
from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
from opentelemetry.sdk.resources import Resource
import json
import os
exporter = OTLPLogExporter(endpoint=os.getenv("OTLP_ENDPOINT", "localhost:4317"), insecure=json.loads(os.getenv("INSECURE", "true").lower()))
logger_provider = LoggerProvider(
resource=Resource.create(
{
"service.name": "hello"
},
),
)
set_logger_provider(logger_provider)
logger_provider.add_log_record_processor(BatchLogRecordProcessor(exporter))
handler = LoggingHandler(level=logging.INFO, logger_provider=logger_provider)
logging.getLogger().addHandler(handler)
logging.getLogger().setLevel(logging.INFO)
logging.info("hello info")
logging.warning("Jackdaws love my big sphinx of quartz.")
也设置为配置这些,您还可以使用自动启动,它将捕获痕迹和日志,
Https://signoz.io/docs/userguide/userguide/python-logs-auto-intomentation/