システム監視

はじめに

第11章はじめに

このビデオでは、この章で扱うコンテンツの概要を簡単に説明します。


学習目標
この章の終わりまでに、次のことができるようになります。

インベントリの概念を理解し、利用可能なシステム監視ツールに精通します。
システムがログ ファイルを保存する場所を理解し、最も重要なファイルを調べることができます。
/procと/sys疑似ファイルシステムを使用できます。
sarを使用して、システムの活動状態とパフォーマンス データを収集し、人が読める形でレポートを作成できます。


システム監視

利用可能な監視ツール
Linuxディストリビューションには、パフォーマンスとプロファイリングに関する多くの標準ツールが既にインストールされています。それらの多くは、他のUNIX系のオペレーティング システムでもよく知られていますが、一部はLinux専用に開発されました。

これらのツールのほとんどは、マウントされた疑似ファイルシステム、特に/procと/sysを使用します。これらは両方とも、ファイルシステムとカーネル構成を調べる章ですでに説明しました。ここでも両方を見ていきます。

詳細の多くを非表示にするグラフィカル システム モニタも多くありますが、このコースではコマンド ライン ツールのみを見て行きます。

主なユーティリティのいくつかを詳細に見ていく前に、種類別に分類された以下の要約を見ることにします。一部のユーティリティには重複する範囲があることに注意してください。特定のトピックに焦点を当てたこの後の章でも、これらの表を再度取り上げます。

表：プロセスと負荷の監視ユーティリティ

ユーティリティ　内容　パッケージ
top　動的に更新、プロセスの活動状況の表示　procps
uptime　システムの稼働時間と平均負荷の表示　　procps
ps 　プロセスに関する詳細情報の表示　　procps
pstree　プロセスとその親子関係のツリー表示　　psmisc（またはpstree）
mpstat　マルチ プロセッサの使用量の表示　sysstat
iostat 　CPU使用率とI/O統計情報の表示　sysstat
sar　システムのアクティビティに関する情報の収集・表示　sysstat
numastat 　NUMA（Non-Uniform Memory Architecture）に関する情報の表示　numactl
strace　プロセスが行うすべてのシステムコールに関する情報を表示　strace
 

表：メモリ監視ユーティリティ

ユーティリティ　内容　パッケージ
free　メモリ使用量の概要の表示　procps
vmstat　　動的に更新される、仮想メモリ統計とブロックI/Oの詳細情報　　procps
pmap　プロセスのメモリ マップの表示　procps
 

表：I/O 監視ユーティリティ

ユーティリティ　内容　パッケージ
iostat 　CPU使用率とI/O統計情報の表示　sysstat
sar　システムのアクティビティに関する情報の収集・表示　sysstat
vmstat　　動的に更新される、仮想メモリ統計とブロックI/Oの詳細情報　　procps
 

表：ネットワーク監視ユーティリティ

ユーティリティ　内容　パッケージ
netstat　ネットワーク関連のさまざまな統計情報の表示　netstat
iptraf　ネットワーク インターフェイスに関する情報の収集　iptraf
tcpdump　ネットワーク パケットとトラフィックの詳細な分析情報の表示　tcpdump
wireshark　詳細なネットワーク トラフィック分析の表示　wireshark


ログ ファイル
システム ログ ファイルは、監視とトラブルシューティングに不可欠です。Linuxでは、これらのメッセージを/var/logの下のさまざまなファイルで見ることができます。正確な名前はLinuxディストリビューションによって異なります。

メッセージ処理の基本的な制御は、多くのUNIX系のオペレーティング システムに共通の、syslogd（最近のシステムでは通常rsyslogd）デーモンによって制御されます。新しいsystemdベースのシステムでは、syslogdの代わりにjournalctlを使用できますが、通常はsyslogdを保持しておいてjournalctlと連携します。

重要なメッセージは、ログ ファイルだけでなく、システム コンソール ウィンドウにも送信されます。 Xを実行していない場合、または仮想端末にいる場合は、そこに直接表示されます。さらに、これらのメッセージは/var/log/messages（またはUbuntuの/var/log/syslog）にコピーされますが、Xを実行している場合は、表示するためにいくつかの手順を実行する必要があります。

