← 文章 / 云原生与基础设施
signoz 12小时前 · 2026-11-10 01:03:49 · 0 阅读

使用 OpenTelemetry 实现 Azure OpenAI 的监控与可观测性

本指南将指导你使用 OpenTelemetry 为 Azure OpenAI API 搭建监控与可观测性体系,并将日志、链路和指标导出至 SigNoz。借助此集成方案,你可以在 SigNoz 中观察模型性能、捕获请求/响应详情以及追踪系统级指标,从而实时掌握 Azure OpenAI 应用的延迟、错误率和用量趋势。

许多开发者更倾向于选择 Azure OpenAI 而非普通 OpenAI,因为其具备企业级特性,包括增强的安全性和合规认证、与 Azure 虚拟网络的私有网络集成、区域数据驻留选项、与 Azure Active Directory 集成以实现身份管理、提供专用容量和预置吞吐量,以及与其他 Azure 服务的无缝集成。这些能力使 Azure OpenAI 对于有严格监管要求的组织,或已深入 Azure 生态系统的团队尤为珍贵。

在 LLM 应用中通过遥测为 Azure OpenAI 添加工具化支持,可确保 AI 工作流的全链路可观测性,便于调试问题、优化性能并理解用户交互。通过利用 SigNoz,你可以在统一仪表板中分析关联的链路、日志和指标,配置告警,并获得可执行的洞察,从而持续提升可靠性、响应性和用户体验。

前提条件

  • SigNoz 部署方案(二选一):
  • 互联网访问权限,用于将遥测数据发送至 SigNoz Cloud
  • 一个 Microsoft Azure 账户,已部署 OpenAI 资源并具备可用的 API Key
  • Python 环境:已安装 pip 用于管理 Python 包,并(建议但非必需)配置 Python 虚拟环境以隔离依赖
  • JavaScript 环境:已安装 Node.js(14 或更高版本)及 npm 用于管理 Node.js 包

监控 Azure OpenAI

Azure OpenAI API 采用了与 OpenAI 兼容的 API 格式,只需修改配置,就能用 OpenAI SDK 或其他兼容 OpenAI API 的软件访问 Azure OpenAI API。因此,监控 OpenAI API 的方法同样适用于 Azure OpenAI API。详情可参考 Azure OpenAI API 文档。

PythonJavaScriptNo Code(推荐)Code

推荐使用无代码自动埋点,改动最少、上手最快。如果你想在不修改应用代码的情况下快速搭建可观测性,并且使用标准的 instrumentor 库,这是最理想的方式。

步骤 1:在 Python 环境中安装所需依赖包。

Copy
pip install \
  opentelemetry-distro \
  opentelemetry-exporter-otlp \
  opentelemetry-instrumentation-httpx \
  opentelemetry-instrumentation-system-metrics \
  openai \
  openinference-instrumentation-openai

步骤 2:添加自动埋点

Copy
opentelemetry-bootstrap --action=install

步骤 3:配置日志级别

为确保日志能被正确采集和导出,需要将 root logger 配置为输出 INFO 及以上级别的日志:

Copy
import logging
logging.getLogger().setLevel(logging.INFO)

这将 root logger 的最低日志级别设为 INFO,确保 logger.info() 调用以及更高级别的日志(WARNING、ERROR、CRITICAL)能被 OpenTelemetry 日志自动埋点捕获并发送到 SigNoz。

步骤 4:运行示例

Copy
import openai
import os
 
client = OpenAI(api_key=os.getenv("AZURE_OPENAI_API_KEY"), base_url="https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/")
 
response = client.chat.completions.create(
    model="<your-model-deployment-name>",
    messages=[
        {"role": "system", "content": "You are a helpful assistant"},
        {"role": "user", "content": "What is SigNoz?"},
    ],
    stream=False
)
 
print(response.choices[0].message.content)

📌 注意:运行这段代码前,请确保已将环境变量 AZURE_OPENAI_API_KEY 设置为有效的 API key。

第 5 步:使用自动插桩运行你的应用

Copy
OTEL_RESOURCE_ATTRIBUTES="service.name=<service_name>" \
OTEL_EXPORTER_OTLP_ENDPOINT="https://ingest.<region>.signoz.cloud:443" \
OTEL_EXPORTER_OTLP_HEADERS="signoz-ingestion-key=<your-ingestion-key>" \
OTEL_EXPORTER_OTLP_PROTOCOL=grpc \
OTEL_TRACES_EXPORTER=otlp \
OTEL_METRICS_EXPORTER=otlp \
OTEL_LOGS_EXPORTER=otlp \
OTEL_PYTHON_LOG_CORRELATION=true \
OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED=true \
opentelemetry-instrument <your_run_command>
  • <service_name> 是你的服务名称
  • <region>:你的 SigNoz Cloud 区域
  • <your-ingestion-key>:你的 SigNoz 接入密钥
  • 将 <your_run_command> 替换为实际运行应用程序的命令。例如:python main.py
