← 文章 / 云原生与基础设施
signoz 5小时前 · 2026-11-10 08:02:58 · 0 阅读

基于 OpenTelemetry 的 Mistral AI 可观测性与监控

本指南将带你使用 OpenTelemetry 为 Mistral 搭建可观测性与监控体系,并将 traces、logs 和 metrics 导出到 SigNoz。通过这一集成,你可以观测和追踪 Mistral 应用及 LLM 使用的各类指标。

借助遥测技术监控 AI 应用中的 Mistral,可以实现对 AI 和 LLM 工作流的全面可观测性。通过 SigNoz,你可以在统一的面板中分析关联的 traces、logs 和 metrics,配置告警,并获得可落地的洞察,持续提升可靠性、响应速度和用户体验。

前置条件

监控 Mistral AI

有关在 Python 环境中上手 Mistral 的更多信息,请参考 Mistral 快速入门指南。

No Code(推荐)Manual

推荐使用 No code 自动插桩,只需少量代码改动即可快速完成搭建。适合希望在不修改应用代码的情况下快速获得可观测性、且使用标准 instrumentor 库的场景。

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

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

第二步:添加自动插桩

Copy
opentelemetry-bootstrap --action=install

第三步:配置日志级别

为确保日志能被正确采集和导出,请将根 logger 配置为输出 DEBUG 及以上级别的日志:

Copy
import logging
 
logging.getLogger().setLevel(logging.DEBUG)
logging.getLogger("httpx").setLevel(logging.DEBUG)

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

第 4 步:创建示例 Mistral 应用

main.py
import os
from mistralai.client import Mistral
 
import logging
logging.getLogger().setLevel(logging.DEBUG)
logging.getLogger("httpx").setLevel(logging.DEBUG)
 
 
client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])
 
chat_response = client.chat.complete(
    model='mistral-small-2506',
    messages = [
        {
            "role": "user",
            "content": 'What is SigNoz?',
        },
    ]
)
 
print(chat_response.choices[0].message.content)
展开 21 行重要提示

运行这段代码之前,请确保已将生成的 Mistral API key 设置到环境变量 MISTRAL_API_KEY 中。

第 5 步:以自动埋点方式运行应用

设置以下环境变量后运行应用。这样可以将 OpenTelemetry 的 traces、logs 和 metrics 导出到 SigNoz Cloud,并启用自动日志关联:

复制
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 ingestion key
  • 将 <your_run_command> 替换为你实际运行应用的命令,本例中是:python main.py
在使用自托管 SigNoz 吗?

大部分步骤都一样。只需按照 Cloud → Self-Hosted 中的说明修改 endpoint 并去掉 ingestion key 请求头,即可适配本指南。

基于代码的手动插桩可以让你对遥测配置进行细粒度控制。当你需要自定义资源属性、采样策略,或与现有可观测性基础设施集成时,推荐使用这种方式。

Step 1: 安装额外的 OpenTelemetry 依赖

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

Step 2: 配置 Traces

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
from openinference.instrumentation.mistralai import MistralAIInstrumentor
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)
 
MistralAIInstrumentor().instrument()
  • <service_name> 是你的服务名称
  • OTEL_EXPORTER_TRACES_ENDPOINT → SigNoz Cloud 的 trace endpoint,需使用对应的 region:https://ingest.<region>.signoz.cloud:443/v1/traces
  • SIGNOZ_INGESTION_KEY → 你的 SigNoz ingestion key
在使用自托管 SigNoz 吗?

大部分步骤都一样。只需按照 Cloud → Self-Hosted 中的说明修改 endpoint 并去掉 ingestion key 请求头,即可适配本指南。

步骤 3:配置 Metrics

Copy
from opentelemetry.sdk.resources import Resource
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
import os
 
resource = Resource.create({"service.name": "<service_name>"})
metric_exporter = OTLPMetricExporter(
    endpoint= os.getenv("OTEL_EXPORTER_METRICS_ENDPOINT"),
    headers={"signoz-ingestion-key": os.getenv("SIGNOZ_INGESTION_KEY")},
)
reader = PeriodicExportingMetricReader(metric_exporter)
metric_provider = MeterProvider(metric_readers=[reader], resource=resource)
metrics.set_meter_provider(metric_provider)
 
meter = metrics.get_meter(__name__)
 
# turn on out-of-the-box metrics
SystemMetricsInstrumentor().instrument()
HTTPXClientInstrumentor().instrument()
Expand 23 lines
  • <service_name>:你的服务名称
  • OTEL_EXPORTER_METRICS_ENDPOINT → SigNoz Cloud endpoint,需使用对应 region:https://ingest.<region>.signoz.cloud:443/v1/metrics
  • SIGNOZ_INGESTION_KEY → 你的 SigNoz ingestion key
使用自托管(Self-Hosted)的 SigNoz?

大部分步骤相同,只需按 Cloud → Self-Hosted 的说明修改 endpoint,并去掉 ingestion key 请求头即可。

注意

SystemMetricsInstrumentor 提供系统指标(CPU、内存等),HTTPXClientInstrumentor 提供出站 HTTP 请求指标(如请求耗时)。若要为 Mistral 应用添加自定义指标,请参考 Python Custom Metrics。

步骤 4:配置 Logs

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 日志处理器挂载到根 logger
handler = LoggingHandler(level=logging.INFO, logger_provider=logger_provider)
logging.basicConfig(level=logging.INFO, handlers=[handler])
 
logger = logging.getLogger(__name__)
 
# 开启 httpx 日志以捕获 HTTP 请求
httpx_logger = logging.getLogger("httpx")
httpx_logger.setLevel(logging.DEBUG)
httpx_logger.addHandler(handler)
展开 29 行
  • <service_name> 是你的服务名称
  • OTEL_EXPORTER_LOGS_ENDPOINT → 填写对应 区域 的 SigNoz Cloud 端点:https://ingest.<region>.signoz.cloud:443/v1/logs
  • SIGNOZ_INGESTION_KEY → 你的 SigNoz ingestion key
使用自托管(Self-Hosted)的 SigNoz?

大部分步骤完全相同。只需参考 Cloud → Self-Hosted 文档,修改端点并移除 ingestion key 请求头即可。

步骤 5:运行一个 Mistral 示例应用

重要提示

运行此代码前,请确保已完成上述步骤(traces、logs 和 metrics 的配置)。所有 OpenTelemetry 插桩必须先完成初始化。

main.py
import os
from mistralai.client import Mistral
 
client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])
 
chat_response = client.chat.complete(
    model='mistral-small-2506',
    messages = [
        {
            "role": "user",
            "content": 'What is SigNoz?',
        },
    ]
)
 
print(chat_response.choices[0].message.content)
注意

运行这段代码之前,请确保已设置环境变

原始来源: signoz

评论 (0)