😊

[Linux] Syslogの日付について

2022/08/07に公開

要点

  • LinuxにおけるSyslog (RedHat系:/var/log/mesages、Debian系:/var/log/syslog)のファイルフォーマットは「日 時 ホスト名 情報」となっている
    ※crieitから移植
  • Syslog例
Feb 16 18:00:10 web sshd[13865]: Accepted publickey for user01 
from 192.168.0.2 port 45680 ssh2
  • bash scriptやワンライナーコマンドで絞り込むとき、日にちが1桁の場合絞り込みがうまくいかない
  • 一桁日にちの場合のSyslog例:「月(スペース)(スペース)日にち」の表現になる
Feb  4 21:25:22 ホスト名 情報`

コマンド

LANG=C date | cut -d " " -f 2-4 | sed -e "s/ ..:.*$//"
  • Syslog内容を作業当日の絞り込み
# cat /var/log/messages | grep "`LANG=C date | cut -d " " -f 2-4 | sed -e "s/ ..:.*$//"`"
Feb  4 10:0:01 ホスト名 情報
Feb  4 10:0:01 ホスト名 情報

コマンド説明

  1. 日付の表示 例:Fri Feb 4 22:10:50 JST 2022
    LANG=C date
  2. 日付フォーマットを加工 例:Feb 4 (2桁日にちの場合時刻まで含まれる)
    cut -d " " -f 2-4
  3. 2桁日にちの場合の時刻除去
    sed -e "s/ ..:.*$//"

コマンド実行例

  • 1桁日にちのコマンド実行例
$ LANG=C date | cut -d " " -f 2-4 | sed -e "s/ ..:.*$//"
Feb  4
  • 2桁日にちのコマンド実行例
LANG=C date --date '5 day ago' | cut -d " " -f 2-4 | sed -e "s/ ..:.*$//"
Jan 30

Syslogの絞り込み例

  • ワンライナーでの実行例
# cat /var/log/messages | grep "`LANG=C date | cut -d " " -f 2-4 | sed -e "s/ ..:.*$//"`"
Feb  4 10:0:01 ホスト名 情報
Feb  4 10:0:01 ホスト名 情報
  • 変数定義後の事項例
# LOGDATE=`LANG=C date | cut -d " " -f 2-4 | sed -e "s/ ..:.*$//"`
# cat /var/log/messages | grep "${LOGDATE}"
Feb  4 10:0:01 ホスト名 情報
Feb  4 10:0:01 ホスト名 情報

備忘

  • フォーマット不一致例
$ LANG=C date "+%b %d"
Feb 04

Discussion