世の中にはサーバーリソースのモニタリングソフトウエアのような、GUIによる便利な環境もありますが、コマンドラインでさっと確認したり、あるいは自前でサーバーリソース情報チェックツールを作るなら「dstat」コマンドの使い方を覚えておくと便利です。
本連載では、ネットワーク管理の基本コマンドを順を追って紹介していきます。基本書式と用法、主要なオプション、用例サンプルを示しますので、manやhelp代わりに通読し、各コマンドでできることを順次おさらいしてみてください。今回は、サーバーリソースの状態をリアルタイムで監視・確認する「dstat」コマンドを紹介します。
なお、本連載では、執筆時点の最新版「Red Hat Enterprise Linux(RHEL)」および「CentOS」環境で動作を確認しています。コマンドのサンプルなどで一部環境に依存した出力例となる場合がありますので、その際には適宜ご自身の環境に合わせて読み替えてください。
「突然トラフィックが増えた」「サーバーの負荷が上昇した」「原因は分からないがシステムが重くなった」という場合には「vmstat」や「netstat」といった監視用コマンドを利用するのが常道です。しかし、dstatを使えば、コマンド一つでサーバー全体のリソースをリアルタイムに監視することが可能になります。
dstatは、Pythonで記述されたコマンドラインのサーバーリソースモニタリングツールです。
本連載がターゲットとしているCentOSの標準構成には含まれませんが、公式リポジトリには収録されているため、パッケージ管理ツール「yum」で簡単にインストールできます。Ubuntuなど他のディストリビューションも、「apt-get」などのパッケージ管理ツールを介してインストールできます。以下に、yumを使ってdstatをインストールする場合の例を示しておきます。
$ sudo yum install dstat
dstatは、CPUやメモリ、ディスクやCPU割り込みといったハードウエアの他、ネットワークの状態も監視できます。各リソースを監視対象とするかどうかはオプションで指定できます。また、「PostfixやMySQLなど特定プロセスの監視」のような、dstatオプションにはない機能も、Pythonスクリプトで記述されたプラグインで定義できます(「プラグインを活用するには?」参照)。
オプションを付けずにコマンドを実行すると、次の順番で情報が1秒ごとに表示されます(「-cdngy」オプションと同義)。
「必要とする情報に応じてオプションを組み合わせる」「プラグインを利用する」が、dstatコマンドの典型的な活用方法です。
dstatコマンドの主なオプションは次の通りです。
オプション | 意味 |
---|---|
-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
次回情報を更新するまでの間隔は、デフォルトでは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
Copyright © ITmedia, Inc. All Rights Reserved.