Skip to content

本番チェックリスト

リリース前に以下のセキュリティ設定を項目ごとにチェックし、ログシステムの安全性と信頼性を確保してください。

基本設定

  • [ ] ログレベル -- 本番環境では LevelInfo 以上に設定
  • [ ] 出力フォーマット -- FormatJSON を使用してログ収集と分析を容易に
  • [ ] ファイルローテーション -- 適切なサイズ制限と保持ポリシーを設定
  • [ ] バッファフラッシュ -- プログラム終了前に Flush() または Close() を確実に呼び出し
go
logger, _ := dd.New(dd.Config{
    Level:  dd.LevelInfo,
    Format: dd.FormatJSON,
})
defer logger.Close()

セキュリティフィルタリング

  • [ ] 機密データフィルタリングを有効化 -- DefaultSecurityConfig() 以上を使用
  • [ ] カスタムパターン -- 業務に応じた特定の機密フィールドパターンを追加
  • [ ] フィルタリング統計のモニタリング -- 定期的にフィルタリング統計をチェックし、異常を発見
go
logger.SetSecurityConfig(dd.DefaultSecurityConfig())

ファイルセキュリティ

  • [ ] ログ権限 -- ファイル権限 0600、ディレクトリ権限 0700(ライブラリデフォルト;ディレクトリには実行ビットが必要でないと入れない)
  • [ ] パス検証 -- ログパスがユーザー入力で制御されないことを確認
  • [ ] シンボリックリンク -- 本番環境でシンボリックリンクを禁止
  • [ ] ディスク容量 -- ローテーションポリシーでディスク満杯を防止

監査と整合性

  • [ ] 監査ログ -- セキュリティイベント記録のために監査ログを有効化
  • [ ] 整合性署名 -- HMAC 署名を有効にし、ログの改ざんを防止
  • [ ] 監査ログの独立保存 -- 監査ログと業務ログを別々に保存
go
audit, _ := dd.NewAuditLogger(dd.DefaultAuditConfig())
defer audit.Close()

cfg, _ := dd.DefaultIntegrityConfigSafe()
signer, _ := dd.NewIntegritySigner(cfg)

パフォーマンス

  • [ ] サンプリング戦略 -- 高スループット環境でのログサンプリングの有効化を検討
  • [ ] バッファ書き込み -- BufferedWriter で I/O 回数を削減
  • [ ] 同期書き込みの認識 -- デフォルトの書き込みパスは同期;高スループットシナリオでは BufferedWriter でシステムコールを削減
  • [ ] メモリモニタリング -- ログ関連のメモリ使用量を監視

ライフサイクル

  • [ ] グレースフルシャットダウン -- Close() ではなく Shutdown(ctx) を使用(注意:Shutdown は内部でフィルター goroutine を待機しませんが、CloseWaitForFilterGoroutines を呼び出します。切り替え前に logger.WaitForFilterGoroutines(...) を明示的に呼び出し、writer クローズ後にフィルター goroutine がアクセスすることによる競合を回避してください)
  • [ ] タイムアウト設定 -- 適切なシャットダウンタイムアウトを設定(推奨 5-10 秒)
  • [ ] グローバルロガー -- 繰り返し作成するのではなく SetDefault() で置き換え
go
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
logger.Shutdown(ctx)

コンプライアンスチェック

  • [ ] HIPAA -- 医療業界では HealthcareConfig() を使用
  • [ ] PCI-DSS -- 金融業界では FinancialConfig() を使用
  • [ ] GDPR -- 個人識別情報(PII)を記録しないことを確認
  • [ ] データ保持 -- 規制に準拠したログ保持期間を設定

モニタリングとアラート

  • [ ] 書き込みエラー -- SetWriteErrorHandler で書き込み失敗をモニタリング
  • [ ] フィルター goroutine -- ActiveFilterGoroutines() の数を監視
  • [ ] 監査統計 -- 定期的に監査イベント統計をチェック
  • [ ] エラーコードアラート -- PATH_TRAVERSALREDOS_PATTERN などのセキュリティエラーコードにアラートを設定
go
logger.SetWriteErrorHandler(func(w io.Writer, err error) {
    metrics.WriteErrors.Inc()
    alert("ログ書き込み失敗:" + err.Error())
})

次のステップ