本番チェックリスト
リリース前に以下のセキュリティ設定を項目ごとにチェックし、ログシステムの安全性と信頼性を確保してください。
基本設定
- [ ] ログレベル -- 本番環境では
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 を待機しませんが、CloseはWaitForFilterGoroutinesを呼び出します。切り替え前に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_TRAVERSAL、REDOS_PATTERNなどのセキュリティエラーコードにアラートを設定
go
logger.SetWriteErrorHandler(func(w io.Writer, err error) {
metrics.WriteErrors.Inc()
alert("ログ書き込み失敗:" + err.Error())
})次のステップ
- セキュリティ概要 -- セキュリティ機能総覧
- セキュリティフィルタ API -- 設定リファレンス
- パフォーマンス最適化 -- パフォーマンスチューニング