Introducción

Desde que Amazon Bedrock incorporó soporte nativo para modelos de Anthropic (Claude) y las APIs de OpenAI (Responses y Chat Completions) a través del endpoint bedrock-mantle, los equipos de DevOps y SRE ganaron flexibilidad para migrar aplicaciones existentes sin reescribir código. Sin embargo, hasta ahora el monitoreo de este endpoint era limitado: solo se podían consultar logs básicos en CloudTrail o métricas agregadas en CloudWatch sin granularidad por modelo, proyecto o cuenta.

Esta brecha operativa generaba dolores concretos:

  • Falta de atribución de costos: Los equipos no podían distinguir si el gasto en tokens de entrada/salida correspondía a un proyecto específico o a un modelo en particular.
  • Dificultad para debugging: Cuando ocurrían errores de cliente (4xx), no había forma de filtrar por endpoint o modelo sin parsear logs manualmente.
  • Planificación de capacidad opaca: Las métricas agregadas de bedrock-runtime no reflejaban el tráfico real del endpoint bedrock-mantle, lo que impedía ajustar cuotas o escalar proactivamente.

AWS resolvió esto en junio de 2026 al publicar métricas de CloudWatch específicas para bedrock-mantle, integrándolas al namespace AWS/BedrockMantle con granularidad hasta por proyecto-modelo.

Qué ocurrió

El 10 de junio de 2026, AWS anunció soporte para métricas de CloudWatch en el endpoint bedrock-mantle de Amazon Bedrock. Estas métricas son compatibles con las APIs:

  • OpenAI Responses API (versión 1.0+ según OpenAPI Spec)
  • OpenAI Chat Completions API (versión 1.0+)
  • Anthropic Messages API (versión 2023-06-01+ según Anthropic API Reference)

A diferencia de las métricas genéricas de bedrock-runtime (que solo agrupan por cuenta o región), las nuevas métricas se publican bajo el namespace AWS/BedrockMantle con cuatro niveles de granularidad:

  1. Account: Total por cuenta AWS.
  2. Project: Agrupada por el project ID definido en el contexto de la llamada (requiere etiquetado previo con aws:bedrock:project-id).
  3. Model: Por ID de modelo (ej: anthropic.claude-3-sonnet-20240229-v1:0).
  4. Project-and-Model: Combinación exacta de proyecto y modelo.

Datos técnicos clave

  • Frecuencia de publicación: Las métricas se actualizan cada 60 segundos.
  • Retención: 15 meses en CloudWatch (por defecto).
  • Regiones disponibles: Se habilitaron en 16 regiones (ver lista al final de esta sección).

Para validar la disponibilidad en tu región, ejecuta:

aws cloudwatch list-metrics --namespace AWS/BedrockMantle --query 'Metrics[].Namespace' --region us-east-1

Si devuelve ["AWS/BedrockMantle"], la región está soportada.

Impacto para DevOps / Infraestructura / Cloud / Seguridad

Para equipos de DevOps y SRE

Ahora pueden:

  1. Monitorear producción en tiempo real:
– Las métricas incluyen:

InferenceCount: Número de inferencias procesadas.

InputTokenCount: Tokens de entrada totales.

OutputTokenCount: Tokens de salida totales.

ClientErrorCount: Errores 4xx por cliente (ej: invalid_request_error).

Ejemplo de uso: Crear un dashboard en CloudWatch con:

     # Ejemplo de widget en Terraform para CloudWatch
     resource "aws_cloudwatch_dashboard" "bedrock_mantle" {
       dashboard_name = "bedrock-mantle-monitoring"
       dashboard_body = jsonencode({
         widgets = [
           {
             type   = "metric"
             x      = 0
             y      = 0
             width  = 12
             height = 6
             properties = {
               metrics = [
                 ["AWS/BedrockMantle", "InferenceCount", "Project", "mi-proyecto", "Model", "anthropic.claude-3-haiku-20240307-v1:0", { "stat": "Sum" }],
                 ["...", "InputTokenCount", "...", "...", "...", { "stat": "Sum" }],
                 ["...", "OutputTokenCount", "...", "...", "...", { "stat": "Sum" }]
               ]
               period = 300
               stat   = "Sum"
               region = "us-east-1"
             }
           }
         ]
       })
     }
     
  1. Automatizar alarmas:
– Configurar alarmas para detectar picos en ClientErrorCount (ej: umbral de 10 errores/minuto en un modelo específico).

Comando para crear una alarma con AWS CLI:

     aws cloudwatch put-metric-alarm \
       --alarm-name "BedrockMantle-HighClientErrors" \
       --alarm-description "Alarma para errores 4xx en bedrock-mantle" \
       --namespace AWS/BedrockMantle \
       --metric-name ClientErrorCount \
       --dimensions Name=Project,Value=mi-proyecto Name=Model,Value=anthropic.claude-3-haiku-20240307-v1:0 \
       --statistic Sum \
       --period 60 \
       --threshold 10 \
       --comparison-operator GreaterThanThreshold \
       --evaluation-periods 1 \
       --alarm-actions arn:aws:sns:us-east-1:123456789012:mi-topic-alertas \
       --region us-east-1
     

