|||||||||||||||||||||

なんぶ電子

- 更新: 

Debian(Linux)のログについて

Debianのdmesgログ

「ログ」という言葉に食傷気味になっているIT管理者の方もいませんか。筆者もそのような人間の一人で、どうしてなんだろうと考えた結果ログについてよく知らないことに気づきました。だからすべてのログを読み解こうとして疲れてしまうのではないかと。

そこでログを見直すためにここではLinuxにおけるSyslogの知識を@IT:システム管理の基礎 syslogdの設定をマスターしようを参考に理解を深めたいと思います。

/var/log

ログは大きく2系統に分かれます。それはアプリケーションが独自にログを出力する場合と、アプリケーションがsyslogdを通じてログを出力する場合です。これらのログはたいてい/var/logディレクトリのどこかに入ります。(Debianだとdmesgで表示されるログは入らないようです)

Syslog

SyslogとはもともとログメッセージをIPネットワーク上で転送するための規格を表すものです。UDPの514ポートに割り当てられています。それらのログを送信したり、保存したりするアプリケーションにも「Syslog」という言葉が使われます。

Linux上ではSyslogデーモンがログを受け付けているので、Syslogを利用するアプリはそこにログを渡すことでログが管理されます。

Syslogには「ファシリティ」と「プライオリティ」という概念があります。

ファシリティは、何のログかに当たるもで「mail(メールに関するログ)」や「authpriv(認証に関するログ)」といった項目があるだけでなく「local0~local7」の範囲で、利用者が独自に振り分けることができます。複数に所属することもできます。

プライオリティは、重要度です。「emerg(緊急事態)」、「warning(警告)」「info(情報)」等があり、表示時に重要なものや特定の項目に限って絞り込むことが可能です。

Debianにおいては標準的に設定されるのはrsyslogです。このメイン設定ファイルは/etc/rsyslog.confで、詳細設定は/etc/rsyslog.d/ディレクトリに入っています。

rsyslog.confには、ログ作成のアクセス権の設定や、「ファシリティ.プライオリティ 保存先」で構成されるエントリーがあります。

logrotate

logは放っておくとどんどんたまり続けます。また一つのログファイルが大きくなりすぎると取り扱いに手間がかかるようになります。これを回避するためにlogrotateというアプリが存在します。これはSyslogとは完全に独立していて、Debianでは通常、日々のcronジョブでこのlogrotateが実行されます。

logrotateの処理によりファイルは分割され、古いものは削除されます。

なんのログをどれぐらいの単位で区切って、何日保存しておくかといった設定は/etc/logrotate.d/ディレクトリ内あります。管理対象のログ毎にファイルが分かれています。

筆者の環境にあるmysql-serverにおけるデフォルトの設定は次のようになっていました。

/etc/logrotate.d/mysql-server


# - I put everything in one block and added sharedscripts, so that mysql gets
#   flush-logs'd only once.
#   Else the binary logs would automatically increase by n times every day.
# - The error log is obsolete, messages go to syslog now.
/var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log /var/log/mysql/mariadb-slow.log /var/log/mysql/error.log {
  daily
  rotate 7
  missingok
  create 640 mysql adm
  compress
  sharedscripts
  postrotate
    test -x /usr/bin/mysqladmin || exit 0
    if [ -f `my_print_defaults --mysqld | grep -m 1 -oP "pid-file=\K.+$"` ]; then
      # If this fails, check debian.conf!
      mysqladmin --defaults-file=/etc/mysql/debian.cnf --local flush-error-log \
        flush-engine-log flush-general-log flush-slow-log
    fi
  endscript
}

設定項目に対する説明は次の通りです。

  • 対象ファイル{}

    対象ファイルを記述しその設定を{}の中に記述します。ファイルが複数ある時はスペースで区切ります。

  • daily

    日毎のローテーションを指定しています。次の設定と合わせて7日分のログを残す設定となります。weeklyとすると週、monthlyとすると月毎のローテーションになります。保存の期間は好みで調整してください。

  • rotate 7

    7世代分のログを残す設定です。

  • missingok

    ログファイルがなくてもエラーにしない設定です。

  • create 640 mysql adm

    新しいログファイルを作成する際のモード(権限)、ユーザー、グループを設定しています。

  • compress

    古いログファイルをgzip形式で圧縮します。

  • sharedscripts

    postrotateで記述するスクリプトは通常ファイル毎に実行されますが、sharedscriptsを指定すると全体を通して1度の実行になります。

  • postrotate~endscript

    ローテーション処理後に実行するスクリプトを記載します。

他にも指定できるオプションは複数あります。一覧は「man logrotate」から確認できます。

ちなみに、手動による実行をしたい場合は、「logrotate -f 設定ファイル名」で強制的に処理を実行することができます。また、実際にローテーションせずに設定ファイルのテストだけしたい場合は「logrotate -d 設定ファイル名」を利用します。

筆者紹介


自分の写真
がーふぁ、とか、ふぃんてっく、とか世の中すっかりハイテクになってしまいました。プログラムのコーディングに触れることもある筆者ですが、自分の作業は硯と筆で文字をかいているみたいな古臭いものだと思っています。 今やこんな風にブログを書くことすらAIにとって代わられそうなほど技術は進んでいます。 生活やビジネスでPCを活用しようとするとき、そんな第一線の技術と比べてしまうとやる気が失せてしまいがちですが、おいしいお惣菜をネットで注文できる時代でも、手作りの味はすたれていません。 提示されたもの(アプリ)に自分を合わせるのでなく、自分の活動にあったアプリを作る。それがPC活用の基本なんじゃなかと思います。 そんな意見に同調していただける方向けにLinuxのDebianOSをはじめとした基本無料のアプリの使い方を紹介できたらなと考えています。

広告