【Linux】【log】Linuxサーバ大活躍コマンド・ログ(運用保守編)
はじめに
業務で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