WhaTap Blog

Linuxのコマンドを利用したシステムモニタリング

2018年11月7日

Linux_monitoring

システムのパフォーマンスを測定するための項目は、CPU、Memory、Disk、Trafficなどがあります。Linuxの環境では、このようなリソースを確認することができる様々なコマンドをサポートしています。

それぞれのコマンドを使用してシステムをモニタリングする方法について説明します。

uname:システムとカーネルの情報

Unameコマンドでシステムとカーネルの情報を確認することができます。 -aオプションを使用すると,すべての情報を確認することができます。

Linux_monitoring_uname

それぞれの意味は次のとおりです。

  • [Linux] : カーネル名
  • [Localhost] : ホスト名
  • [3.13.0-24-generic] : カーネルリリース情報
  • [#47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014] : カーネルのバージョン
  • [x86_64] : マシンのハードウェアの名前
  • [x86_64] : プロセッサの種類
  • [x86_64] : ハードウェアプラットフォーム
  • [GNU/Linux] : オペレーティングシステム(OS)

使用可能なオプションは、以下の通りです。

    $ uname --help
  • [-a, --all] : 全体の内容を表示
  • [-s, --kernel-name] : カーネル名を表示
  • [-n, --nodename] : ネットワークノードのホスト名を表示
  • [-r, --kernel-release] : カーネルリリース情報を表示
  • [-v, -kernel-version] : カーネルのバージョンを表示
  • [-m, --machine] : マシンのハードウェアの名前を表示
  • [-p, --processor] : プロセッサの種類や「unknown」を表示
  • [-i,- -hardware-platform ] : ハードウェアプラットフォームまたは「unknown」を表示
  • [-o, --operating-system ] : オペレーティングシステム「unknown」を表示

ifconfig: ネットワークの基本モニタリング

システムに設定されたネットワークインタフェースの状態を確認し、変更することができます。

Linux_monitoring_ifconfig

ifconfigコマンドを使用した時に出る意味を見てみましょう。

  • [eth0, eth1] : LANカードと呼ばれる有線ネットワークインタフェースです。上記の例では、LANカードが2つある場合です。
  • [lo] : ループバックインターフェースで、自分自身との通信に使用する仮想デバイスです。IPが127.0.0.1です。 IPアドレスは、サーバーに一つずつ付与されるのではなく、ネットワークインタフェースに割り当てられているので、各ネットワークインターフェイスごとに異なるIPアドレスを持っています。
  • [HWaddr] : ネットワークインタフェースのハードウェアアドレス(MAC Address)
  • [inetaddr] : ネットワークインタフェースに割り当てられたIPアドレス
  • [Bcast] : ブロードキャストアドレス
  • [Mask] : ネットマスク
  • [MTU] : ネットワークの最大転送ユニット(Maxium Transfer Unit)
  • [RX packets] : 受信したパケットの情報
  • [TX packets] : 送信されるパケットの情報
  • [collision] : 衝突されたパケットの数
  • [Interrupt] : ネットワークインタフェースが使用する割り込み番号

Ifconfigコマンドでは、プライベートIP (private ip)しか確認されていません。グロバールIP(Public IP)を知りたい場合はCurlをインストールして確認することができます。

$ curl ifconfig.me

top: オペレーティングシステムの操作履歴のモニタリング

ウィンドウのタスクマネージャと同様の機能をするコマンドです。

プロセスの作業コマンドで、システムプロセスのCPU/ Memory統計情報を確認することができます。いくつかのプロセスがあるか、CPUの詳細使用率はどのようになるのか、MemoryとSwapはどのように使用しているかどうかを確認することができます。

Linux_monitoring_top
    % Cpu(s)
  • [us] : ユーザーが使用中の使用率
  • [sy] : システムが使用されている使用率
  • [ni] : プロセスの優先順位に基づいて使用されている使用率(ユーザー空間で使用される)
  • [id] : 何もしていない余裕率
  • [wa] : 入出力を待っているプロセスの使用率
  • [hi] : ハードウェアのインターラプト使用率
  • [si] : ソフトウェアのインターラプト使用率
  • [st] : 仮想化環境での損失率

User値が高いということは、ユーザーコードを実行に時間がかかることで、内部で多くの計算をしているということです。System値が高いということは、システムによって使用されている時間が長く、プロセスがシステムコールまたはI/ Oが多いということです。idleの値が常に0であれば、CPUを100%使用していることを意味します。CPUを継続して使用しているプロセスを見つけ、適切に対応する必要があります。

    PROCESS
  • [PID] : プロセスID
  • [USER] : プロセスを実行させたユーザID
  • [PR] : プロセスの優先順位
  • [NI] : NICE値、マイナスを持つ値が優先順位が高い
  • [VIRT] : 仮想メモリの使用量(SWAP + RES)
  • [RES] : 現在のページが常駐しているサイズ
  • [SHR] : 仮想メモリの使用されているメモリを除く残りの仮想メモリ
  • [S] : プロセスの状態
  • [%CPU] : プロセスが使用するCPUの使用率
  • [%MEM] : プロセスが使用するメモリの使用率
  • [TIME+] : プロセスがCPUを使用した時間
  • [COMMAND] : 実行されたコマンド

プロセスのリストを希望する特定の条件に基づいて並べ替えることができます。

    PROCESS
  • [SHIFT + M] : メモリの使用率順
  • [SHIFT + N] : PID順
  • [SHIFT + P] : CPU使用率順
  • [SHIFT + T] : の実行時間順
  • [SHIFT + R] : 並べ替えを変更(昇順の場合降順に、降順の場合は、昇順に変更)

free: メモリのモニタリング

メモリに関する情報を確認することができます。この例では、MemoryとSwapの値の合計数を確認するために-tオプションを与えました。

Linux_monitoring_free
  • [MEM] : 物理メモリ
  • [Swap] : 仮想メモリ
  • [Buffers] : 一部のプロセスによって発生した一時的なメモリ
  • [Cached] : 既存の実行されたプログラムが使用していたメモリで実行しているか、新たに起動するプログラムが必要なときにすぐに再利用可能なメモリ領域

BuffersとCached両方Free領域の一部であるため、実際には2行目に見える364812が 実際にユーザーが使用可能な空きメモリです。

実際の使用率は、1行目に見えるused - (buffers+ cached)の2行目に見えるused値であるのです。

参考
  • [$ free -b # or –bytes] : show output in bytes
  • [$ free -k # or –kilo] : show output in kilobytes
  • [$ free -m # or –mega] : show output in megabytes
  • [$ free -g # or –giga] : show output in gigabytes

vmstat: システム情報モニタリング

システムの操作、ハードウェアとシステム情報を確認することができます。メモリ、ページング、ブロックデバイスのI/O、CPUの状態などを見ることができます。

Linux_monitoring_vmstat
    procs
  • [r] : CPUで待機しているプロセスの数を意味します。rの数値は、CPUの数の2倍を超える場合、CPUの性能を上げた方がいいです。
  • [b] : インターラプトが不可能なsleep状態のプロセスの数(I/O処理をする間に、ブロック処理されたプロセス)です。bの数値が高い場合は、CPUが継続待機状態になっているを意味なので、ディスク I/Oを確認する必要があります。

    Swap(KB/s)
  • [si(swap in)] : ディスクのswapスペースにあるデータをメモリに呼出する量を意味します。使われているswapディスクが解除される量(per sec)です。
  • [so(swap out)] : メモリからディスクに送信されるデータの量を意味します。物理メモリが不足した場合、ディスクから使用されているメモリの量(per sec)です。Swap outが継続的に発生する場合はメモリ不足を疑って見ることができます。swap outの値が増加すると、メモリが不足していることを意味なので、メモリを増やす必要があります。

-sオプションを与えれば,メモリの統計情報を確認することができます。

Linux_monitoring_vmstat-s

vmstat[delay[count]]を使用すると、リアルタイムでのメモリの状態を確認することができます。

  • [$ verstat 3 5] : 3秒間隔でモニタリング情報を5回出力

iostat: CPU、ディスク入出力の状態をモニタリング

平均CPU負荷とディスク I/Oの詳細な内容を確認することができます。

Linux_monitoring_iostat
    Device
  • [tps] : デバイスに毎秒転送要求件数
  • [kB_read/s] : デバイスにで毎秒読み取られたデータブロック単位
  • [kB_wrtn/s] : デバイスにで毎秒書き込まれたデータブロック単位
  • [kB_read] : デバイスにで指定した間隔の間に読んだブロック数
  • [kB_wrtn] : デバイスにで指定した間隔の間に書いた全体のブロック数

-xオプションを使用すると,より詳細な内容を見ることができます。

Linux_monitoring_iostat-x

iostat [delay [count]]を使用すると、リアルタイムで、ディスクの状態を確認することができます。

  • [$ iostat 3 5] : 3秒間隔でモニタリング情報を5回出力されます。

netstat: ネットワークの状態をモニタリング

現在のシステムに接続されたネットワークの状態、ルーティングテーブル、インターフェイスの状態などを見ることができます。

Linux_monitoring_netstat

2つの領域に分かれて表示されます。

  • [Active Internet connections] : TCP、UDP、rawで接続されたリストだけが表示されます。
  • [Active UNIX domain sockets] : ドメインソケットに接続されたリストだけが表示されます。

オプションは以下の通りです。

  • [-n] : ホスト名、ポート名をlookupしないで(ドメインに見えず)IPアドレス、Port番号を表示しています。
  • [-a] : すべてのネットワークの状態を表示します。
  • [-t] : TCPプロトコルのみを表示します。
  • [-u] : UDPプロトコルのみを表示します。
  • [-p] : このポートを使用するプログラムとプロセスID(PID)を表示します。
  • [-r] : ルーティングテーブルの出力
  • [-s] : プロトコル別(IP、ICMP、TCP、UDPなど)での統計情報を表示します。
  • [-c] : 連続的に状態を表示します。
  • [-l] : 待機中のソケットのリストを表示します。

Stateはかきのように表現されます。

  • [空白] : 接続されていない
  • [FREE] : socketは存在するが割り当てられていない。
  • [LISTENING] : 接続要求に対する応答の準備がされている状態
  • [CONNECTING] : 接続されている状態
  • [DISCONNECTING] : 接続解除されている状態
  • [UNKNOWN] : 不明リンク、知られていない接続状態
  • [LISTEN] : 接続が可能な状態
  • [SYS-SENT] : 接続を要求した状態
  • [SYN_RECEIVED] : 接続要求に応答した後、確認メッセージ待機中の状態
  • [ESTABLISHED] : 接続が完了した状態
  • [FIN-WAIT1] : ソケットが閉じ、接続が終了している状態
  • [FIN-WAIT2] : ローカルがリモートからの接続の終了要求を待っている状態
  • [CLOSE-WAIT] : 終了待機中
  • [CLOSING] : 送信されたメッセージが失われました
  • [TIME-WAIT] : 接続終了後しばらく維持されている
  • [CLOSED] : 接続が完全に終了

オプションに応じて、他の情報を確認することができます。便利に使われるオプションは、知っている必要があります。

  • [$ netstat -r] : サーバーのルーティングテーブルの出力
  • [$ netstat -na --ip] : tcp/ udpのセッションのリストを表示
  • [$ netstat -na | grep ESTABLISHED | wc -l] : アクティブなセッション数を確認
  • [$ netstat -nap | grep :80 | grep ESTABLISHED | wc -l] : 80ポートの同時接続者数
  • [$ netstat -nltp] : LISTENしているポートの情報を表示

df: ディスクのモニタリング

現在のディスクの全容量と空き容量を確認することができます。

Linux_monitoring_df

オプションは下記の通りです。

  • [-h] : 容量を読みやすく単位を計算して出力
  • [-T] : ファイルシステムの種類とディスク情報出力

おわりに

これまでシステムのモニタリングを調べることができるコマンドを調べてみました。このような情報を使用してインフラのモニタリングを行うことができます。 Linuxで基本的に提供されるコマンドですので、いつでも使用することができます。

それでは、Whatapサーバーのモニタリングなどのモニタリングサービスは、いつ使用するのでしょうか。Whatapサーバーのモニタリングサービスは、端末にアクセスしなくても、Webとアプリでリモートで調べることができるし、過去のデータを確認することができます。そして定期的に状態をモニタリングしている途中に問題が発生したときに、メール、アプリなどで高速動作が可能なように助ける役割をします。

Linuxのモニタリングコマンドを身につけて、自分だけのモニタリング技法を作成してみてください。そして、Whatapサーバーのモニタリングなどのモニタリングサービスを使用して、さまざまな経験をしてみてください。