OpenVPN サーバーのログはどこに書くべきか、そしてその理由
log、log-append、syslog はそれぞれ異なり、サービス管理者も独自のコピーを保ちます。信頼できる流れを一つ選び、ライフサイクルを読みやすく保ち、保持期間を定めてください。
ログ設計とは、どのプロセスが記録を生んだか、その記録がどこに着地するか、どれだけ生き残るかという三つの答えです。OpenVPN はファイルに書き込むことも、メッセージをシステムロガーに渡すことも、サービス管理者が捕捉するものに任せることもでき、それらは一つの流れの三つのコピーではありません。どの選択も、ローテーションを誰が担うか、どのユーザーが結果を読めるか、起動中に何が起きるかを変えます。後からでは設定済みのものを引き継ぐだけになるため、インシデントの前に答えを確定してください。
デーモンは指令を実際にどう扱うか
指令は抽象概念ではなく、それぞれがプロセスがメッセージをどこに書くかを決めます。log /path はそのファイルを開き、log-append /path は追記用に開き、syslog はソケット経由でローカルのシステムロガーにメッセージを渡します。どれも使わなければ、出力は標準出力に流れ、次に何が起きるかはサービス管理者が決めます。デーモンが設定を無視していると結論づける前に、有効なユニットとプロファイルを合わせて読んでください。
最後の場合はパッケージ導入ではよくあるもので、二人の管理者がログの場所について意見を異にする理由もそこにあります。一方はユニットの journal を読み、もう一方はデーモンが一度も書かなかったファイルを読んでいます。
ディスク上のファイルではなく、実行中の設定を確認してください。drop-in のユニット上書きや環境ファイルは、あなたが読んでいるプロファイルに触れずに有効な指令を変えられます。
log は切り詰め、log-append は切り詰めない
log は指令が有効になった時点で既存のファイルを切り詰めるため、再起動するとそれ以前の証拠は消えます。log-append はあるものを残して追記します。どちらの選択肢もローテーションを行わず、後から自分でファイルを開き直すこともないので、ローテーションには協力が必要です。
ローテーションがファイルを改名してもデーモンが古いディスクリプタに書き続けると、新しいファイルは空のままになり、改名されたファイルでディスク使用量が増え続けます。プロセスに再オープンをシグナルで伝えるか、コピーして切り詰める方式でローテーションし、そのコピー時間帯を受け入れてください。
ディレクトリ、所有権、パーミッションは設計の一部です。デーモンは起動後に非特権ユーザーで動くことがありますし、インストール時に root が作ったディレクトリはその時点で書き込み可能とは限りません。インシデントの最中にパーミッションを直すのではなく、パッケージやデプロイの工程で用意してください。
サービス管理者は二つ目のコピーを保持する
systemd は標準出力と標準エラーを既定で捕捉するため、明示的なリダイレクトのないユニットにもすでにログがあります。ファイル指令を加えると、保持期間も読み手もタイムスタンプも異なる二つの流れができます。
それが自動的に誤りというわけではありませんが、決定である必要があります。設定されたファイルが存在する前の失敗は他にどこにも現れないため、起動時の記録は journal に残してください。次に、定常状態のイベントについてはファイルを正とし、それをランブックに明記します。二つの正となる流れは、あらゆる問いに二つの答えがあることを意味します。
わざと失敗するテストで選択を確認してください。読めない証明書でデーモンを起動し、どちらの流れがエラーを記録するかを見ます。
冗長さは使える詳細とは違う
verb レベルを上げると行が増え、ある点を超えると誰も読まない行が増えます。レベル 3 は多くの導入にとって妥当な定常状態で、レベル 4 以上は既知の問いを持つ限定的な調査に向きます。繰り返しの抑制はノイズを減らしますが、事象がどれだけ頻繁に再発するかを隠してはなりません。維持できるレベルを設定し、終わりのある名前付きの調査のときだけ上げてください。
記録にはインスタンスの識別子とタイムスタンプを残してください。ファイルに何か月も追記が続き、インスタンス名が欠けていると、再接続は初回接続とまったく同じに見えます。
そのファイルに他に何が落ちるかにも注意してください。リダイレクトされた出力には呼び出されたスクリプトのテキストが含まれることがあり、自分の環境をそのまま出力する補助プログラムは認証情報や鍵のパスを読めるログに残します。デーモン自身が機密を何も出力しない場合でも、ログへのアクセスをセキュリティ上の決定として扱ってください。
ローテーション、保持、そして再読み込みするシグナル
保持期間はディスクを所有する人と決め、ボリュームがあなたの代わりに決める前に設定してください。再読み込みのシグナルはログ保守のコマンドではなく、間違ったものを送るとトンネルが再起動し、すべてのユーザーが切断されます。再オープンの手順をローテーションの規則のそばに書き、両者がずれないようにしてください。
結果は、正となる流れが一つあり、各イベントがライフサイクルのどこかに位置づけられ、ホスト上の秘密を含むファイルをすべて集めなくても記録が得られる、運用担当者が説明できるサービスであるべきです。この説明が設計の受け入れテストであり、次のインシデントの前に確認するのは安上がりです。