次を実行すると、新しいメッセージを新しい行に継続的に表示できます。

$ sudo tail -f /var/log/messages or /var/log/syslog

または

$ dmesg -w

これらはカーネル関連のメッセージのみを表示します。

ターミナル ウィンドウでログ メッセージを表示する以外に、グラフィカル インターフェイスを使用してログ メッセージを表示できます。

GNOMEデスクトップでは、デスクトップ メニューのSystem -> Administration -> System Log、またはApplications -> System Tools -> Log File Viewerをクリックしても、メッセージにアクセスできます。他のデスクトップにも同様のリンクがあります。

表：/var/logの下にある重要なログ ファイル

ファイル　　内容
boot.log　システム ブート メッセージ
dmesg　ブート以降に保存されるカーネル メッセージ（カーネル メッセージ  バッファの現在の内容を表示するには、dmesg と入力します。
messagesまたはsyslog　すべて重要なシステム メッセージ
secure 　セキュリティ関連のメッセージ
 
ログ ファイルの肥大化をふせぐために、logrotateプログラムが定期的に実行されます。（デフォルトでは）ログ ファイルの４世代のコピーを保持します（オプションで圧縮）。logrotateの実行内容は/etc/logrotate.confに設定されています。


疑似ファイルシステム：/procと/sys 
疑似ファイルシステムである/procと/sysには、システムに関する多くの情報が含まれています。さらに、これらのディレクトリ ツリーのエントリの多くは書き込み可能であり、システムの動作を変更するために使用できます。ほとんどの場合、これにはrootユーザー権限が必要です。

これらはすべてメモリ内に存在する疑似ファイルシステムです。システムが実行されていないときにディスク パーティションを見ると、マウント ポイントとして使用される空のディレクトリのみが存在します。

さらに、表示される情報は、表示されるときにのみ収集されます。エントリを更新するための一定または定期的なポーリングはありません。

/proc疑似ファイルシステムには長い歴史があります。他のUNIX系オペレーティング システムにルーツがあり、元々、システム上のプロセスに関する情報を表示するために開発されました。各プロセスは/procに独自のサブディレクトリを持ち、すべての重要プロセスの特性をここで入手できます。

時がたつにつれて、割り込み、メモリ、ネットワークなどのシステム プロパティに関する多くの情報が、多少無秩序な方法ではありますが、含まれるようになりました。今も広く使用されており、私たちも頻繁に参照しています。

調整可能なシステム パラメータのほとんどは、/proc/sysをルートとするサブディレクトリ ツリーにあります。

ls -lF /proc/sys コマンドと出力のスクリーンショット

これらの各サブディレクトリには、情報だけでなく（注意が必要ですが）調節用のノブが含まれています。

abi/
アプリケーションのバイナリ情報を含むファイルがあります。めったに使われません。
debug/
デバッグ パラメータがあります。現時点では、例外レポートの一部の制御のみです。
dev/
cdrom、scsi、raid、parportのサブディレクトリを含むデバイス パラメータがあります。
fs/
quota、使用されているファイル ハンドル、最大値、inode、ディレクトリ情報などを含むファイルシステム パラメータがあります。
kernel/
カーネル パラメータがあります。ここには多くの重要なエントリがあります。
net/
ネットワーク パラメータがあります。ipv4、netfilterなどのサブディレクトリがあります。
vm/
仮想メモリ パラメータがあります。ここには多くの重要なエントリがあります。

パラメータの表示と変更は、簡単なコマンドで実行できます。たとえば、システムで許可されているスレッドの最大数は、以下を調べることで確認できます。

$ ls -l /proc/sys/kernel/threads-max
$ cat /proc/sys/kernel/threads-max
129498

そして、値を変更し、変更が有効になったことを確認するには以下を実行します。

$ sudo bash -c 'echo 100000 > /proc/sys/kernel/threads-max'
$ cat /proc/sys/kernel/threads-max
100000

sysctlでも、同じ効果を得られることを思い出してください。

$ sudo sysctl kernel.threads-max=100000

