Linuxでsyslog:syslogを読んでみる
いつもアクセスありがとうございます。匠技術研究所の谷山 亮治です。
"syslog"とは、システムの稼働状況を記録する仕組みで、UNIX系OSやLinuxでは標準機能として備わっており、OS、ミドルウエアそしてアプリケーションの動作状況をログとして記録します。
syslogはどこにあるか
Linuxの場合、syslogは以下のディレクトリにあります。
$ ls /var/log
alternatives.log apport.log.5.gz dpkg.log.12.gz lsyncd
alternatives.log.1 apport.log.6.gz dpkg.log.2.gz lxc
alternatives.log.10.gz apport.log.7.gz dpkg.log.3.gz lxd
alternatives.log.11.gz apt dpkg.log.4.gz ntpstats
alternatives.log.12.gz auth.log dpkg.log.5.gz syslog
alternatives.log.2.gz auth.log.1 dpkg.log.6.gz syslog.1
alternatives.log.3.gz auth.log.2.gz dpkg.log.7.gz syslog.2.gz
alternatives.log.4.gz auth.log.3.gz dpkg.log.8.gz syslog.3.gz
alternatives.log.5.gz auth.log.4.gz dpkg.log.9.gz syslog.4.gz
alternatives.log.6.gz bootstrap.log faillog syslog.5.gz
alternatives.log.7.gz btmp fsck syslog.6.gz
alternatives.log.8.gz btmp.1 installer syslog.7.gz
alternatives.log.9.gz dist-upgrade kern.log unattended-upgrades
apport.log dmesg kern.log.1 wtmp
apport.log.1 dpkg.log kern.log.2.gz wtmp.1
apport.log.2.gz dpkg.log.1 kern.log.3.gz yum.log
apport.log.3.gz dpkg.log.10.gz kern.log.4.gz
apport.log.4.gz dpkg.log.11.gz lastlog
$
syslogを読んでみる
各ログはテキストファイルです。なので、テキストを読むプログラムで出力します。ここではtailを使って最新のログを含む直近の10行を出力しています。
$ tail -n 10 /var/log/syslog
Oct 31 00:11:04 cbkkawa01 systemd[1]: Starting User Manager for UID 1000...
Oct 31 00:11:04 cbkkawa01 systemd[1]: Started Session 1124 of user takumi.
Oct 31 00:11:04 cbkkawa01 systemd[29697]: Reached target Paths.
Oct 31 00:11:04 cbkkawa01 systemd[29697]: Reached target Sockets.
Oct 31 00:11:04 cbkkawa01 systemd[29697]: Reached target Timers.
Oct 31 00:11:04 cbkkawa01 systemd[29697]: Reached target Basic System.
Oct 31 00:11:04 cbkkawa01 systemd[29697]: Reached target Default.
Oct 31 00:11:04 cbkkawa01 systemd[29697]: Startup finished in 46ms.
Oct 31 00:11:04 cbkkawa01 systemd[1]: Started User Manager for UID 1000.
Oct 31 00:17:01 cbkkawa01 CRON[30533]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
$
ログは、大量に記録されていることもあるので、全部を読みだすとたいへんです。今、何行あるかを知るにはwcを使って確認することができます。以下の例は心配するほどの量はありませんでした。
$ wc -l /var/log/syslog
91 /var/log/syslog
$ wc -l /var/log/syslog.1
131 /var/log/syslog.1
$
Ubuntu 18.04 LTS環境では、syslogは定期的に圧縮保存されています。圧縮保存されているログを読むには、zcatを使うと、圧縮したままで内容を読むことができます。
$ zcat /var/log/syslog.2.gz | wc -l
134
$ zcat /var/log/syslog.2.gz | tail -n 10
Oct 29 05:35:51 cbkkawa01 smartd[1170]: Device: /dev/sde [SAT], SMART Usage Attribute: 194 Temperature_Celsius changed from 37 to 38
Oct 29 05:35:52 cbkkawa01 smartd[1170]: Device: /dev/sdf [SAT], SMART Usage Attribute: 190 Airflow_Temperature_Cel changed from 56 to 57
Oct 29 05:35:52 cbkkawa01 smartd[1170]: Device: /dev/sdf [SAT], SMART Usage Attribute: 194 Temperature_Celsius changed from 44 to 43
Oct 29 06:05:51 cbkkawa01 smartd[1170]: Device: /dev/sdd [SAT], SMART Usage Attribute: 194 Temperature_Celsius changed from 107 to 108
Oct 29 06:05:51 cbkkawa01 systemd[1]: Starting Daily apt upgrade and clean activities...
Oct 29 06:05:51 cbkkawa01 smartd[1170]: Device: /dev/sde [SAT], SMART Usage Attribute: 190 Airflow_Temperature_Cel changed from 62 to 63
Oct 29 06:05:51 cbkkawa01 smartd[1170]: Device: /dev/sde [SAT], SMART Usage Attribute: 194 Temperature_Celsius changed from 38 to 37
Oct 29 06:05:57 cbkkawa01 systemd[1]: Started Daily apt upgrade and clean activities.
Oct 29 06:17:01 cbkkawa01 CRON[30227]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Oct 29 06:25:01 cbkkawa01 CRON[31247]: (root) CMD (test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ))
$
次回は、必要なログの抽出についてです。日時やログ文中のキーワードでログを抽出します。
この記事は、Microsoft VisualStudio Codeを使いmarkdown形式で記述しました。Codeのアドオン機能でHTML出力し、ブログの仕様に合わせて整形して掲載しています。