・シェルコマンドとその挙動をなんとなく理解する
・ログの役割、どこにログがあるのかをなんとなく理解する
・ログを調査する方法をなんとなく理解する
シェル操作
シェル操作は、LinuxやmacOSなどのUnix系OSでの作業を効率化するための重要なスキルです。
シェルコマンド
以下に、いくつかの基本的なシェルコマンドを紹介します。
ls
ディレクトリの内容をリストします。オプションを追加することで、詳細な情報を表示したり、特定のパターンに一致するファイルだけを表示したりできます。
ls -l # 詳細な情報を表示
ls *.txt # .txtで終わるファイルだけを表示 cd
現在のディレクトリを変更します。
cd /path/to/directory # 指定したディレクトリに移動
cd .. # 一つ上のディレクトリに移動 cat
ファイルの内容を表示します。
cat filename grep
ファイルの中から特定のパターンに一致する行を検索します。
grep 'pattern' filename sort
ファイルの行をソートします。
sort filename uniq
連続する重複行を削除します。sortと組み合わせてよく使われます。
sort filename | uniq awk
ファイルの各行に対して特定の処理を行います。フィールド(列)の抽出や計算などに使われます。
awk '{print $1}' filename # 各行の1列目を表示 cut
ファイルの各行から特定のフィールドを抽出します。
cut -d':' -f1 filename # コロンで区切られた各行の1フィールド目を表示 wc
ファイルの行数、単語数、バイト数を数えます。
wc -l filename # ファイルの行数を表示 これらのコマンドは、パイプ (|) を使って組み合わせることができます。これにより、一連の処理を一行のコマンドで実行することができます。
例えば、ファイルから特定のパターンに一致する行を検索し、その行数を数えるには以下のようにします:
grep 'pattern' filename | wc -l これらは基本的なコマンドの一部ですが、これらを理解し使いこなせるようになると、シェルでの作業が大幅に効率化します。
ログの調査
ロギングの役割
ロギングはシステム開発において重要な役割を果たし、以下の目的で使用されます。
運用面:
- システムの動作状況確認・異常検知
- システムログを監視し、正常な動作や障害の早期検知する
- セキュリティ監視
- 不正アクセスやセキュリティ侵害を検出する
- パフォーマンスの監視と最適化
- ログデータを分析することにより、システムのボトルネックを特定する
- 監査
- 法的な要件を満たすために監査ログを維持する場合もある
開発面:
- トラブルシューティング
- アプリケーションの問題やエラーの原因を特定し、バグを修正する
- デバッグログやスタックトレースにより開発中の問題を特定する
- 履歴とユーザー行動の分析
- システムの操作と変更の履歴を記録して、問題発生時に変更の影響を特定する
- 履歴からユーザー行動を分析して、改善や新規機能開発に利用する
どういう時にログの調査をするの?
- エラーまたは例外が発生したとき
- プログラムが予期しない動作をしたり、エラーをスローした場合、ログを調査することで問題の原因を特定しやすくなります。
- システムのパフォーマンスが低下したとき
- ログにはシステムの動作に関する詳細な情報が含まれているため、パフォーマンスの問題を特定するのに役立ちます。
- セキュリティ違反が疑われるとき
- 不正アクセスやデータ侵害の試みがあった場合、ログを調査することで攻撃の詳細や範囲を理解することができます。
- システムの動作を監視または分析するとき
- ログはシステムの動作に関する貴重な情報を提供します。これを利用して、システムの使用状況を理解したり、将来の問題を予測したりすることができます。
調査方法
ログの調査には様々なコマンドや方法がありますが、一般的によく使われるものをいくつか紹介します。
catコマンド
cat /path/to/your/logfile.log サンプル
06:47:18 PM ❯ cat /path/to/your/logfile.log
2024-04-10 21:21:50,848:DEBUG:Data updated.
2024-04-11 02:04:14,362:INFO:User logged in.
2024-04-11 05:07:31,008:DEBUG:Server started.
2024-04-11 06:33:54,502:ERROR:User logged in.
2024-04-11 13:28:24,182:INFO:Error occurred.
2024-04-11 17:14:55,535:WARNING:Error occurred.
2024-04-11 18:14:11,176:DEBUG:Data updated.
2024-04-11 22:35:59,172:WARNING:Data updated.
2024-04-12 02:29:46,826:INFO:Data updated.
2024-04-12 16:45:25,465:DEBUG:Data updated.
2024-04-13 01:24:23,894:CRITICAL:Server started.
2024-04-13 07:23:47,616:WARNING:Server shut down.
2024-04-14 00:40:12,622:CRITICAL:Data updated.
2024-04-14 00:10:00,845:ERROR:User logged in.
2024-04-14 03:27:53,526:CRITICAL:Server shut down.
2024-04-14 06:29:58,826:ERROR:Error occurred.
2024-04-14 10:33:27,149:ERROR:Error occurred.
2024-04-14 10:21:07,091:DEBUG:Server shut down.
2024-04-14 12:14:40,898:ERROR:Server started.
2024-04-14 18:56:47,926:CRITICAL:Server started.
2024-04-14 20:00:19,939:DEBUG:Data updated.
(省略) lessまたはmoreコマンド
ファイルの内容をページ単位で表示します。大きなログファイルを扱う際に便利です。
- 次ページへ
f - 前ページへ
b - 終了
q
less /path/to/your/logfile.log サンプル
2024-04-10 21:21:50,848:DEBUG:Data updated.
2024-04-11 02:04:14,362:INFO:User logged in.
2024-04-11 05:07:31,008:DEBUG:Server started.
2024-04-11 06:33:54,502:ERROR:User logged in.
2024-04-11 13:28:24,182:INFO:Error occurred.
2024-04-11 17:14:55,535:WARNING:Error occurred.
2024-04-11 18:14:11,176:DEBUG:Data updated.
2024-04-11 22:35:59,172:WARNING:Data updated.
2024-04-12 02:29:46,826:INFO:Data updated.
2024-04-12 16:45:25,465:DEBUG:Data updated.
2024-04-13 01:24:23,894:CRITICAL:Server started.
2024-04-13 07:23:47,616:WARNING:Server shut down.
2024-04-14 00:40:12,622:CRITICAL:Data updated.
2024-04-14 00:10:00,845:ERROR:User logged in.
2024-04-14 03:27:53,526:CRITICAL:Server shut down.
2024-04-14 06:29:58,826:ERROR:Error occurred.
2024-04-14 10:33:27,149:ERROR:Error occurred.
2024-04-14 10:21:07,091:DEBUG:Server shut down.
2024-04-14 12:14:40,898:ERROR:Server started.
2024-04-14 18:56:47,926:CRITICAL:Server started.
2024-04-14 20:00:19,939:DEBUG:Data updated.
2024-04-14 21:06:51,411:CRITICAL:Error occurred.
2024-04-14 23:40:30,107:CRITICAL:Error occurred.
2024-04-15 03:08:37,584:INFO:Server shut down.
2024-04-15 05:49:40,571:DEBUG:Data updated.
2024-04-15 07:24:21,474:ERROR:Error occurred.
2024-04-15 10:20:12,164:ERROR:Error occurred.
2024-04-15 11:16:33,088:ERROR:Error occurred.
2024-04-15 13:48:14,379:CRITICAL:Data updated.
2024-04-15 16:01:35,967:WARNING:Server started.
2024-04-15 19:07:29,784:WARNING:Server shut down.
2024-04-16 07:42:39,863:DEBUG:Error occurred.
2024-04-16 13:04:46,559:ERROR:Data updated.
2024-04-16 19:23:07,352:CRITICAL:Data updated.
2024-04-16 21:15:48,028:WARNING:Server started.
2024-04-16 22:17:52,562:CRITICAL:Server shut down.
2024-04-16 23:56:22,944:DEBUG:Data updated.
2024-04-17 00:14:32,004:INFO:User logged in.
2024-04-17 01:03:48,602:INFO:User logged in.
2024-04-17 07:10:57,395:WARNING:Server shut down.
2024-04-17 11:51:09,895:INFO:Server shut down.
2024-04-17 12:43:24,654:ERROR:Data updated.
2024-04-17 15:27:05,772:WARNING:Server shut down.
2024-04-17 23:54:46,696:CRITICAL:Data updated.
2024-04-18 00:20:22,123:DEBUG:User logged in.
2024-04-18 01:43:21,791:WARNING:Data updated.
2024-04-18 01:32:41,437:INFO:Server shut down.
2024-04-18 15:02:43,956:ERROR:Server started.
2024-04-18 18:39:13,442:WARNING:Data updated.
2024-04-19 00:15:56,513:DEBUG:Server started.
2024-04-19 04:34:00,047:INFO:Server shut down.
2024-04-19 12:47:07,388:INFO:User logged in.
2024-04-19 17:43:51,512:ERROR:User logged in.
2024-04-19 22:08:35,703:WARNING:Error occurred.
2024-04-19 23:47:54,149:INFO:Server started.
2024-04-20 03:51:22,082:INFO:Server started.
2024-04-20 09:34:00,985:CRITICAL:Error occurred.
2024-04-20 12:10:55,888:WARNING:User logged in.
2024-04-20 19:04:12,443:DEBUG:Server started.
: tailコマンド
ファイルの末尾部分を表示します。最新のログエントリを見るのに便利です。fオプションを付けると、ログの更新をリアルタイムで追跡できます。
tail /path/to/your/logfile.log
tail -f /path/to/your/logfile.log サンプル
06:51:41 PM ❯ tail /path/to/your/logfile.log
2024-05-09 23:35:50,716:INFO:User logged in.
2024-05-10 01:51:31,144:INFO:Server started.
2024-05-10 03:54:00,543:CRITICAL:Server started.
2024-05-10 03:36:55,854:INFO:User logged in.
2024-05-10 04:46:01,922:DEBUG:Server shut down.
2024-05-10 04:40:37,198:CRITICAL:User logged in.
2024-05-10 05:46:55,919:INFO:Server started.
2024-05-10 09:21:26,962:CRITICAL:Server shut down.
2024-05-10 13:59:52,250:DEBUG:Error occurred.
2024-05-10 15:27:01,975:INFO:Error occurred. grep
ファイルから特定のパターンを含む行を検索します。エラーメッセージや特定のイベントを探すのに便利です。
grep "Error" /path/to/your/logfile.log サンプル
06:51:48 PM ❯ grep "Error" ./path/to/your/logfile.log
2024-04-11 13:28:24,182:INFO:Error occurred.
2024-04-11 17:14:55,535:WARNING:Error occurred.
2024-04-14 06:29:58,826:ERROR:Error occurred.
2024-04-14 10:33:27,149:ERROR:Error occurred.
2024-04-14 21:06:51,411:CRITICAL:Error occurred.
2024-04-14 23:40:30,107:CRITICAL:Error occurred.
2024-04-15 07:24:21,474:ERROR:Error occurred.
2024-04-15 10:20:12,164:ERROR:Error occurred.
2024-04-15 11:16:33,088:ERROR:Error occurred.
2024-04-16 07:42:39,863:DEBUG:Error occurred.
2024-04-19 22:08:35,703:WARNING:Error occurred.
2024-04-20 09:34:00,985:CRITICAL:Error occurred.
2024-04-21 18:26:42,907:DEBUG:Error occurred.
2024-04-22 14:42:17,898:DEBUG:Error occurred.
2024-04-23 06:15:02,705:INFO:Error occurred.
2024-04-24 16:06:27,650:INFO:Error occurred.
2024-04-24 20:02:17,373:INFO:Error occurred.
2024-04-25 22:50:56,753:CRITICAL:Error occurred.
2024-04-27 07:13:48,367:INFO:Error occurred.
2024-04-28 19:27:06,259:INFO:Error occurred.
2024-04-30 03:35:34,456:ERROR:Error occurred.
2024-05-01 20:09:32,305:CRITICAL:Error occurred.
2024-05-02 01:10:53,802:CRITICAL:Error occurred.
2024-05-02 13:07:20,425:DEBUG:Error occurred.
2024-05-02 15:10:56,526:INFO:Error occurred.
2024-05-02 16:33:33,092:INFO:Error occurred.
2024-05-03 14:37:21,560:CRITICAL:Error occurred.
2024-05-03 16:36:30,357:DEBUG:Error occurred.
2024-05-04 18:57:15,489:INFO:Error occurred.
2024-05-05 12:03:35,334:INFO:Error occurred.
2024-05-05 21:28:52,408:WARNING:Error occurred.
2024-05-08 00:03:29,525:DEBUG:Error occurred.
2024-05-09 19:50:31,399:WARNING:Error occurred.
2024-05-10 13:59:52,250:DEBUG:Error occurred.
2024-05-10 15:27:01,975:INFO:Error occurred.
awkまたはsedコマンド
テキストの処理や変換を行います。ログの特定の部分を抽出したり、フォーマットを変更したりするのに使います。
awk '/Error/ {print $1, $2}' /path/to/your/logfile.log
sed 's/Error/ERROR/g' /path/to/your/logfile.log サンプル
06:53:08 PM ❯ awk '/Error/ {print $1, $2}' /path/to/your/logfile.log
2024-04-11 13:28:24,182:INFO:Error
2024-04-11 17:14:55,535:WARNING:Error
2024-04-14 06:29:58,826:ERROR:Error
2024-04-14 10:33:27,149:ERROR:Error
2024-04-14 21:06:51,411:CRITICAL:Error
2024-04-14 23:40:30,107:CRITICAL:Error
2024-04-15 07:24:21,474:ERROR:Error
2024-04-15 10:20:12,164:ERROR:Error
2024-04-15 11:16:33,088:ERROR:Error
2024-04-16 07:42:39,863:DEBUG:Error
2024-04-19 22:08:35,703:WARNING:Error
2024-04-20 09:34:00,985:CRITICAL:Error
2024-04-21 18:26:42,907:DEBUG:Error
2024-04-22 14:42:17,898:DEBUG:Error
2024-04-23 06:15:02,705:INFO:Error
2024-04-24 16:06:27,650:INFO:Error
2024-04-24 20:02:17,373:INFO:Error
2024-04-25 22:50:56,753:CRITICAL:Error
2024-04-27 07:13:48,367:INFO:Error
2024-04-28 19:27:06,259:INFO:Error
2024-04-30 03:35:34,456:ERROR:Error
2024-05-01 20:09:32,305:CRITICAL:Error
2024-05-02 01:10:53,802:CRITICAL:Error
2024-05-02 13:07:20,425:DEBUG:Error
2024-05-02 15:10:56,526:INFO:Error
2024-05-02 16:33:33,092:INFO:Error
2024-05-03 14:37:21,560:CRITICAL:Error
2024-05-03 16:36:30,357:DEBUG:Error
2024-05-04 18:57:15,489:INFO:Error
2024-05-05 12:03:35,334:INFO:Error
2024-05-05 21:28:52,408:WARNING:Error
2024-05-08 00:03:29,525:DEBUG:Error
2024-05-09 19:50:31,399:WARNING:Error
2024-05-10 13:59:52,250:DEBUG:Error
2024-05-10 15:27:01,975:INFO:Error これらのコマンドはパイプ(|)を使って組み合わせることができ、より複雑な検索やフィルタリングを行うことができます。
例えば、grepでエラーメッセージを検索し、tailで最新のものだけを表示する、といったことが可能です。
grep "Error" /path/to/your/logfile.log | tail サンプル
06:52:25 PM ❯ grep "Error" /path/to/your/logfile.log | tail
2024-05-02 16:33:33,092:INFO:Error occurred.
2024-05-03 14:37:21,560:CRITICAL:Error occurred.
2024-05-03 16:36:30,357:DEBUG:Error occurred.
2024-05-04 18:57:15,489:INFO:Error occurred.
2024-05-05 12:03:35,334:INFO:Error occurred.
2024-05-05 21:28:52,408:WARNING:Error occurred.
2024-05-08 00:03:29,525:DEBUG:Error occurred.
2024-05-09 19:50:31,399:WARNING:Error occurred.
2024-05-10 13:59:52,250:DEBUG:Error occurred.
2024-05-10 15:27:01,975:INFO:Error occurred. これらのコマンドは基本的なもので、具体的な使用方法はログの内容や調査の目的によります。
また、これらのコマンドはローカルのシステムでログファイルに直接アクセスできる場合に使用します。
システムログを調査しよう
- 主なログファイルは
/var/log配下にあるので管理者権限が必要
自分のサーバーでの作業
# ルートユーザーになる
sudo su -
cd ..
cd /var/log
ls -l 主なシステムログファイルの種類(AL2023)
/var/log/にあります
| ファイル・ディレクトリ | 概要 | 形式 | 専用コマンド |
|---|---|---|---|
journal | システムログ全般 | バイナリ | journalctl |
wtmp | ログイン成功の記録 | バイナリ | last |
btmp | 失敗したログイン試行の記録 | バイナリ | lastb |
lastlog | 各ユーザーの最終ログイン情報 | バイナリ | lastlog |
audit | システムの監査ログ(auditd) | テキスト | - |
dnf.log | dnfによるインストール・アップデートのログ | テキスト | - |
chrony | 時刻同期(chronyd)のログ | テキスト | - |
cloud-init.log | インスタンス初期化(cloud-init)のログ | テキスト | - |
ログファイルにはそのまま
catで読めるテキスト形式と、catすると文字化けするバイナリ形式があります。 迷ったら
fileコマンドで確認できます。 - 結果が
dataと出たらバイナリ → 専用コマンドで開く - 結果が
~textと出たらテキスト →cat/less/grepで読める
[ec2-user@example-server ~]$ file /var/log/wtmp /var/log/dnf.log
/var/log/wtmp: data
/var/log/dnf.log: ASCII text ハンズオン ログイン情報を調べてみる
- 自分がサーバに初めてログインした日時はいつ?
ヒント
# rootユーザーになっておく $ sudo su - # wtmpはバイナリ形式で保存されており、普通に開くと文字化けするのでlastコマンドで開く $ last -f /var/log/wtmp ec2-user pts/0 203.0.113.10 Fri Jun 5 04:12 still logged in ec2-user pts/2 203.0.113.10 Fri Jun 5 03:09 - 03:48 (00:39) ec2-user pts/2 203.0.113.10 Fri Jun 5 03:03 - 03:09 (00:05) ec2-user pts/2 203.0.113.10 Fri Jun 5 03:00 - 03:02 (00:02) ec2-user pts/0 203.0.113.10 Fri Jun 5 01:45 - 03:58 (02:13) ec2-user pts/0 203.0.113.10 Fri Jun 5 01:38 - 01:38 (00:00) ec2-user pts/0 203.0.113.10 Fri Jun 5 01:29 - 01:29 (00:00) - これまでにサーバにログインした接続元のIPアドレスのみを、重複無しで表示してください
ヒント
# wtmpをlast -iで開くと3列目が接続元IP。reboot等の行を除いて一覧化 last | grep "pts" | awk '{print $3}' | sort | uniq # 結果 [root@example-server log]# last | grep "pts" | awk '{print $3}' | sort | uniq 203.0.113.10