Skip to content

Instantly share code, notes, and snippets.

@261shimizu
Last active January 25, 2023 02:19
Show Gist options
  • Save 261shimizu/923d5a0e9c03ed247587d9adb668dd46 to your computer and use it in GitHub Desktop.
Save 261shimizu/923d5a0e9c03ed247587d9adb668dd46 to your computer and use it in GitHub Desktop.
ログのあれこれ

ログファイルまとめ

ログイン情報に関するログ


  • /var/log/wtmp
  • /var/log/btmp
  • /var/log/faillog
  • /var/log/lastlog
  • /var/log/tallylog

これ等のログファイルはいずれもバイナリ形式なので、中身を見るには専用コマンドが必要
これ等の場合はstringsとかでOK

  1. wtmp
    ログイン試行の内、成功したものについて、その情報を記録したファイル
    ユーザ名、ログイン端末、ログイン元ホスト、ログイン時刻およびログアウト時刻が記録されている
    この情報を見るのは、lastコマンド なお、このファイルには、システムの再起動情報が、rebootというユーザがシステムにログインしたものとして記録されている

  2. btmp
    ログイン試行の内、失敗したものについて、その情報を記録したファイル
    存在しないアカウントでのログインや、パスワードの入力ミス等、ログインに失敗した際の情報が記録されている
    この情報を見るのは、lastbコマンド(root権限が必要)

  3. faillog
    ログイン失敗を記録するファイル
    /var/log/btmpが不正なログインをすべて記録しているのに対し、/var/log/faillogはユーザーごとにログインの失敗回数を記録する
    また、このファイルにはユーザーごとのログイン最大失敗回数を設定しておくことができる
    認証にpam_tallyモジュールを使うようPAMを設定しておくと、一定回数ログインに失敗したユーザに対し、アカウントロックを行うことが可能

このファイルの管理には**faillogコマンド**が用意されている
faillogコマンド1つで、情報の参照だけでなく、ログインの最大失敗回数の設定や失敗回数のクリアを行うことが可能

  1. lastlog
    システムに登録されているユーザの最終ログイン時刻を記録したファイル
    この情報を見るのは、lastlogコマンド

5.tallylog
faillogと同じく、ログインの失敗回数を記録するファイル
faillogの形式がi386システムとx86_48のシステムで異なるので、アーキテクチャに依存しないファイル形式としてこのファイルが用意されている

/var/log/tallylogを使用する場合、認証にはpam_tally2を使うようにPAMを設定する必要がある
また、faillogコマンドに相当するコマンドとして、pam_tally2コマンドが用意されている

syslogを利用したログ


  • /var/log/boot.log
  • /var/log/cron
  • /var/log/maillog
  • /var/log/secure
  • /var/log/spooler
  • /var/log/messages

これ等はいずれもテキストファイルなので、普通にcatとかで見られる

  1. /var/log/boot.log
    システム起動時のサービスの起動メッセージなどが記録されるファイル
    ただ、Fedra Core4以降および、RHEL5/CentOS5では、バグのためにこのメッセージが記録されなくなっている

  2. /var/log/cron
    cronやatdのようなクロックデーモンのログが記録されるファイル
    いつ、どのユーザでどのコマンドが実行されたかが記録されている

  3. /var/log/maillog
    メールシステムのログが記録されるファイル
    MTAが処理したメールの送受信記録はこのファイルに保存されている

  4. /var/log/secure
    認証に関するログが記録されるファイル
    sshdやsudoコマンドなどのログが記録されている

  5. /var/log/spooler
    UUCP(Unix to Unix CoPy:2つのUNIXシステム間でデータ交換を行うための一連のプログラム群)のログが記録されるファイル

  6. /var/log/messages
    上記以外のsyslogメッセージが記録されるログファイル
    カーネルメッセージから上記に該当しないプログラムのメッセージまで様々なメッセージが記録されている

その他/var/log配下


  • /var/log/acpid
  • /var/log/anaconda.log
  • /var/log/anaconda.syslog
  • /var/log/dmesg
  • /var/log/rpmpkgs
  • /var/log/yum.log
  1. /var/log/acpid
    電源ボタンが押された際などに発生するACPIのイベントを処理するデーモンであるacpidのログファイル
    発生したACPIイベントと、イベントに応じたアクションのログが記録されている

  2. インストール関連ログ
    /var/log/anaconda.logと/var/log/anaconda.syslogは、インストーラであるanacondaのログファイル
    これ等の他に、/root/install.logと/root/install.log.syslogにもインストール時のログが記録されている
    それぞれ記録されている内容は違っているが、インストールがうまくいかなかった場合以外にこれらのファイルはあんまり見ない

  3. /var/log/dmesg
    システム起動時からファイルシステムがマウントされる時点までの間にカーネルが出力したメッセージが記録されているファイル
    dmesgコマンドで表示される情報は一定量を超えると古いものから順に削除されるので、情報ハードウェアの認識情報をdmesgコマンドで確認しようと思ったら削除されてた、、、なんてことも。
    その場合にこのファイルが活きる

  4. /var/log/rpmpkgs
    システムにインストールされているすべてのrpmパッケージ名を記録したファイルで、毎日更新される
    このファイルは/etc/cron.daily/rpmによって生成されている

  5. /var/log/yum.log
    yumのログファイル
    yumコマンドを使用したパッケージの追加・削除・更新等のログが記録される

その他/var/log/配下のディレクトリについて簡単に


  • /var/log/audit/
  • /var/log/mail/
  • /var/log/httpd/
  • /var/log/conman/
  • /var/log/conman.old/
  • /var/log/news/
  • /var/log/pm/
  • /var/log/ppp/
  • /var/log/prelink/
  • /var/log/vbox/
  • /var/log/cups
  • /var/log/samba/
  • /var/log/squid/
  1. /var/log/audit/
    システム監査デーモンであるauditのログファイル(audit.log)が保存されるディレクトリ
    /var/log/audit/audit.logはテキスト形式であるが、
    ausearchというログ検索コマンドと、aureportというログのサマリーを出力するコマンドが付属している

  2. /var/log/mail/
    sendmailのログディレクトリで、sendmailの統計情報ファイル(/var/log/mail/statistics)が置かれている
    このファイルはバイナリ形式で、mailstatsコマンドを使って情報を参照する

  3. シリアルコンソール管理デーモンログ
    /var/log/conman/と/var/log/conman.oldは、シリアルコンソール管理デーモン(conmand)のログファイルが保存される

  4. /var/log/news/
    インターネットニュースシステムアプリケーションであるINNのログファイルが保存されるディレクトリ

  5. /var/log/pm/
    電源管理のためのユーティリティーやスクリプトをまとめたpm-utilsのログが置かれるディレクトリ

  6. /var/log/ppp/
    ダイヤルアップ通信など、PPP(Point-to-PointProtcol)を処理するデーモンであるpppdのログファイルの出力先ディレクトリ

  7. /var/log/prelink/
    日次で実行されるprelinkコマンド(/etc/cron.daily/prelink)の実行結果が保存されるディレクトリ

  8. /var/log/vbox/
    isdn4k-utilsパッケージに含まれるISDN voice boxデーモン(vboxd)のログファイルの出力先ディレクトリ

  9. /var/log/httpd/
    Apacheのログが保存されるディレクトリ
    Apacheの設定的には/etc/httpd/logsがディレクトリだが、/etc/httpd/logsは/var/log/httpdへのシンボリックリンクになっている

  10. /var/log/cups/,/var/log/samba/,/var/log/squid
    それぞれアプリケーションのログ出力先ディレクトリ

ログ概要

ログの標準仕様


Linuxには、Linux Standard Base(LSB)という標準仕様があり、この一部であるFile Hierarchy Standard(FHS)において、
ファイルやディレクトリの配置に関する標準が規定されている
ログファイルは、/var/log/以下に配置するようにFHSで規定されているので、LSB準拠のシステムであればログファイルは/var/log/以下に置かれる

ログの分類


ログは、出力方法という観点で大別すると、

  • アプリケーションが独自に出力したものと、
  • Unix/Linuxにおける標準的なログ出力方法であるsyslogを利用したもの
    に大別される

syslogは、独自のログ出力方法を持たない、非常に多くのアプリケーションが利用している
syslogを利用して作られるファイルは、
/var/log/boot.log,/var/log/cron,/var/log/messages,/var/log/maillog,,,,など。

上記のアプリケーションが独自に出力した物を除くと、多くのログメッセージはデフォルトで/var/log/messagesに記録される
そのため、適切に設定することが大事で、適切に設定できないと膨大な量になる

syslogとは


syslogは、OSやアプリケーション、サービスが情報をログとして記録するための仕組みで、現在のUNIX/Linuxシステムには標準装備

syslogにおいては、ログメッセージを出力するアプリケーションとは別に、出力されたログメッセージを受け取るアプリケーションが存在する
このログ受信アプリケーションが受け取ったログメッセージをファイルに保存するなどの処理をしている

また、ログ受信アプリケーションによっては、受け取ったメッセージをネットワーク越しに別サーバに送信することができる
この機能を使うことで、複数サーバのログを一台のサーバに集約することが可能
CentOSではログ受信アプリケーションとしてsyslogdというプログラムが採用されている

syslogでは、ログの種類をfacility、ログの重大度をseverityという数字で表されるコードで指定する
priorityは、syslogとsyslog.confにて重大度を表すために使われている用語

syslogの設定ファイル


syslogdの設定ファイルは別途コマンドラインで指定されない限り**/etc/syslog.conf**
設定ファイルは行試行のファイルで、
1行ごとにfacilityとpriorityのペアを記述したselector部と、selectorにマッチしたログの出力先を記したaction部とを、スペースまたはタブで区切って記述する

selectorに指定されたpriority以上(値としては小さいもの)のpriorityを持つログメッセージがそのselectorにマッチする

selectorには、facility,priorityの順にピリオド(.)で区切って記述する
ここら辺をなんやかんやすると、syslogが膨大にならなくて済んだり、、、するらしい

logrotate -ログのローテーション-

概要


syslogや他のプロセスが作るファイルは放置しているとサイズがとんでもないことになる
放置すると/varディレクトリのディスク占有率がみるみる増加していくことがわかる

したがって、ログを何世代分保持しておくかという考え方が出てくる
この考え方によってログファイルの上限が決まり、ログをローテーションすることでこれを実現させる

logrotate.conf


ログのローテーションの設定ファイルはlogrotate.conf(/etc/logrotate.conf)

↓自分の環境のlogrotate.conf(いじっていないのでCentOS6.5デフォルトだと思われる)

# see "man logrotate" for details
# rotate log files weekly
weekly  ← **ログを1週間分で管理するという意味**

# keep 4 weeks worth of backlogs
rotate 4 ← **4世代分(ここでは4週間分)のログを残すという意味**

# create new (empty) log files after rotating old ones
create ← **新規ログファイルをローテーションした直後に作成**

# use date as a suffix of the rotated file
dateext ← **ログファイルの末尾に日付がつく(YYYYMMDD)**

# uncomment this if you want your log files compressed
#compress ← **圧縮する**

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d ← **各ログファイルの設定があるパスを指定する**

# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
        minsize 1M
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

つまり、例えばmessageなら、/var/logにmessage.1,message.2,・・・message.4まであるということ
なので、ログのデータが多い場合はweeklyをdailyにして、rotateの量を大きくするべし

項目 説明
weekly 毎週ログを置き換える(これが1世代の単位になる)
rotate4 ログを4世代分残す
dateext ログファイルの末尾に日付がつく(YYYYMMDD)
missingok ログファイルが無い場合でもエラーにしない
create 新規ログファイルをローテーションした直後に作成
compress ローテーションされたログを圧縮する
delaycompress 次回のログローテーションサイクルになるまで圧縮しない
notifempty ログファイルが空ならローテートしない
copytruncate (後述)
include 各ログファイルの設定があるパスを指定する。/etc/logrotate.d以下にファイルを作成して設定ファイルを書いても良い
/var/log/wtmp {~} (詳細は後述)wtmpとbtmpは管理するパッケージが無いのでここに記述

