ログ管理について述べる。
ログを管理する目的
ログは開発・運用に欠かせないものであるから、適切に収集と保管を行う。
- 監視: 例)正常に動作していることを確認する
- 調査: 例)障害調査のための現状把握に使う
- 分析: 例)ユーザーの挙動から導線の有効性を確認する
- 監査: 例)記録されていることを見せて悪用をけん制する
ログの基本要件
ログは目的に応じ以下の要件を満たした状態で保存する。
- 重要度に応じて適切に分類されていること
- 検索および分析が可能な形式であること
- 個々の処理や操作を追跡可能であること
取得するログは例えば下記のようなものがあげられる。
- インフラやアプリケーションの重要な処理の結果。例)エラーやバッチの処理結果など
- ユーザーの動向記録 例)アクセスログ
- 設定変更などの重要な操作。例)管理権限を持つユーザーの追加
何を記録してはいけないか
セキュリティおよびコスト最適化の観点から、下記のようなログを記録してはならない。
- 機密情報(個人情報、パスワードやAPIキー等)
- 適切なマスキングまたは除去を行う
- 利用価値の低いログ(一時的なデバッグログなど)
- 出力しないか、あるいは受け入れ元でフィルタ/サンプリングする
いつまで保持するか
ログの保持期間は用途によって変更する。例えば下記のようにする。
- 本番環境の決済などの重要なログ -> 最低数年(関連の法令やガイドラインがあるなら必ず満たすこと)
- 本番環境のアプリケーションのエラーログ -> 最低1年
- 開発環境のログ -> 最低保持期間は定めないがおおむね数カ月
必要以上に保持しないほうがコスト最適化のためにはよいが、必要になった際に消してしまっているほうが通常は問題が大きいため、余裕をもって設定する。
保持期間を過ぎたログは、速やかに削除または適切にアーカイブする。
セキュリティ
ログの保全のため、業務に必要なものに対してのみ操作権限を与える。例えば下記のようにする。
- ログの閲覧は必要な人員のみ可能
- ログの削除は管理者のみ可能
- ログの改変は誰であれ禁止。どうしてもやむを得ない場合は、記録を残した上で特例措置として実施する(ブレイクグラス)
ログの保管場所
ログの保管はセキュリティが保て、かつ毀損しないよう十分な信頼性を持った手段で行う。例)AWS S3 ただし障害対応や監査対応に支障が出ない程度の時間で参照できること。