Info

正在使用自托管的 SigNoz?大多数步骤完全相同。要调整此指南,请如 云端 → 自托管 中所示,更新端点并移除接入密钥头。

基于代码的插桩让你能够精细控制遥测配置。当你需要自定义资源属性、采样策略或集成现有的可观测性基础设施时,请使用此方法。

第 1 步:在你的 Python 环境中安装必要的包。

Copy
pip install \
  opentelemetry-api \
  opentelemetry-sdk \
  opentelemetry-exporter-otlp \
  opentelemetry-instrumentation-httpx \
  opentelemetry-instrumentation-system-metrics \
  openai \
  openinference-instrumentation-openai

第 2 步:在你的 Python 应用中导入必要的模块

追踪:

Copy
from openinference.instrumentation.openai import OpenAIInstrumentor
from opentelemetry import trace
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter

日志:

Copy
from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter
from opentelemetry._logs import set_logger_provider
import logging

指标(Metrics):

Copy
from opentelemetry.sdk.metrics import MeterProvider
from opentelemetry.exporter.otlp.proto.http.metric_exporter import OTLPMetricExporter
from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader
from opentelemetry import metrics
from opentelemetry.instrumentation.system_metrics import SystemMetricsInstrumentor
from opentelemetry.instrumentation.httpx import HTTPXClientInstrumentor

第 3 步:配置 OpenTelemetry Tracer Provider,将 traces 直接发送到 SigNoz Cloud

Copy
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry import trace
import os
 
resource = Resource.create({"service.name": "<service_name>"})
provider = TracerProvider(resource=resource)
span_exporter = OTLPSpanExporter(
    endpoint= os.getenv("OTEL_EXPORTER_TRACES_ENDPOINT"),
    headers={"signoz-ingestion-key": os.getenv("SIGNOZ_INGESTION_KEY")},
)
processor = BatchSpanProcessor(span_exporter)
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)
  • <service_name>:你的服务名称
  • OTEL_EXPORTER_TRACES_ENDPOINT → SigNoz Cloud 的 trace 端点,需使用对应的区域:https://ingest.<region>.signoz.cloud:443/v1/traces
  • SIGNOZ_INGESTION_KEY → 你的 SigNoz ingestion key
Info

使用自托管(Self-Hosted)的 SigNoz?大部分步骤都一样,只需按Cloud → Self-Hosted 文档修改端点,并去掉 ingestion key 请求头即可。

第 4 步:使用 OpenAIInstrumentor 和已配置的 Tracer Provider 对 Azure OpenAI 进行插桩

Copy
from openinference.instrumentation.openai import OpenAIInstrumentor
 
OpenAIInstrumentor().instrument(tracer_provider=provider)

📌 重要提示:请将此代码放在应用逻辑的起始位置——即在调用或使用任何 Azure OpenAI 函数之前——以确保遥测数据被正确捕获。

第 5 步:配置日志

Copy
import logging
from opentelemetry.sdk.resources import Resource
from opentelemetry._logs import set_logger_provider
from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter
import os
 
resource = Resource.create({"service.name": "<service_name>"})
logger_provider = LoggerProvider(resource=resource)
set_logger_provider(logger_provider)
 
otlp_log_exporter = OTLPLogExporter(
    endpoint= os.getenv("OTEL_EXPORTER_LOGS_ENDPOINT"),
    headers={"signoz-ingestion-key": os.getenv("SIGNOZ_INGESTION_KEY")},
)
logger_provider.add_log_record_processor(
    BatchLogRecordProcessor(otlp_log_exporter)
)
# 将 OTel 日志处理程序附加到根记录器
handler = LoggingHandler(level=logging.INFO, logger_provider=logger_provider)
logging.basicConfig(level=logging.INFO, handlers=[handler])
 
logger = logging.getLogger(__name__)
  • <service_name> 是你的服务名称
  • OTEL_EXPORTER_LOGS_ENDPOINT → SigNoz Cloud 的端点,需使用正确的区域:https://ingest.<region>.signoz.cloud:443/v1/logs
  • SIGNOZ_INGESTION_KEY → 你的 SigNoz采集密钥
Info

正在使用自托管 SigNoz?大部分步骤相同。为了适配本指南,请更新端点并移除采集密钥头部,具体操作见云 → 自托管。

第 6 步:配置指标

Copy
from opentelemetry.sdk.resources import Resource
from opentele









原始来源: signoz

评论 (0)