※wtmpとbtmpについて

wtmpは、ログイン情報のログが記録されている  
btmpは、ログイン失敗のログが記録されている  

上記の設定ファイルの中身で言えば、wtmpの設定内容は、  
毎月1世代のみログを残し、所有者がrootでグループがutmpで、パーミッションが664のログファイルを作成するという意味

※copytruncateについて

通常のローテートは、既存のログを移動して新しいログファイルを作成(create)する  
しかし、このcopytruncateを指定すると動作が変わり、ログをコピーした後に既存のログのサイズを0にする  
ログファイルを閉じないプログラム(rails含む)は、この指定をしないとずっと同じログファイルに書き込みが行われれる  
これを指定するとcreateが無効になる  

参考(http://blog.willnet.in/entry/20081001/1222836601)
参考2(http://linux.kororo.jp/cont/server/logrotate.php)

logrotate.d


logrotate.confファイルに記述があったlogrotate.dについて

概要


各ログファイルの設定は、/etc/logrotate.d以下に各サービスごろに別ファイルに記述されている

↓以下自分の環境での/etc/logrotate.d配下

[root@ ~]# ls -l /etc/logrotate.d
合計 60
-rw-r--r--. 1 root root  71  7月 24 20:09 2015 cups
-rw-r--r--. 1 root root 139  7月 24 21:36 2015 dracut
-rw-r--r--. 1 root root 513 12月 22 15:40 2015 glusterfs
-rw-r--r--. 1 root root 185  2月  4 22:18 2016 httpd
-rw-r--r--. 1 root root 172  7月 24 07:40 2015 iscsiuiolog
-rw-r--r--. 1 root root 165  3月 23 01:59 2016 libvirtd
-rw-r--r--. 1 root root 162  3月 23 01:59 2016 libvirtd.lxc
-rw-r--r--. 1 root root 163  3月 23 01:59 2016 libvirtd.qemu
-rw-r--r--. 1 root root 106  6月  3 20:06 2015 numad
-rw-r--r--. 1 root root 136  3月 16 17:51 2015 ppp
-rw-r--r--. 1 root root 329  7月 17 17:02 2012 psacct
-rw-r--r--. 1 root root 237  3月 23 01:42 2016 sssd
-rw-r--r--. 1 root root 210 12月 10 19:05 2014 syslog
-rw-r--r--. 1 root root 100  7月 24 18:59 2015 wpa_supplicant
-rw-r--r--. 1 root root  87  7月 24 19:27 2015 yum
[root@ ~]#

基本は、logrotate.confの/var/log/wtmp等に書いてあるような書式になっている
実際にlogrotate.d配下のsyslogを見てみる

[root@centosshimizu ~]# cat /etc/logrotate.d/syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

{}の前に、syslogが残すファイルのパスが記述されている
{}の中に入り、sharedscriptsは、以降の処理をワイルドカードの指定に関わらず1度だけ実行するという宣言文。
実際の処理は、postrotate~endscriptの間に記述する

ここの処理は重要で、仮にログローテーション後に、ログファイルにログを吐いていたプロセスがログファイルを見失うと以降はログが取れなくなる
この問題を回避するため、syslogにHUPシグナルを送り、再起動することでローテーション後にcreateによって作成されたファイルに正常にsyslogがログをはきっだすようにしている

ログのローテーションが記載された日付が書き出されるファイルが、/var/lib/logrotate.status

logrotateコマンドは、ローテーションを強制的に行うコマンドで、-dオプションを指定すると、デバッグモードとしてテストすることが可能

logrotateはデーモンではないので、logrotate自身が自分でログのローテーションを行うわけではなく、cronによって自動実行されるようになっている
その際に、cronによって/etc/cron.daily/logrotateというシェルスクリプトが呼び出される
実行が完了すると、/var/lib/logrotate.statusという結果ファイルが作成され、これにいつローテーションが行われたかを確認することができる

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment