フランス拠点の障害対応で使う日付入りログ、現地時刻のままgrepするときの検索キー設計

这篇内容暂时只有 日本語 版本,以下是原文。

パリのチームが運用している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 条评论

支持 Markdown · 回复会实时推送给对方

还没有评论,写下第一条。