サーバーリソースのリアルタイム監視ができる便利ツール、dstatコマンドとは?ネットワーク管理の基本Tips

世の中にはサーバーリソースのモニタリングソフトウエアのような、GUIによる便利な環境もありますが、コマンドラインでさっと確認したり、あるいは自前でサーバーリソース情報チェックツールを作るなら「dstat」コマンドの使い方を覚えておくと便利です。

» 2015年06月05日 05時00分 公開
[海上忍@IT]

バックナンバー

連載バックナンバー

 本連載では、ネットワーク管理の基本コマンドを順を追って紹介していきます。基本書式と用法、主要なオプション、用例サンプルを示しますので、manやhelp代わりに通読し、各コマンドでできることを順次おさらいしてみてください。今回は、サーバーリソースの状態をリアルタイムで監視・確認する「dstat」コマンドを紹介します。

 なお、本連載では、執筆時点の最新版「Red Hat Enterprise Linux(RHEL)」および「CentOS」環境で動作を確認しています。コマンドのサンプルなどで一部環境に依存した出力例となる場合がありますので、その際には適宜ご自身の環境に合わせて読み替えてください。

 「突然トラフィックが増えた」「サーバーの負荷が上昇した」「原因は分からないがシステムが重くなった」という場合には「vmstat」や「netstat」といった監視用コマンドを利用するのが常道です。しかし、dstatを使えば、コマンド一つでサーバー全体のリソースをリアルタイムに監視することが可能になります。

サーバーのリソースをリアルタイムに監視する場合の書式

dstat [オプション/プラグイン] [次回更新までの秒数] [ファイル]

※[ ]は省略可能な引数を示しています。


dstatコマンドの概要

 dstatは、Pythonで記述されたコマンドラインのサーバーリソースモニタリングツールです。

 本連載がターゲットとしているCentOSの標準構成には含まれませんが、公式リポジトリには収録されているため、パッケージ管理ツール「yum」で簡単にインストールできます。Ubuntuなど他のディストリビューションも、「apt-get」などのパッケージ管理ツールを介してインストールできます。以下に、yumを使ってdstatをインストールする場合の例を示しておきます。

$ sudo yum install dstat
dstatのインストール(Ubuntuの場合は「sudo apt-get install dstat」)

 dstatは、CPUやメモリ、ディスクやCPU割り込みといったハードウエアの他、ネットワークの状態も監視できます。各リソースを監視対象とするかどうかはオプションで指定できます。また、「PostfixやMySQLなど特定プロセスの監視」のような、dstatオプションにはない機能も、Pythonスクリプトで記述されたプラグインで定義できます(「プラグインを活用するには?」参照)。

 オプションを付けずにコマンドを実行すると、次の順番で情報が1秒ごとに表示されます(「-cdngy」オプションと同義)。

  1. CPU
  2. ディスク
  3. ネットワーク
  4. ページング
  5. 割り込み/コンテキストスイッチの回数

 「必要とする情報に応じてオプションを組み合わせる」「プラグインを利用する」が、dstatコマンドの典型的な活用方法です。


主なオプション

 dstatコマンドの主なオプションは次の通りです。

表1 主なオプション
オプション 意味
-C 測定対象のCPU(「cpu0」など)を指定する
-N 測定対象のNIC(「eth0」など)を指定する
-S 測定対象のスワップ領域(「swap1」など)を指定する
-T タイムカウンターを表示する
-a 「-cdngy」を指定したときと同じ(デフォルト)
-c CPU時間の割合を表示する
-d ディスクの状態を表示する
-g ページングの状態を表示する
-i 割り込みの状態を表示する
-l 時間当たりのCPU使用率(ロードアベレージ)を表示する
-m メモリの状態を表示する
-n ネットワークの状態を表示する
-p プロセスの状態を表示する
-s スワップ領域の状態を表示する
-t 測定時点の日時を表示する
-y 割り込み/コンテキストスイッチの回数を表示する
--list プラグインのリストを表示する
--tcp TCP通信のバイト数を表示する
--udp UDP通信のバイト数を表示する
-output 出力をCSVファイルに書き出す

