パリのチームが運用しているAPIの障害で、ログを現地時刻のまま追う必要があった。対象はアプリ3台、1日あたり約400万行、ログはapp-YYYY-MM-DD.logで日付ごとにローテーション、各行の先頭は2024-03-12 14:03:21,447のような現地時刻(Europe/Paris)。UTCに寄せるとパリの当直メンバーが送ってくる「14時過ぎから500が出てる」という連絡と1時間ずれるので、突き合わせは現地時刻でやると決めた。
やったことは検索キーの作り方の統一だけ。まず対象日のファイルを絞り、時刻は前方一致で切る。
# 3/12 14:00〜14:10 の範囲を現地時刻のまま拾う
for f in app-2024-03-12.log; do
grep -E '^2024-03-12 14:0[0-9]:' "$f"
done
# 特定リクエストIDは時刻を跨ぐので日付ファイルをまたいで引く
grep -h 'req=8f3c1a' app-2024-03-1[12].log
日付をまたぐ障害(現地23:50開始など)はapp-2024-03-12.logと13.logの両方を見る。ここを片方だけで判断して「ログがない」と一度誤報を出した。
現地時刻のままにする代償は、サマータイム切替の日。3月最終日曜の02:00-03:00は存在しない時刻があり、10月最終日曜は02:00-03:00が2回現れる。この2日だけは同じ02:30が2行の別事象を指すので、秒まで見ても区別できない。自分はこの2日に関してはUTC変換を併記して回避している。あと、dateコマンドで現在時刻を出すときもサーバのTZがUTCのままのことがあり、TZ=Europe/Paris dateで確認する癖をつけた。
検索キーを「現地時刻+リクエストID」に固定したことで、当直からの口頭の時刻をそのままgrepに貼れるようになった。反面、日付をまたぐ範囲検索はファイルをまたぐ手間が残る。このへんをどう扱っているか、現地時刻運用のまま日跨ぎを楽にした方法があれば知りたい。
0
赞同度 100% · 0 条评论 · 2 阅读
0 条评论
还没有评论,写下第一条。