インフラ・運用 / 約20分
ログ設計: 未来の自分を助ける記録
なぜこれを学ぶか
障害の深夜、あなたの頼みはログだけです。「あの時どうなっていたか」を再現できるログ設計を学びます。
良いログの条件: 構造化(JSON形式)、追跡可能(リクエストID等の相関ID)、適切なレベル(ERROR/WARN/INFO/DEBUG)の3点です。
ログに書くべきでないもの: パスワード、トークン、個人情報。ログは多くの人がアクセスできる場所に保管されます。マスキングは必須です。
「エラーが起きた」だけのログは役に立ちません。何をしようとして(操作)、何が入力で(パラメータ)、何が起きた(エラー)の3点セットで記録します。
メトリクス(数値の集計)はアラートに、ログは詳細調査に、トレースは分散システムの流れの追跡に使います。役割の違いを理解しましょう。
重要ポイント
- 構造化ログ + 相関ID + 適切なログレベル
- 機密情報はログに書かない
- 操作・入力・結果の3点セットで記録
コードレビュー演習
AIに「決済処理にログを追加して」と頼んだ結果です。
app.post('/api/payment', async (c) => {
const { userId, amount, cardToken } = await c.req.json()
console.log('payment start', userId, amount, cardToken)
try {
const result = await charge(userId, amount, cardToken)
console.log('ok')
return c.json(result)
} catch (e) {
console.log('error happened')
return c.json({ error: 'failed' }, 500)
}
})このログ実装の問題として、最も重大なものは?
ヒントを見る
2つの観点で見てみましょう: ①ログに「書いてはいけないもの」が書かれていないか(決済情報・秘密情報)②障害調査に「必要な情報」が足りているか(エラーの内容)。
コーディング演習実際に書く
ログのマスキング関数を実装してください。オブジェクトを受け取り、password / token / cardToken / secret というキーの値を '***' に置き換えた「新しいオブジェクト」を返してください。それ以外のキーはそのままコピーし、元のオブジェクトは変更しないでください。
function maskSecrets(logData)
スキルセルフチェック
このレッスンの内容をどの程度理解できましたか?