Para equipos de FinOps y Costos

La granularidad por proyecto y modelo permite:

  • Atribuir costos con precisión: Si un proyecto usa claude-3-haiku para soporte al cliente y otro usa gpt-4-turbo para desarrollo, ahora se pueden separar los costos de tokens de salida (ej: $0.0015/1K tokens para Claude vs. $0.01/1K para GPT-4).
  • Optimizar presupuestos: Identificar modelos con alta relación OutputTokenCount/InputTokenCount (ej: un modelo que genera respuestas 5x más largas que el input).

Para equipos de Seguridad

Las métricas añaden visibilidad sobre:

  • Intentos de abuso: Un aumento repentino en ClientErrorCount podría indicar:
– Tokens inválidos (ej: invalid_api_key).

– Ataques de fuerza bruta en endpoints expuestos.

  • Fugas de datos: Si InputTokenCount supera el promedio histórico en un proyecto, podría alertar sobre un aumento en el procesamiento de datos sensibles.

Detalles técnicos

Componentes afectados

ComponenteVersión mínima requeridaNotas
**Amazon Bedrock Runtime**2023-09-30+Endpoint *bedrock-mantle* disponible desde esta versión.
**AWS CLI**2.15.0+Necesario para consultar métricas con BLOCK31.
**SDKs AWS**Boto3 1.34.0+, AWS SDK for JavaScript 3.400.0+Para integrar métricas en código personalizado.
**Terraform AWS Provider**5.60.0+Soporte nativo en recursos BLOCK32.
### Vectores de integración

AWS publicita las métricas bajo el namespace AWS/BedrockMantle con las siguientes dimensiones (par clave-valor):

DimensiónDescripciónEjemplo de valor
BLOCK34Identificador del proyecto asociado a la inferencia.BLOCK35
BLOCK36ID del modelo usado en la inferencia.BLOCK37
BLOCK38Siempre BLOCK39.BLOCK40
BLOCK41Región AWS donde se procesó la inferencia.BLOCK42
### Comandos para validar la configuración
  1. Listar métricas disponibles:
   aws cloudwatch list-metrics \
     --namespace AWS/BedrockMantle \
     --query 'Metrics[?contains(Dimensions[].Name, `Project`)].[MetricName, Dimensions[?Name==`Project`].Value]' \
     --output text
   

Salida esperada:

   InferenceCount    my-proyecto
   InputTokenCount   my-proyecto
   OutputTokenCount  my-proyecto
   ClientErrorCount  my-proyecto
   
  1. Obtener estadísticas históricas:
   aws cloudwatch get-metric-statistics \
     --namespace AWS/BedrockMantle \
     --metric-name OutputTokenCount \
     --dimensions Name=Project,Value=mi-proyecto Name=Model,Value=anthropic.claude-3-haiku-20240307-v1:0 \
     --start-time 2026-06-15T00:00:00Z \
     --end-time 2026-06-16T00:00:00Z \
     --period 3600 \
     --statistics Sum \
     --region us-east-1
   

Limitaciones conocidas

  • No incluye métricas de latencia: Solo se publican conteos y tokens, no tiempos de respuesta. Para latencia, sigue siendo necesario usar CloudWatch Logs Insights con logs de aplicación.
  • Dependencia de etiquetado: La dimensión Project requiere que las aplicaciones envíen el header x-bedrock-project-id en cada request. Si no se envía, la métrica se atribuirá a Project=Unassigned.
  • Retraso en métricas: Hasta 5 minutos de delay entre la inferencia y la publicación en CloudWatch.

Qué deberían hacer los administradores y equipos técnicos

Paso 1: Validar regiones y endpoints activos

  1. Verificar que tu región esté soportada:
   aws ec2 describe-regions --query "Regions[?starts_with(RegionName, 'ap-') || starts_with(RegionName, 'eu-') || starts_with(RegionName, 'us-') || starts_with(RegionName, 'sa-')].RegionName" --output text
   

Salida esperada (ejemplo parcial):

   ap-jakarta ap-mumbai ap-sydney ap-tokyo
   eu-central-1 eu-west-1 eu-west-2 eu-west-3
   sa-east-1 us-east-1 us-east-2 us-west-1 us-west-2
   
  1. Confirmar que el endpoint bedrock-mantle esté habilitado:
   aws bedrock list-foundation-models --query "modelSummaries[?contains(supportedInferenceTypes, 'BEDROCK_MANTLE_API')].modelArn" --output text
   

Si devuelve ARN(s), el endpoint está disponible.

