なぜオブザーバビリティが重要なのか
現代のシステムはマイクロサービス・クラウド・コンテナと複雑化し、「どこで何が起きているか」を把握することが難しくなっています。オブザーバビリティ(可観測性)は、システムの内部状態を外部出力から推測できる能力です。
オブザーバビリティの3本柱
1. ログ(Logs):何が起きたか
import structlog
log = structlog.get_logger()
log.info("order.created",
order_id="ord-123",
user_id="user-456",
amount=9800,
items=3)
構造化ログ(JSON形式)が検索・集計に有利です。
2. メトリクス(Metrics):どのくらい起きているか
from prometheus_client import Counter, Histogram, start_http_server
REQUEST_COUNT = Counter('http_requests_total',
'Total HTTP requests', ['method', 'status'])
REQUEST_LATENCY = Histogram('http_request_duration_seconds',
'HTTP request latency')
@REQUEST_LATENCY.time()
def handle_request():
REQUEST_COUNT.labels(method='GET', status='200').inc()
3. 分散トレース(Traces):どこを通ったか
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
provider = TracerProvider()
trace.set_tracer_provider(provider)
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("order-processing") as span:
span.set_attribute("order.id", "ord-123")
with tracer.start_as_current_span("db-query"):
result = db.execute("SELECT ...")
ツールスタック
| 用途 | OSS | マネージド |
|---|---|---|
| ログ | ELK Stack | Datadog Logs |
| メトリクス | Prometheus + Grafana | CloudWatch |
| トレース | Jaeger / Zipkin | AWS X-Ray |
| 統合 | OpenTelemetry | Datadog / New Relic |
SLO・SLI・SLAの関係
| 用語 | 意味 | 例 |
|---|---|---|
| SLI | 測定指標 | APIの99パーセンタイル遅延 |
| SLO | 目標値 | p99 < 500ms |
| SLA | 顧客との約束 | 99.9%の可用性を保証 |
エラーバジェット(許容できる障害量)でSLOとの乖離を管理し、信頼性と開発速度のバランスを取ります。
オブザーバビリティはシステムの「健康診断」です。本番障害の根本原因調査時間を劇的に短縮できます。





