Module 7: Production Patterns
Monitoring & Logging
Structured Logging
import logging
import json
from datetime import datetime
# Setup
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
def log_embedding_call(text, model, latency_ms, cached=False, cost=0):
"""Log structured metrics"""
logger.info(json.dumps({
'event': 'embedding_generated',
'timestamp': datetime.now().isoformat(),
'model': model,
'text_length': len(text),
'latency_ms': latency_ms,
'cached': cached,
'cost_usd': cost
}))
Prometheus Metrics
from prometheus_client import Counter, Histogram, Gauge
# Metrics
embedding_requests = Counter('embedding_requests_total', 'Total requests')
embedding_latency = Histogram('embedding_latency_seconds', 'Latency')
cache_hits = Counter('cache_hits_total', 'Cache hits')
daily_cost = Gauge('embedding_cost_daily_usd', 'Daily cost')
# Instrument
@embedding_latency.time()
def get_embedding(text):
embedding_requests.inc()
# Check the cache
cached = cache.get(text)
if cached:
cache_hits.inc()
return cached
# API call
embedding = call_api(text)
cache.set(text, embedding)
# Track the cost
cost = calculate_cost(text)
daily_cost.inc(cost)
return embedding
CloudWatch/Datadog
import boto3
cloudwatch = boto3.client('cloudwatch')
def publish_metric(metric_name, value, unit='Count'):
"""Publish to CloudWatch"""
cloudwatch.put_metric_data(
Namespace='Embeddings',
MetricData=[{
'MetricName': metric_name,
'Value': value,
'Unit': unit,
'Timestamp': datetime.now()
}]
)
# Usage
publish_metric('CacheHitRate', 0.85, 'Percent')
publish_metric('DailyCost', 15.50, 'None')
Alerting
def check_and_alert():
"""Alert if metrics exceed a threshold"""
metrics = get_current_metrics()
# Alert if error rate > 5%
if metrics['error_rate'] > 0.05:
send_alert("High error rate", metrics['error_rate'])
# Alert if daily cost > budget
if metrics['daily_cost'] > 100:
send_alert("Budget exceeded", metrics['daily_cost'])
# Alert if p95 latency > 200ms
if metrics['p95_latency'] > 200:
send_alert("High latency", metrics['p95_latency'])
Summary
- ✅ Structured logging: JSON logs
- ✅ Prometheus: Time-series metrics
- ✅ CloudWatch: AWS monitoring
- ✅ Alerting: Automatic notifications
- ✅ Key metrics: Latency, error rate, cost
Module 7 - Capsule 04