サーバーの主要なリソースを表示するには?

 サーバーの主要なリソースを表示する場合は、オプションや引数なしにコマンド名のみ実行します。すると、概要で解説した通りの順で、各リソースの情報が1秒ごとに更新され、画面に出力されます。

 表示される情報の順序を変えたいときや不要な情報を減らしたいときには、オプションを指定します。オプションを省略した場合は「-cdngy」を指定したときと同じ動作ですから、例えばこれを「-ncd」とすれば、表示される情報はネットワーク、CPU、ディスクの順となります。

$ dstat
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw 
  1   0  99   0   0   0| 510B  676B|   0     0 |   2B   15B|  19    25 
  0   0 100   0   0   0|   0     0 |  66B  102B|   0     0 |  10    19 
  1   0  99   0   0   0|   0     0 |  66B  902B|   0     0 |   8    10 

5秒ごとに情報を更新するには?

 次回情報を更新するまでの間隔は、デフォルトでは1秒に設定されていますが、数値を引数に与え実行することで任意の秒数で更新できます。例えば、タイムカウンターを表示するためのオプション「-T」を指定した上で、引数に「5」を与えて実行すると、各行の情報が5秒ごとに更新される様子を確認できます。

 次のサンプルでは、オプション「T」とその他のオプションを列記したあと、引数に「5」を与えています。出力結果各行の冒頭にある「epoch」は、エポック秒のことを指しています。

$ dstat -Tlnd 5
--epoch--- ---load-avg--- -net/total- -dsk/total-
  epoch   | 1m   5m  15m | recv  send| read  writ
1424748903|0.04 0.04 0.05|   0     0 | 509B  675B
1424748908|0.04 0.04 0.05|  66B  294B|   0     0 
1424748913|0.04 0.04 0.05|1766B  822B|   0     0 
1424748918|0.03 0.04 0.05|3010B  342B|   0     0 

プラグインを活用するには?

 dstatパッケージをインストールすると、「/usr/share/dstat」ディレクトリに大量のPythonスクリプトがコピーされます。このスクリプトがdstatのプラグインです。「dstat --list」と実行すれば、プラグインの内容が一覧できます。

$ dstat --list
internal:
	aio, cpu, cpu24, disk, disk24, disk24old, epoch, fs, int, int24, io, 
	ipc, load, lock, mem, net, page, page24, proc, raw, socket, swap, 
	swapold, sys, tcp, time, udp, unix, vm
/usr/share/dstat:
	battery, battery-remain, cpufreq, dbus, disk-tps, disk-util, dstat, 
	dstat-cpu, dstat-ctxt, dstat-mem, fan, freespace, gpfs, gpfs-ops, 
	helloworld, innodb-buffer, innodb-io, innodb-ops, lustre, 
	memcache-hits, mysql-io, mysql-keys, mysql5-cmds, mysql5-conn, 
	mysql5-io, mysql5-keys, net-packets, nfs3, nfs3-ops, nfsd3, nfsd3-ops, 
	ntp, postfix, power, proc-count, qmail, rpc, rpcd, sendmail, snooze, 
	squid, test, thermal, top-bio, top-bio-adv, top-childwait, top-cpu, 
	top-cpu-adv, top-cputime, top-cputime-avg, top-int, top-io, 
	top-io-adv, top-latency, top-latency-avg, top-mem, top-oom, utmp, 
	vm-memctl, vmk-hba, vmk-int, vmk-nic, vz-cpu, vz-io, vz-ubc, wifi

 標準で配布されているプラグインには、I/Oの平均値を取得するものや、CPUの最大負荷がどのくらいかを取得するものなど、サーバー管理時に便利なものが多数用意されています。また、独自にPythonスクリプトを作成することもできます。

 なお、プラグインは通常のオプションと組み合わせて実行することも可能なため、例えば「dstat -t --net-packets 5」と実行すると、「net-packets」プラグインを利用し、情報を5秒刻みで表示できます。

$ dstat -t --net-packets 5
----system---- -pkt/total-
     time     |#recv #send
03-03 22:31:56|   0     0 
03-03 22:32:01|1.00  1.00 
03-03 22:32:06|1.00  1.00 
03-03 22:32:11|3.00  1.00 
03-03 22:32:16|1.40  1.00 
「ネットワーク管理の基本Tips」バックナンバー

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。