基于 OpenTelemetry 的 Mistral AI 可观测性与监控
本指南将带你使用 OpenTelemetry 为 Mistral 搭建可观测性与监控体系,并将 traces、logs 和 metrics 导出到 SigNoz。通过这一集成,你可以观测和追踪 Mistral 应用及 LLM 使用的各类指标。
借助遥测技术监控 AI 应用中的 Mistral,可以实现对 AI 和 LLM 工作流的全面可观测性。通过 SigNoz,你可以在统一的面板中分析关联的 traces、logs 和 metrics,配置告警,并获得可落地的洞察,持续提升可靠性、响应速度和用户体验。
前置条件
- 一个持有有效 ingestion key 的 SigNoz Cloud 账号,或自托管的 SigNoz 实例
- Python 环境:安装
pip用于管理 Python 包 - Mistral 账号和 API key。API key 可在 Mistral 平台获取
监控 Mistral AI
有关在 Python 环境中上手 Mistral 的更多信息,请参考 Mistral 快速入门指南。
No Code(推荐)Manual推荐使用 No code 自动插桩,只需少量代码改动即可快速完成搭建。适合希望在不修改应用代码的情况下快速获得可观测性、且使用标准 instrumentor 库的场景。
第一步:在 Python 环境中安装必要的包。
Copypip install \
opentelemetry-distro \
opentelemetry-exporter-otlp \
httpx \
opentelemetry-instrumentation-httpx \
opentelemetry-instrumentation-system-metrics \
mistralai \
openinference-instrumentation-mistralai第二步:添加自动插桩
Copyopentelemetry-bootstrap --action=install第三步:配置日志级别
为确保日志能被正确采集和导出,请将根 logger 配置为输出 DEBUG 及以上级别的日志:
Copyimport 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.pyimport 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
大部分步骤都一样。只需按照 Cloud → Self-Hosted 中的说明修改 endpoint 并去掉 ingestion key 请求头,即可适配本指南。
基于代码的手动插桩可以让你对遥测配置进行细粒度控制。当你需要自定义资源属性、采样策略,或与现有可观测性基础设施集成时,推荐使用这种方式。
Step 1: 安装额外的 OpenTelemetry 依赖
Copypip install \
opentelemetry-api \
opentelemetry-sdk \
opentelemetry-exporter-otlp \
opentelemetry-instrumentation-httpx \
opentelemetry-instrumentation-system-metrics \
mistralai \
openinference-instrumentation-mistralaiStep 2: 配置 Traces
Copyfrom 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/tracesSIGNOZ_INGESTION_KEY→ 你的 SigNoz ingestion key
大部分步骤都一样。只需按照 Cloud → Self-Hosted 中的说明修改 endpoint 并去掉 ingestion key 请求头,即可适配本指南。
步骤 3:配置 Metrics
Copyfrom 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/metricsSIGNOZ_INGESTION_KEY→ 你的 SigNoz ingestion key
大部分步骤相同,只需按 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/logsSIGNOZ_INGESTION_KEY→ 你的 SigNoz ingestion key
大部分步骤完全相同。只需参考 Cloud → Self-Hosted 文档,修改端点并移除 ingestion key 请求头即可。
步骤 5:运行一个 Mistral 示例应用
重要提示运行此代码前,请确保已完成上述步骤(traces、logs 和 metrics 的配置)。所有 OpenTelemetry 插桩必须先完成初始化。
main.pyimport 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)注意运行这段代码之前,请确保已设置环境变