値の表示は通常のユーザーでも実行できますが、値を変更するにはスーパーユーザー特権が必要です。

/sys疑似ファイルシステムは、統合デバイス モデルの不可欠な部分です。概念的にはデバイス ツリーに基づいており、それをたどってバス、デバイスなどの情報を見ることができます。また、カーネル モジュールのように、デバイスに厳密に関連する場合とそうでない場合がある情報も含まれています。

/procよりも構造が厳密に定義されています。ほとんどのエントリには1行のテキストしか含まれていませんが、例外があります。カーネルのバージョン間で内容が異なることがわかっている場合は、複数のエントリがあります。そのため、インターフェイスの不変性の向上が望まれています。

/procと/sysの両方に表示エントリがあるシステム プロパティがあります。広く使用されているシステム ユーティリティとの互換性のために、古いフォームは徐々に廃止されています。

sysfs仮想ファイルシステムのサポートは最新のすべてのカーネルに組み込まれており、/sysの下にマウントする必要があります。ただし、統合デバイス モデルでは、機能させるためにsysfsをマウントする必要はありません。

カーネル3.18を使用して何があるかを見てみましょう。このファイルシステムのレイアウトは、変化する可能性があるので注意してください。トップ レベルのディレクトリで以下のコマンドを実行すると、

$ ls -F /sys
block/ bus/ class/ dev/ devices/ firmware/ fs/ kernel/ module/ power/

基本的なデバイス ツリーが表示されます。デバイス モデルsysfsの実装には、厳密にはハードウェアに関連していない情報も含まれます。

ネットワーク デバイスを調べるには以下のコマンドを実行します。

ls -lF /sys/class/net

ls -lF /sys/class/net コマンドと出力のスクリーンショット

イーサネット カードを見ると、スクリーンショットが表示されます。sysfsは、行ごとに1つのテキスト値を持つことになっていますが、これは厳密に強制されてはいません。

ls -F /sys/class/net/ens33/ コマンドと出力のスクリーンショット

最初のネットワーク インターフェイスの基盤となるデバイスとドライバは、デバイスと（間もなく表示される）ドライバ のシンボリックリンクを通して追跡できます。このスクリーンショットでは、最初のイーサネット カードに対応するディレクトリに何があるかを示しています。

sysfsで利用できるすべての情報を確認するには、それを調べる必要があります。


sar
sar は、Systems Activity Reporterの略です。システムの稼働状況とパフォーマンス データを収集し、人が読める形のレポートを作成するための汎用ツールです。

Linuxシステムでは、sarのバックエンドはsadc（system activity data collector）であり、実際に統計情報を蓄積します。/var/log/saディレクトリに情報を保存します。デフォルトの実行頻度は毎日ですが、変更可能です。データ収集はコマンド ラインから開始できます。通常の定期的な収集は/etc/cron.d/sysstatに保存されているcronジョブとして開始されます。

そしてsarはこのデータを（デフォルトの場所から、または-fオプションで指定されたファイルから）読み込み、レポートを作成します。

sarは次の構文で実行します。

$ sar [ options ] [ interval ] [ count ]

上記では、レポートはinterval秒後に合計count回繰り返されます（デフォルトは1）。オプションがなければ、CPU使用率に関するレポートを提供します。

sarの使用例

表：sarのオプション

オプション　　内容
-A　　ほぼすべての情報を取得
-b 　　I/Oと転送速度の統計情報の取得（iostatと同じ）
-B　　ページフォールトを含むページング統計情報の取得
-d　　ブロック デバイスのアクティビティ情報の取得（iostat -xと同じ）
-n　　ネットワーク統計情報の取得
-P 　　CPUごとの統計情報の取得（sar -P ALL 3と同じ）
-q　　キューの長さ（実行キュー、プロセス、スレッド）の取得
-r　　メモリ使用の統計情報の取得
-S   スワップ使用の統計情報の取得
-u 　　CPU使用率の取得（デフォルト）
-v 　　inodeとファイルおよびファイル ハンドルに関する統計情報の取得
-w　　コンテキスト スイッチの統計情報の取得
-W　　スワップ統計情報、1秒あたりに入出力したページ情報の取得
-f 　　-oオプションで作成された指定ファイルから情報を抽出
-o　　読み取り値を保存するファイルを指定。後で-fオプションで読み取る
 
たとえば、ここのスクリーンショットでは、ページング統計情報を見て、そのあと、I/Oと転送速度の統計情報を見ています。

ksarプログラムは、sarデータのグラフを生成するためのJavaベースのユーティリティです。ksarのウェブ ページからダウンロードできます。

sarを使用してI/O統計情報を取得する

デモ：利用可能なシステム監視ツール

このビデオは、いくつかのシステム監視ツールの使用方法を示しています。


演習

課題 11.1: stress または stress-ng を使う

🚩
以下のPDFドキュメントに埋め込まれた外部URLにアクセスする場合は、常に右クリックして新しいタブまたはウィンドウで開いてください。直接クリックしてURLを開こうとすると、コース ウィンドウ／タブが閉じます。

Exercise 11.1: Using stress or stress-ng

stress is a C language program written by Amos Waterland at the University of Oklahoma, licensed under the GPL v2.  It isdesigned to place a configurable amount of stress by generating various kinds of workloads on the system.

stress-ng is essentially an enhanced version of stress, which respects its symptoms and options.  It is actively maintained: see https://wiki.ubuntu.com/Kernel/Reference/stress-ng

All major distributions should have stress-ng in their packaging systems However, for RHEL/CentOS it needs to be obtained from the EPEL repository.  As of this writing there is no package in the EPEL 8 repository, but you can install the one from EPEL 7 without a problem.

Installing from Source
If you are lucky you can installstressorstress-ngdirectly from your distribution’s packaging system.
Otherwise,  the  source  for stress-ng can  be  obtained using git from https://kernel.ubuntu.com/git/cking/stress-ng.git/. (Or you can download a tarball and use that.)To download, compile, and install:
$ git clone git://kernel.ubuntu.com/cking/stress-ng.git
$ cd stress-ng$ make
$ sudo make install

Once installed, you can do:
$ stress-ng --help
for a quick list of options, or
$ info stress-ng
for more detailed documentation.
As an example, the command:
$ stress-ng -c 8 -i 4 -m 6 -t 20s
will:
•  Fork off 8 CPU-intensive processes, each spinning on asqrt()calculation.
•  Fork off 4 I/O-intensive processes, each spinning onsync().
•  Fork off 6 memory-intensive processes, each spinning on malloc(), allocating 256 MB by default.  The size can bechanged as in --vm-bytes 128M.
•  Run the stress test for 20 seconds.

After installing stress-ng,  you may want to start up your system’s graphical system monitor,  which you can find on your application menu, or run from the command line, which is probably gnome-system-monitor or ksysguard.

Now begin to put stress on the system.  The exact numbers you use will depend on your system’s resources, such as the number of CPU’s and RAM size.

For example, doing
$ stress-ng -m 4 -t 20s
puts only a memory stressor on the system.
Play with combinations of the switches and see how they impact each other.  You may find the stress-ng program useful tosimulate various high load conditions.


知識チェック

「第11章 - システム監視」を完遂しました。おめでとうございます。このクイズに答えて、これまでに学んだ概念の理解度をチェックしてください。

クイズ開始

問題 11.1
プロセスがどのようにオペレーティング システムにリクエストを行っているかを表示する、トレースとデバッグのツールは次のうちどれですか？
A. netstat
B. top
C. mpstat
D. strace

問題 11.2
システムが実行している時間を表示するツールは、次のうちどれですか？

A. strace
B. uptime
C. tcpdump
D. numastat

質問11.3
プロセスの活動をインタラクティブにモニタするツールは次のうちどれですか？

A. top
B. wireshark
C. ps
D. vmstat

問題 11.4
メモリ使用量の概要を表示するツールは、次のうちどれですか。

A. uptime
B. sar
C. free
D. pmap

問題 11.5
/procでプロセスに関連しない情報は何ですか？

A. カーネル コマンド ライン
B. CPUモデル情報
C. メモリ使用率の統計
D. ディスク パーティション情報
E. 上記すべて



