ロギング
アプリケーションの動作を記録し、デバッグ・監視・監査に活用する仕組み
オブザーバビリティ運用
ロギングとは
ロギングは、アプリケーションの動作をログとして記録し、デバッグ、監視、監査に活用する仕組みである。オブザーバビリティの 3 本柱 (メトリクス、ログ、トレース) の 1 つ。
ログレベル
| レベル | 用途 | 例 |
|---|---|---|
| ERROR | エラー、障害 | DB 接続失敗、未処理例外 |
| WARN | 警告、潜在的問題 | リトライ発生、非推奨 API |
| INFO | 正常な動作の記録 | リクエスト処理完了 |
| DEBUG | デバッグ情報 | 変数の値、処理の詳細 |
構造化ログ
// ❌ 非構造化ログ (検索・分析が困難)
console.log('Order processed: ' + orderId + ' in ' + duration + 'ms');
// ✅ 構造化ログ (JSON)
console.log(JSON.stringify({
level: 'info',
message: 'Order processed',
orderId,
duration,
timestamp: new Date().toISOString(),
}));
CloudWatch Logs Insights
-- エラーログを検索
fields @timestamp, @message
| filter level = 'error'
| sort @timestamp desc
| limit 20
-- レイテンシの P99 を計算
filter level = 'info'
| stats percentile(duration, 99) as p99 by bin(1h)
ログの設計指針
ログは JSON 形式で構造化し、リクエストを追跡するための相関 ID を付与する。パスワードやトークンなどの機密情報はログに含めない。ERROR レベルを乱用せず適切なレベルを選択し、「何が起きたか」だけでなく「なぜ起きたか」のコンテキストも記録する。
環境ごとのログレベル
Mappings:
EnvConfig:
dev:
LogLevel: DEBUG
stg:
LogLevel: INFO
prod:
LogLevel: WARN
ログの保持期間
| 環境 | 保持期間 |
|---|---|
| dev | 7 日 |
| stg | 30 日 |
| prod | 90〜365 日 |
CloudWatch Logs の保持期間を設定し、コストを管理する。
実務での活用方法は関連書籍にも詳しい。