知っておくとちょっと便利!ログを読みやすくする小技

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
VSCode Dev Containersで楽々開発環境構築祭り〜Python/Reactなどなど〜
Visual Studio Codeの拡張機能であるDev Containersを使ってReactとかPythonとかSpring Bootとかの開発環境をラクチンで構築する方法を紹介するイベントです。
https://tech-lab.connpass.com/event/311864/

今号では、ログを読みやすくするためのちょっとした小技 (コマンド) のご紹介をします!

行番号を表示する

less -N コマンドを使用すると、ログの左側に行番号を表示します。
行番号でログの内容を管理できると、後で見返す際に便利ですね。

例:less -N /var/log/messages コマンドで messages ファイルの内容を表示した結果

      1 Dec 10 03:12:02 localhost rsyslogd: [origin software="rsyslogd" swVersion="8.24.0-34.el7" x-pid="5956" x-info="http://www.rsyslog.com"] rsyslogd was HUPed
      2 Dec 10 03:12:02 localhost systemd: Removed slice User Slice of root.
      3 Dec 10 03:20:01 localhost systemd: Created slice User Slice of root.
      4 Dec 10 03:20:01 localhost systemd: Started Session 2015 of user root.
      5 Dec 10 03:20:01 localhost systemd: Removed slice User Slice of root.
      6 Dec 10 03:30:01 localhost systemd: Created slice User Slice of root.
      7 Dec 10 03:30:01 localhost systemd: Started Session 2016 of user root.
      8 Dec 10 03:30:01 localhost systemd: Removed slice User Slice of root.
   …

不要な情報を表示しないようにする

grep -v コマンドを使用すると、指定した単語 (行) を表示しないようにすることができます。
例えば、messages ファイルにはユーザのログイン情報が大量に出力されますが、これらの行を表示しないようにすることで
目的のログを探しやすくすることができます。

例:messages ファイルの内容のうち、systemd の情報以外を表示したい場合

# grep -v systemd /var/log/messages
Dec 10 03:12:02 localhost rsyslogd: [origin software="rsyslogd" swVersion="8.24.0-34.el7" x-pid="5956" x-info="http://www.rsyslog.com"] rsyslogd was HUPed
Dec 10 07:32:28 localhost dhclient[16777]: DHCPREQUEST on ens192 to 10.11.0.4 port 67 (xid=0x73eaff20)
Dec 10 07:32:28 localhost dhclient[16777]: DHCPACK from 10.11.0.4 (xid=0x73eaff20)
Dec 10 07:32:28 localhost NetworkManager[5386]:   [1702161148.6850] dhcp4 (ens192):   address 10.1.1.5
Dec 10 07:32:28 localhost NetworkManager[5386]:   [1702161148.6853] dhcp4 (ens192):   plen 16 (255.255.0.0)
Dec 10 07:32:28 localhost NetworkManager[5386]:   [1702161148.6853] dhcp4 (ens192):   gateway 10.1.0.1
Dec 10 07:32:28 localhost NetworkManager[5386]:   [1702161148.6853] dhcp4 (ens192):   lease time 43200
Dec 10 07:32:28 localhost NetworkManager[5386]:   [1702161148.6854] dhcp4 (ens192):   nameserver '10.11.0.2'
Dec 10 07:32:28 localhost NetworkManager[5386]:   [1702161148.6854] dhcp4 (ens192):   nameserver '10.11.0.3'
Dec 10 07:32:28 localhost NetworkManager[5386]:   [1702161148.6854] dhcp4 (ens192): state changed bound -> bound

なお、1. で紹介した less -N コマンドと組み合わせて使用することもできます。

例:grep -v systemd /var/log/messages | less -N コマンドで messages ファイルの内容を表示した結果

      1 Dec 10 03:12:02 localhost rsyslogd: [origin software="rsyslogd" swVersion="8.24.0-34.el7" x-pid="5956" x-info="http://www.rsyslog.com"] rsyslogd was HUPed
      2 Dec 10 07:32:28 localhost dhclient[16777]: DHCPREQUEST on ens192 to 10.11.0.4 port 67 (xid=0x73eaff20)
      3 Dec 10 07:32:28 localhost dhclient[16777]: DHCPACK from 10.11.0.4 (xid=0x73eaff20)
      4 Dec 10 07:32:28 localhost NetworkManager[5386]:   [1702161148.6850] dhcp4 (ens192):   address 10.1.1.5
      5 Dec 10 07:32:28 localhost NetworkManager[5386]:   [1702161148.6853] dhcp4 (ens192):   plen 16 (255.255.0.0)
      6 Dec 10 07:32:28 localhost NetworkManager[5386]:   [1702161148.6853] dhcp4 (ens192):   gateway 10.1.0.1
      7 Dec 10 07:32:28 localhost NetworkManager[5386]:   [1702161148.6853] dhcp4 (ens192):   lease time 43200
      8 Dec 10 07:32:28 localhost NetworkManager[5386]:   [1702161148.6854] dhcp4 (ens192):   nameserver '10.11.0.2'
      9 Dec 10 07:32:28 localhost NetworkManager[5386]:   [1702161148.6854] dhcp4 (ens192):   nameserver '10.11.0.3'
     10 Dec 10 07:32:28 localhost NetworkManager[5386]:   [1702161148.6854] dhcp4 (ens192): state changed bound -> bound

less -N /var/log/messages | grep -v systemd コマンドでは行数が表示されません。

unix 時間を変換する

ソフトウェアの種類によっては、デフォルトの設定でログの時刻が unix 時間となっており、人間にとって読みづらい場合があります (squid などがこれに該当します)。
そのような場合 awk コマンドを使用して、指定した文字列の内容を置き換えることができます。

例:ログファイル (今回は squid の access.log) の時刻を、unix 時間から yyyy/mm/dd hh:mm:ss 形式に変換したい場合

# cat access.log
1701936353.513      19 10.1.1.100 TCP_TUNNEL/200 20 CONNECT example.com:80...
1701936371.322      61 10.1.1.100 TCP_TUNNEL/200 40 CONNECT example.com:80...
1701936392.054      77 10.1.1.100 TCP_TUNNEL/200 40 CONNECT example.com:80...
1701936412.127      37 10.1.1.100 TCP_TUNNEL/200 40 CONNECT example.com:80...
1701936431.592      28 10.1.1.100 TCP_TUNNEL/200 25 CONNECT example.com:80...
#
# cat access.log | awk '{print strftime("%Y/%m/%d %H:%M:%S", $1), $0}'
2023/12/07 17:05:53 1701936353.513      19 10.1.1.100 TCP_TUNNEL/200 20 CONNECT example.com:80...
2023/12/07 17:06:11 1701936371.322      61 10.1.1.100 TCP_TUNNEL/200 40 CONNECT example.com:80...
2023/12/07 17:06:32 1701936392.054      77 10.1.1.100 TCP_TUNNEL/200 40 CONNECT example.com:80...
2023/12/07 17:06:52 1701936412.127      37 10.1.1.100 TCP_TUNNEL/200 40 CONNECT example.com:80...
2023/12/07 17:07:11 1701936431.592      28 10.1.1.100 TCP_TUNNEL/200 25 CONNECT example.com:80...
アバター画像
About 貝野 友香 67 Articles
OSSよろず相談室でサポートをやっています。時々ライブ配信や勉強会に出ていることもあります。
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる