Squid のアクセスログが何年もずれて見えるとき
何かを変更する前に、ネイティブの epoch タイムスタンプ、タイムゾーン変換、プロキシホストの実際の壁時計を切り分けます。
Squid のネイティブなアクセス形式は epoch タイムスタンプで始まり、通常は %ts.%03tu と書きます。これは epoch からの秒数に3桁のミリ秒を続けたもので、その位置の値は整形された暦日ではありません。
まず有効な access_log 形式を確認します。Squid 7 では、そのインスタンスの access_log の出力と形式の選択を確認してください。カスタムログ形式、syslog の接頭辞、下流のログ処理系は、表示される行の先頭に別のタイムスタンプを置くことがあります。
3つの確認で絞り込む
- 数値を正しい単位でデコードします。小数部は秒の値の一部であり、ミリ秒の独立した整数タイムスタンプではありません。
- デコードした UTC 時刻とローカル時刻の表示を比較します。タイムゾーンの差は表示される時、ときに暦日を動かしますが、何年も離れた日付は説明できません。
- 新しいレコードを、その Squid インスタンスを動かしているマシンの時計と比較します。systemd ホストでは
timedatectl statusが時計の設定と同期状態を報告します。
ホストの時計も誤っている場合は、時刻同期と、該当する場合は仮想マシンの時刻設定を調べます。不自然なログ日付が1つだけでは、ハードウェア時計の電池切れを特定するには足りません。
ホストの時計が正しければ、ファイルが最新でそのインスタンスのものであることを確認します。ローテーションされたアーカイブ、リモートの収集系、表示ツール内のタイムスタンプ変換を確認してください。
トランザクションのタイムスタンプと、収集系が行を受け取る時刻も区別します。通常のアクセス記録はリクエスト完了時に行われ、デーモンのログは非同期に書き込まれることがあります。長時間のリクエストやトンネルは、最初の接続時刻に現れるとは限りません。