Paso 2: Configurar proyectos y modelos

  1. Etiquetar proyectos en tu aplicación:
– Usa el header x-bedrock-project-id en cada request. Ejemplo en Python:
     import boto3

     bedrock = boto3.client('bedrock-runtime', region_name='us-east-1')

     response = bedrock.invoke_model(
         modelId='anthropic.claude-3-haiku-20240307-v1:0',
         body='{"prompt": "Hola, cómo estás?"}',
         headers={
             'x-bedrock-project-id': 'soporte-cliente-2024',
             'anthropic-version': '2023-06-01'
         }
     )
     
  1. Crear dashboards personalizados:
– Usa la consola de CloudWatch o Terraform para agrupar métricas por equipo. Ejemplo de dashboard en JSON para importar:
     {
       "widgets": [
         {
           "type": "metric",
           "x": 0,
           "y": 0,
           "width": 24,
           "height": 6,
           "properties": {
             "metrics": [
               ["AWS/BedrockMantle", "InferenceCount", "Project", "soporte-cliente-2024"],
               [".", "InputTokenCount", ".", "."],
               [".", "OutputTokenCount", ".", "."]
             ],
             "period": 300,
             "stat": "Sum",
             "region": "us-east-1",
             "title": "Tráfico por proyecto - soporte-cliente-2024"
           }
         }
       ]
     }
     

Paso 3: Configurar alarmas proactivas

  1. Alarma para errores 4xx:
   aws cloudwatch put-metric-alarm \
     --alarm-name "BedrockMantle-ClientErrors-High" \
     --namespace AWS/BedrockMantle \
     --metric-name ClientErrorCount \
     --dimensions Name=Project,Value=mi-proyecto \
     --statistic Sum \
     --period 300 \
     --threshold 5 \
     --comparison-operator GreaterThanThreshold \
     --evaluation-periods 3 \
     --alarm-actions arn:aws:sns:us-east-1:123456789012:mi-topic-alertas \
     --region us-east-1
   
  1. Alarma para uso excesivo de tokens:
   aws cloudwatch put-metric-alarm \
     --alarm-name "BedrockMantle-Tokens-Expensive" \
     --namespace AWS/BedrockMantle \
     --metric-name OutputTokenCount \
     --dimensions Name=Project,Value=desarrollo Name=Model,Value=openai.gpt-4-turbo-2024-04-09 \
     --statistic Average \
     --period 3600 \
     --threshold 10000 \
     --comparison-operator GreaterThanThreshold \
     --evaluation-periods 1 \
     --alarm-actions arn:aws:sns:us-east-1:123456789012:mi-topic-presupuestos \
     --region us-east-1
   

Paso 4: Integrar con herramientas externas

  • Datadog/New Relic: Usa el CloudWatch Metrics Forwarder para enviar métricas a tu observabilidad.
  • Grafana: Conecta el datasource CloudWatch y filtra por namespace: AWS/BedrockMantle.
  • Terraform: Actualiza tu módulo de monitoreo para incluir recursos como:
  resource "aws_cloudwatch_metric_alarm" "bedrock_mantle_alert" {
    alarm_name          = "bedrock-mantle-high-error-rate"
    comparison_operator = "GreaterThanThreshold"
    evaluation_periods  = "2"
    metric_name         = "ClientErrorCount"
    namespace           = "AWS/BedrockMantle"
    period              = "60"
    statistic           = "Sum"
    threshold           = "10"
    alarm_description   = "Alarma para errores en bedrock-mantle"
    alarm_actions       = [aws_sns_topic.alertas.arn]
    dimensions = {
      Project = "mi-proyecto"
      Model   = "anthropic.claude-3-haiku-20240307-v1:0"
    }
  }
  

Conclusión

La incorporación de métricas de CloudWatch para el endpoint bedrock-mantle cierra una brecha crítica en la operativa de Amazon Bedrock: la falta de visibilidad granular por proyecto y modelo. Ahora los equipos pueden:

  1. Monitorear producción con granularidad de 60 segundos.
  2. Atribuir costos con precisión usando dimensiones Project y Model.
  3. Automatizar respuestas a errores de cliente y picos de tráfico.

El cambio es retrocompatible: no requiere cambios en el código de las aplicaciones existentes, pero exige que los equipos adopten el header x-bedrock-project-id para aprovechar la granularidad completa. Para equipos que ya usan bedrock-runtime, la integración es directa: las métricas se publican en el mismo namespace (AWS/BedrockMantle) y se consultan con los mismos comandos de AWS CLI.

Recomendación final:
  • Esta semana: Validar regiones soportadas y habilitar el header x-bedrock-project-id en todas las aplicaciones.
  • Próxima sprint: Configurar dashboards y alarmas en CloudWatch.
  • En 30 días: Revisar métricas históricas para ajustar umbrales de alarmas y optimizar costos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *