🙌

【Linux】【log】Linuxサーバ大活躍コマンド・ログ(運用保守編)

2025/02/21に公開

はじめに

業務でLinuxサーバを用いて保守運用や監視、設定の導入をすることが多かったため内容整理などを含めコマンドなどをまとめてみます。今回は、特に知識として持っておきたい運用・保守面で書いていきます。何かインシデントが起こった際に、「どこのログを見ればいいかわからない方」や、「どんなコマンド打てばいいかわからない」(僕。。。)みたいにならないように、していきましょう!
今回は、基本的なLinuxサーバを想定しています。

1. システム全体の基本ログ

インシデンとが起こった場合は、内容にもよりますが、基本的にシステム全体のログを見てみましょう。
まずはシステム全体の状態を確認するために、以下のログをチェックします。

ログファイル 内容
/var/log/messages または /var/log/syslog システム全体の主要なログ(サービスの異常、カーネルメッセージなど)
/var/log/dmesg 起動時やカーネルレベルのエラー(ハードウェア関連)

*カーネルとは、簡単にいうと「OSの中心にあるソフトウェア」です
場所がわかったところで、コマンドを確認していきましょう。

基本チェックコマンド

sudo tail -f /var/log/messages  # RHEL系
sudo tail -f /var/log/syslog    # Debian系

tailコマンドって?
tailコマンドは、ファイルの最終行を表示するコマンドです。最終行を表示するので、運用監視においては、単体ではあまり使いません。オプションやパイプライン(後述)を使います。
オプションについてはまず、-fオプションを覚えましょう

オプション 内容
-f リアルタイムで、ファイルが更新されたら内容を表示する。
しかし、これだけだと例えば、下記のように出力されます。
実行結果
Feb 21 12:34:56 server1 kernel: [12345.678901] eth0: Link is Up - 1Gbps Full Duplex
Feb 21 12:34:57 server1 systemd[1]: Starting Cleanup of Temporary Directories...
Feb 21 12:34:58 server1 systemd[1]: Finished Cleanup of Temporary Directories.
Feb 21 12:35:00 server1 sshd[4567]: Accepted password for user1 from 192.168.1.100 port 53210 ssh2
Feb 21 12:35:05 server1 sudo: user1 : TTY=pts/1 ; PWD=/home/user1 ; USER=root ; COMMAND=/bin/systemctl restart apache2
Feb 21 12:35:10 server1 kernel: [12350.123456] CPU1: Core temperature above threshold, throttling
Feb 21 12:35:15 server1 kernel: [12355.654321] CPU1: Core temperature below threshold

kernelのエラーだったり、sshdのエラーだったり 全然わかんない!! です。
そんな時に大活躍するのが、パイプラインを用いたgreoでの絞り込みです。

grepで絞り込み

sudo tail -f /var/log/messages | grep "sshd" # RHEL系
sudo tail -f /var/log/syslog | grep "sshd"   # Debian系

上記コマンドを実行すると、sshdのみのエラーをすいあげて表示することができます。
すると、長かったエラーがスッキリ。これで原因の切り分けが個別にできますね。

Feb 21 12:35:10 server1 kernel: [12350.123456] CPU1: Core temperature above threshold, throttling

このようにエラー解析で、ログを見るときは工夫していきましょう。


2. 認証・セキュリティ関連のログ

サーバへの不正アクセスや、権限関連の問題が疑われる場合は、認証ログを確認します。

ログファイル 内容
/var/log/secure(RHEL系) または /var/log/auth.log(Debian系) SSHログイン、sudo 使用履歴、不正アクセス
/var/log/faillog ログイン失敗履歴
/var/log/btmp 不正ログイン試行(lastb コマンドで解析)
/var/log/wtmp 正常なログイン履歴(last コマンドで解析)

ログイン関連のチェック

sudo cat /var/log/secure | grep "Failed"
sudo cat /var/log/auth.log | grep "Failed"
sudo lastb  # 不正ログイン履歴を確認

例えば、「システム担当の人から不正ログがないかを確認して!!」と言われたら、下記コマンドをたたきましょう。これはログインエラーがあった履歴を一覧化して出力します。

sudo lastb

実行結果

user1    test1    192.168.1.10   Fri Feb 21 12:34 - 12:35  (00:01)
root     test2    203.0.113.5    Fri Feb 21 10:15 - 10:16  (00:01)
admin    ssh:notty  45.33.12.34   Thu Feb 20 22:45 - 22:46  (00:01)

1列目のuser1などは、ログインしようとしたユーザ名。
2列目のtest1などは、ログインしようとした端末。(ssh接続時は、ssh:notty)のように表示されます。
3列目はログインしようとしたIPアドレス。
4列目はログイン失敗時の時間。
5列目は処理時間。
となっています。このコマンドかなり便利ですね。。


3. SSH・リモートアクセス関連

SSH接続の異常や不正なログイン試行を調べるには以下のログを確認します。

ログファイル 内容
/var/log/auth.log(Debian系) SSHログイン成功・失敗履歴
/var/log/secure(RHEL系) SSHログイン成功・失敗履歴
/var/log/sshd.log(一部環境) SSHデーモンの詳細ログ

SSH関連のチェック

sudo grep "sshd" /var/log/auth.log
sudo grep "Failed" /var/log/auth.log
sudo tail -f /var/log/secure | grep -i "failed"

sudo tail -f /var/log/secure | grep -i "failed"
を実行してみましょう。
実行結果

Feb 21 13:45:01 server1 sshd[1234]: Failed password for invalid user admin from 123.4.567.8 port 55221 ssh2
Feb 21 13:45:05 server1 sshd[1234]: Failed password for root from 123.456.7.89 port 54032 ssh2
Feb 21 13:45:10 server1 sshd[2345]: Failed password for user1 from 45.33.12.34 port 61234 ssh2

