Amazon Bedrock Monitoring and Observability with OpenTelemetry Amazon Bedrock users can now monitor model performance, latency, error rates, and usage trends by integrating OpenTelemetry with SigNoz. The open-source observability framework exports logs, traces, and metrics from Bedrock applications to SigNoz dashboards, enabling real-time debugging and optimization of AI workflows. This integration provides unified visibility into request/response details and system-level metrics without requiring direct model deployment management. Overview This guide walks you through setting up monitoring and observability for Amazon Bedrock using OpenTelemetry https://opentelemetry.io/ and exporting logs, traces, and metrics to SigNoz. With this integration, you can observe model performance, capture request/response details, and track system-level metrics in SigNoz, giving you real-time visibility into latency, error rates, and usage trends for your Bedrock applications. Many developers choose Amazon Bedrock over directly calling LLM models for its enterprise-grade features including unified API access to multiple foundation models Claude, Llama, Titan, etc. , built-in safeguards for responsible AI, private and secure model invocations that don't leave AWS infrastructure, managed infrastructure that eliminates the need to manage model hosting, fine-tuning capabilities with your own data while maintaining privacy, and seamless integration with AWS services like S3, Lambda, and CloudWatch. These capabilities make Amazon Bedrock particularly valuable for organizations requiring production-grade reliability, compliance, and simplified model management without the complexity of direct model deployment. Instrumenting Amazon Bedrock in your LLM applications with telemetry ensures full observability across your AI workflows, making it easier to debug issues, optimize performance, and understand user interactions. By leveraging SigNoz, you can analyze correlated traces, logs, and metrics in unified dashboards, configure alerts, and gain actionable insights to continuously improve reliability, responsiveness, and user experience. Prerequisites - SigNoz setup choose one : SigNoz Cloud account https://signoz.io/teams/ with an active ingestion key- Self-hosted SigNoz instance - Internet access to send telemetry data to SigNoz Cloud - An AWS account with Amazon Bedrock https://aws.amazon.com/bedrock/ working and access granted for LLM models - For Python: pip installed for managing Python packages and optional but recommended a Python virtual environment to isolate dependencies Monitoring Amazon Bedrock No-code auto-instrumentation is recommended for quick setup with minimal code changes. It's ideal when you want to get observability up and running without modifying your application code and are leveraging standard instrumentor libraries. Step 1: Install the necessary packages in your Python environment. pip install \ opentelemetry-distro \ opentelemetry-exporter-otlp \ opentelemetry-instrumentation-httpx \ opentelemetry-instrumentation-system-metrics \ openinference-instrumentation-bedrock \ boto3 Step 2: Add Automatic Instrumentation opentelemetry-bootstrap --action=install Step 3: Configure logging level To ensure logs are properly captured and exported, configure the root logger to emit logs at the INFO level or higher: python import logging logging.getLogger .setLevel logging.INFO This sets the minimum log level for the root logger to INFO, which ensures that logger.info calls and higher severity logs WARNING, ERROR, CRITICAL are captured by the OpenTelemetry logging auto-instrumentation and sent to SigNoz. Step 4: Run an example python import boto3 import os import logging logging.getLogger .setLevel logging.INFO logger = logging.getLogger name bedrock = boto3.client service name="bedrock-runtime", aws access key id=os.getenv "AWS ACCESS" , aws secret access key=os.getenv "AWS SECRET" , region name="us-east-1" or your region model id = "us.anthropic.claude-sonnet-4-5-20250929-v1:0" prompt = "What is SigNoz?" logger.info f"Sending prompt to model {model id}: {prompt}" sample log body = { "anthropic version": "bedrock-2023-05-31", "messages": { "role": "user", "content": {"type": "text", "text": prompt} } , "max tokens": 512, "temperature": 0.7 } response = bedrock.invoke model modelId=model id, body=json.dumps body response body = json.loads response 'body' .read output text = response body 'content' 0 'text' print "Model output:\n", output text πŸ“Œ Note: No logs are automatically emitted by the BedrockInstrumentor. If you would like logs, you need to emit them manually via logger.info or other logging methods. Step 5: Run your application with auto-instrumentation OTEL RESOURCE ATTRIBUTES="service.name=