Linuxのエラーログはどこにある?ログファイルの場所と確認方法

Linux

Linuxサーバーでトラブルが起きたとき、まず確認すべきなのがログファイルです。

「サービスが起動しない」「接続できない」「予期せぬエラーが発生した」

こういった問題を調査するとき、ログは原因を特定するための重要な手がかりになります。

この記事では、Linuxで一般的なエラーログファイルの場所と、その中身を確認する基本的な方法をわかりやすく解説します。

スポンサーリンク

Linuxのログシステムの基本

ログの役割と重要性

Linuxのログファイルには以下のような情報が記録されます:

  • システムの起動・停止:サービスの開始や終了
  • エラーや警告:問題の発生とその詳細
  • セキュリティ情報:ログイン試行や権限変更
  • パフォーマンス情報:リソース使用状況やレスポンス時間

ログの種類

システムログ

  • カーネルメッセージ
  • システムサービスの動作
  • ハードウェアの状態

アプリケーションログ

  • Webサーバー(Apache、Nginx)
  • データベース(MySQL、PostgreSQL)
  • メールサーバー(Postfix、Sendmail)

セキュリティログ

  • 認証試行
  • 権限昇格
  • ファイアウォール活動

基本的なログディレクトリと場所

メインのログディレクトリ

Linuxではシステムのログファイルは主に**/var/log**に保存されています。

ls -la /var/log/

この中に多くのログファイルがあり、エラーや警告の記録もここに含まれます。

ディストリビューション別の違い

ディストリビューション主要ログファイル特徴
CentOS/RHEL/Fedora/var/log/messagesシステム全般のログ
Ubuntu/Debian/var/log/syslogシステム全般のログ
openSUSE/var/log/messagesSUSEに最適化
Arch Linuxjournalctlsystemd中心

よく使う主要なログファイル

システム全般のログ

/var/log/messages(CentOS系)

多くのディストリビューション(CentOS系など)で、システム全般のログが集まるファイルです。

sudo less /var/log/messages

記録される内容

  • カーネルメッセージ
  • サービスやデーモンの一般的な情報
  • システムエラーや警告

実際の出力例

Mar 15 10:30:25 server01 kernel: Out of memory: Kill process 1234 (httpd)
Mar 15 10:31:10 server01 systemd: Started Apache HTTP Server

/var/log/syslog(Ubuntu/Debian系)

Ubuntu や Debian系でよく使われるファイルです。

sudo less /var/log/syslog

システム全体のログがこちらに集約されます。

セキュリティ関連のログ

/var/log/auth.log

認証関連のログ(SSHログイン、suコマンドなど)を記録します。

sudo less /var/log/auth.log

よくある記録内容

Mar 15 09:15:33 server01 sshd[1234]: Failed password for root from 192.168.1.100
Mar 15 09:16:02 server01 sudo: user01 : TTY=pts/0 ; PWD=/home/user01 ; USER=root ; COMMAND=/bin/ls

不正ログインの調査や権限昇格の監視に重要です。

/var/log/secure(CentOS系)

CentOS系では認証ログが/var/log/secureに記録されます。

sudo less /var/log/secure

カーネル関連のログ

/var/log/dmesg

起動時のカーネルメッセージやハードウェア関連のログです。

sudo less /var/log/dmesg
# または
dmesg | less

ハードウェア問題の調査

dmesg | grep -i error
dmesg | grep -i fail

/var/log/kern.log

カーネル専用のログファイル(Ubuntu/Debian系):

sudo less /var/log/kern.log

サービスごとのログファイル

Webサーバーのログ

Apache(httpd)

CentOS/RHEL系

# エラーログ
sudo less /var/log/httpd/error_log

# アクセスログ
sudo less /var/log/httpd/access_log

Ubuntu/Debian系

# エラーログ
sudo less /var/log/apache2/error.log

# アクセスログ
sudo less /var/log/apache2/access.log

Nginx

# エラーログ
sudo less /var/log/nginx/error.log

# アクセスログ
sudo less /var/log/nginx/access.log

設定ファイルでの場所確認

nginx -t  # 設定ファイルの確認
grep "error_log" /etc/nginx/nginx.conf

データベースのログ

MySQL/MariaDB

CentOS系

sudo less /var/log/mysqld.log

Ubuntu系

sudo less /var/log/mysql/error.log

設定での確認

mysql -u root -p -e "SHOW VARIABLES LIKE 'log_error';"

PostgreSQL

# デフォルトの場所
sudo less /var/log/postgresql/postgresql-*.log

# 設定での確認
sudo -u postgres psql -c "SHOW log_directory;"

メールサーバーのログ

Postfix

sudo less /var/log/maillog     # CentOS系
sudo less /var/log/mail.log    # Ubuntu系

Sendmail

sudo less /var/log/maillog

その他の重要なサービス

SSH

# 接続ログの確認
sudo grep "sshd" /var/log/auth.log | tail -20

# 失敗した接続の確認
sudo grep "Failed password" /var/log/auth.log

FTP

sudo less /var/log/vsftpd.log  # vsftpd
sudo less /var/log/proftpd/proftpd.log  # ProFTPD

DNS(BIND)

sudo less /var/log/named.log   # 設定による
journalctl -u named.service    # systemd環境

ログファイルの効果的な確認方法

基本的な閲覧コマンド

lessを使った確認

sudo less /var/log/messages

lessの便利なキー

  • G:ファイルの最後に移動
  • g:ファイルの最初に移動
  • /文字列:文字列を検索
  • n:次の検索結果に移動

tailで最新の情報を確認

# 最後の20行を表示
sudo tail -20 /var/log/messages

# 最後の50行を表示
sudo tail -50 /var/log/syslog

エラーの絞り込み

grepでエラーのみ抽出

# エラーを含む行のみ表示
sudo grep -i error /var/log/messages

# 複数のキーワードで検索
sudo grep -E "(error|fail|warning)" /var/log/syslog

# 大文字小文字を区別しない検索
sudo grep -i "connection refused" /var/log/messages

日付で絞り込み

# 今日のログのみ
sudo grep "$(date '+%b %d')" /var/log/messages

# 特定の日付
sudo grep "Mar 15" /var/log/messages

# 時間範囲での絞り込み
sudo grep "Mar 15 1[0-2]:" /var/log/messages  # 10-12時

リアルタイム監視

tail -fでリアルタイム表示

# 新しいログをリアルタイムで監視
sudo tail -f /var/log/messages

# 複数ファイルを同時監視
sudo tail -f /var/log/messages /var/log/secure

Ctrl + Cで終了できます。

特定のパターンをリアルタイム監視

# エラーのみをリアルタイム監視
sudo tail -f /var/log/messages | grep -i error

# HTTPエラーをリアルタイム監視
sudo tail -f /var/log/httpd/error_log | grep "HTTP/1.1\" [45]"

systemdのログ(journalctl)

journalctlの基本

現代のLinuxディストリビューションでは、systemdが多くのサービスを管理しています。

全ログの確認

sudo journalctl

特定のサービスのログ

# Apacheのログ
sudo journalctl -u httpd.service

# SSHのログ
sudo journalctl -u sshd.service

# 複数サービス
sudo journalctl -u httpd.service -u mysql.service

journalctlの便利なオプション

時間範囲での絞り込み

# 今日のログ
sudo journalctl --since today

# 1時間前から
sudo journalctl --since "1 hour ago"

# 特定の期間
sudo journalctl --since "2024-03-01" --until "2024-03-15"

リアルタイム監視

sudo journalctl -f

# 特定のサービスをリアルタイム監視
sudo journalctl -f -u httpd.service

優先度での絞り込み

# エラーレベル以上のみ
sudo journalctl -p err

# 警告レベル以上
sudo journalctl -p warning

ログファイルのトラブルシューティング

よくある問題と対処法

ログファイルが見つからない

問題:期待する場所にログファイルがない

対処法

# 設定ファイルでログの場所を確認
sudo find /etc -name "*.conf" -exec grep -l "log" {} \;

# プロセスが開いているファイルを確認
sudo lsof | grep log

# サービスの設定確認
systemctl status サービス名

ログファイルが大きすぎる

問題:ログファイルが巨大で開けない

対処法

# ファイルサイズの確認
du -h /var/log/messages

# 最新の部分だけ確認
sudo tail -1000 /var/log/messages | less

# 古い部分を削除(注意して実行)
sudo truncate -s 100M /var/log/messages

権限でアクセスできない

問題:「Permission denied」エラー

対処法

# sudoを使用
sudo less /var/log/messages

# 一時的に権限を確認
ls -la /var/log/messages

# ユーザーをadm グループに追加(Ubuntu)
sudo usermod -a -G adm ユーザー名

ログの設定確認

rsyslogの設定

# rsyslogの設定ファイル
sudo less /etc/rsyslog.conf
sudo less /etc/rsyslog.d/*.conf

# 設定の再読み込み
sudo systemctl reload rsyslog

logrotateの設定

# ログローテーションの設定
sudo less /etc/logrotate.conf
sudo less /etc/logrotate.d/

# 手動でローテーション実行
sudo logrotate -f /etc/logrotate.conf

効率的なログ分析のコツ

複数ファイルを一括検索

# /var/log以下のすべてのファイルから検索
sudo find /var/log -type f -exec grep -l "error" {} \;

# 最近のファイルのみを対象
sudo find /var/log -name "*.log" -mtime -1 -exec grep "error" {} \;

ログの統計情報

# エラーの出現回数
sudo grep -c "error" /var/log/messages

# 最も頻繁なエラー
sudo grep "error" /var/log/messages | sort | uniq -c | sort -nr | head -10

# IPアドレス別のアクセス統計
sudo awk '{print $1}' /var/log/apache2/access.log | sort | uniq -c | sort -nr | head -10

スクリプトでの自動化

#!/bin/bash
# ログ分析スクリプトの例

LOG_FILE="/var/log/messages"
YESTERDAY=$(date -d "yesterday" '+%b %d')

echo "=== 昨日のエラー統計 ==="
sudo grep "$YESTERDAY" "$LOG_FILE" | grep -i error | wc -l

echo "=== 最も多いエラー ==="
sudo grep "$YESTERDAY" "$LOG_FILE" | grep -i error | awk '{print $5}' | sort | uniq -c | sort -nr | head -5

echo "=== 新しいサービス起動 ==="
sudo grep "$YESTERDAY" "$LOG_FILE" | grep -i "started"

まとめ

Linuxでエラーログを確認するときの基本的な場所と方法をまとめます:

システムログの基本場所

  • CentOS/RHEL系/var/log/messages
  • Ubuntu/Debian系/var/log/syslog
  • 認証関係/var/log/auth.log(Ubuntu)、/var/log/secure(CentOS)
  • カーネル/var/log/dmesgdmesgコマンド

サービス別ログ

  • Apache/var/log/httpd/error_logまたは/var/log/apache2/error.log
  • Nginx/var/log/nginx/error.log
  • MySQL/var/log/mysqld.logまたは/var/log/mysql/error.log

効果的な確認方法

  • 基本確認sudo less ログファイル
  • エラー抽出sudo grep -i error ログファイル
  • リアルタイム監視sudo tail -f ログファイル
  • systemdサービスsudo journalctl -u サービス名

トラブルシューティングのコツ

  • 複数のログファイルを組み合わせて調査
  • 時間帯や日付での絞り込み
  • 設定ファイルでのログ場所確認
  • 権限や容量の問題に注意

これらのログを見れば、多くのトラブルの原因がわかります。ぜひトラブルシューティングの際に活用してください。

コメント

タイトルとURLをコピーしました