このように表示され、こちらもgrepを使ってうまく表示できてますね。どこからのアクセスでエラーがあったのかなど、原因追及していきましょう。


4. サーバーアプリケーション(Apache/Nginx/MySQLなど)

WebサーバやDBサーバが異常を起こしている場合、それぞれのログを確認します。
ログを見て、Apatchのが落ちているのか?まずGETとかできてる?などなど。

アプリケーション ログファイル
Apache /var/log/httpd/access_log(RHEL系) /var/log/apache2/access.log(Debian系)
Apache エラー /var/log/httpd/error_log(RHEL系) /var/log/apache2/error.log(Debian系)
Nginx /var/log/nginx/access.log(アクセスログ) /var/log/nginx/error.log(エラーログ)
MySQL/MariaDB /var/log/mysql.log または /var/log/mysqld.log
PostgreSQL /var/log/postgresql/postgresql.log

Apacheのエラーチェック

sudo tail -f /var/log/apache2/error.log

実行結果

[Wed Feb 21 12:45:10.123456 2025] [error] [client 192.168.1.10] File does not exist: /var/www/html/favicon.ico
[Wed Feb 21 12:46:15.456789 2025] [warn] [client 203.0.113.5] mod_rewrite: can't open RewriteLog file /var/log/httpd/rewrite.log
[Wed Feb 21 12:47:20.789012 2025] [error] [client 45.33.12.34] PHP Fatal error: Uncaught Error: Call to undefined function xyz() in /var/www/html/index.php on line 42

この結果を見るに、まず、iconが指定ディレクトリに存在しないからエラーが吐かれている→iconの資材を配置しよう。3行目のエラーだと、phpのxyzが実行できてないな→phpを見てみよう。など、エラーからわかりますね!
Apacheのアクセスログチェック

sudo tail -f /var/log/httpd/access_log

実行結果

192.168.1.10 - - [21/Feb/2025:12:45:10 +0000] "GET /index.html HTTP/1.1" 200 1024 "https://example.com" "Mozilla/5.0 (Windows NT 10.0)"
203.0.113.5 - - [21/Feb/2025:12:46:15 +0000] "POST /login.php HTTP/1.1" 403 512 "-" "curl/7.68.0"
45.33.12.34 - - [21/Feb/2025:12:47:20 +0000] "GET /nonexistent.html HTTP/1.1" 404 512 "-" "Mozilla/5.0 (Linux)"

ここからは、GETで200は返ってきているけど、POSTするときに403エラーが吐かれているな。一時的なものか?(次回のPOSTで正常に動いてればNW周りのエラーかもな。。)とかを考えます。


5. ハードウェア・ネットワーク関連

サーバがハードウェア障害やネットワーク問題を抱えている場合は、以下のログを確認します。

ログファイル 内容
/var/log/dmesg ハードウェア障害、カーネルレベルのエラー
/var/log/kern.log カーネル関連のエラーログ
/var/log/messages 一般的なハードウェアエラーやシステムログ
/var/log/maillog メールサーバ(Postfix など)のログ
/var/log/cron cronジョブの実行履歴

ネットワークエラーの確認

dmesg | grep -i "error"
sudo journalctl -u network.service --no-pager

ハードウェア障害の確認

dmesg | grep -iE 'error|fail|warn'

ハードは調べてみたもののここは勉強不足で、あまりわからないので、、、割愛します。


6. Firewalld / iptables / SELinux

ファイアウォール設定やSELinuxによる制限が問題を引き起こしている可能性もあります。

ログファイル 内容
/var/log/firewalld firewalld のログ(RHEL系)
/var/log/iptables.log iptablesのログ(環境による)
/var/log/audit/audit.log SELinuxの制限に関するログ

ファイアウォールログの確認

sudo cat /var/log/firewalld
sudo iptables -L -n -v #こちらを実行

実行結果

Chain INPUT (policy ACCEPT 1250 packets, 100M bytes)
 pkts bytes   target    prot opt in   out   source         destination
  500  40K    ACCEPT    all  --  eth0 *     192.168.1.0/24  0.0.0.0/0
   10  800    DROP      tcp  --  *    *     203.0.113.5     0.0.0.0/0    tcp dpt:22
  100  80K    ACCEPT    tcp  --  *    *     0.0.0.0/0       0.0.0.0/0    tcp dpt:80

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes   target    prot opt in   out   source         destination

Chain OUTPUT (policy ACCEPT 980 packets, 80M bytes)
 pkts bytes   target    prot opt in   out   source         destination

詳しい情報は割愛しますが、パケットやバイト数、インターフェースの内容などを確認できます。

SELinuxのエラーログ

sudo cat /var/log/audit/audit.log | grep AVC

7. まとめ

🔍 まず最初に確認するべきログ

  • システム全体のログ
    sudo tail -f /var/log/messages  # RHEL系
    sudo tail -f /var/log/syslog    # Debian系
    
  • 認証・セキュリティ関連
    sudo cat /var/log/secure | grep "Failed"
    sudo cat /var/log/auth.log | grep "Failed"
    sudo lastb  # 不正ログイン履歴を確認
    
  • SSHの異常ログ
    sudo tail -f /var/log/secure | grep -i "failed"
    
  • Webサーバの異常
    sudo tail -f /var/log/apache2/error.log
    sudo tail -f /var/log/httpd/access_log
    
  • ハードウェアエラー
    dmesg | grep -iE 'error|fail|warn'
    
  • ファイアウォール / SELinux
    sudo iptables -L -n -v #こちらを実行
    sudo cat /var/log/audit/audit.log | grep AVC
    

Discussion