dstatの便利なオプションまとめ

dstatは便利なオプションがたくさんあるのでみんなオレオレdstatをつくろう。

## 最後まで読むのがめんどくさい人向け

### なんか重くなってるっぽい

```
$ sudo dstat -ta --top-cpu
```

### なんかIOが刺さってるっぽいとき

```
$ sudo dstat -ta --top-io-adv --top-bio-adv
```

### とりあえず全部みたい

```
$ sudo dstat -af
```

### vmstatが好きだ

```
$ dstat -v
```

### 詳しく知りたい

```
$ man dstat
```

## よく使うオプション

下に基本的なオプションを並べてみた。複数使うときは`dstat -tcdn`みたいな感じで指定する。ロングオプションも使えて`dstat --time --cpu --disk`みたいにできるけど長いので使ったことない。

| | 説明 |
|--:|:--|
| -a | よく使うオプション詰め合わせ<br>`-cdngy`と等価でオプションをつけないと勝手にこれになる。 |
| -t | 時間を表示する。<br>どのタイミングかわからなくなることがあるのでいつもつけている。|
| -T | epoch timeを表示する<br>epoch timeで出ているログと併せてみたいときとかに便利。 |
| -c | CPU使用率を表示する<br>基本。 |
| -d | Disk IOを表示する<br>基本。 |
| -g | ページIN/OUTを表示する<br>-sと併せてつかったりする。 |
| -i | 割り込みを表示する<br>あまり使ったことないけど、特定番号の割り込みを監視したいときには便利かな。 |
| -l | ロードアベレージを表示する<br>ロードの数値だけで負荷を評価することがあまりないので使わない。 |
| -m | メモリの使用量を表示する<br>すごい勢いでfreeが減っていくときにとか。 |
| -n | ネットワークIOを表示する<br>基本。単位はB/s。 |
| -p | プロセス数を表示する<br>forkしてプロセスが増減するときに監視するときとかに使えるかも。 | 
| -s | スワップのused/freeを表示する<br>swapが特定タイミングで増えてしまうときとかに使う。 |
| -y | 割り込み回数とコンテキストスイッチの回数を表示する<br>あまり使ったことない…… |

## CPUコア、ディスク、ネットワークインターフェース毎に見る

最近のWebサーバーだと、（仮想化マシンだと普通だけど）シングルコアCPUは逆に珍しいし、ディスクもHDDとSSDが載ってたり、eth0とeth1があったり、コアそれぞれのstatとかインターフェースごとのstatをみたいことは割とよくある。

そういうときには、`-C`、`-D`、`-I`、`-N`といったオプションを使う。それぞれ`-c`、`-d`、`-i`、`-n`オプションに対応していて、カンマ区切りで指定する。また合計値は`total`を使って見られる。

例えば、4コアのマシンでCPUコアそれぞれ毎に見たいときは次のようになる。

```
$ dstat -c -C 0,1,2,3,total # CPUコア0,1,2,3と合計を表示
```

eth1だけを見たい時とかは次のようになる。

```
$ dstat -n -N eth1 # eth1のstatだけを表示
```

インターフェースが複数あるんだよ、全部指定するのめんどくさいよ、って時は`-f`オプションが便利。ただし`total`の値は見られないので、`total`を見たい時はめんどくさいけどいっこいっこ指定する必要がある。

```
$ dstat -af # とりあえず全部みたい
```

## ログをファイルに保存する

dstat中のログを保存するには`--output`オプションを使う。すると各値がCSV形式で保存される。

```
$ dstat --output dstat.csv
````

保存されるログは次のような書式だ。

```
$ cat dstat.csv
"Dstat 0.7.2 CSV output"
"Author:","Dag Wieers <dag@wieers.com>",,,,"URL:","http://dag.wieers.com/home-made/dstat/"
"Host:","debian7",,,,"User:","harukasan"
"Cmdline:","dstat --output dstat.csv",,,,"Date:","31 Oct 2013 15:18:21 JST"

"total cpu usage",,,,,,"dsk/total",,"net/total",,"paging",,"system",
"usr","sys","idl","wai","hiq","siq","read","writ","recv","send","in","out","int","csw"
2.291,0.227,97.373,0.004,0.001,0.105,37.173,12668.059,0.0,0.0,0.0,0.0,505.675,275.612
0.500,0.0,99.500,0.0,0.0,0.0,0.0,69632.0,134756.0,71311.0,0.0,0.0,228.0,218.0
1.250,0.250,98.500,0.0,0.0,0.0,0.0,0.0,243280.0,99172.0,0.0,0.0,204.0,156.0
0.750,0.0,98.750,0.0,0.0,0.500,0.0,0.0,793178.0,47389.0,0.0,0.0,365.0,148.0
3.250,0.0,96.500,0.0,0.0,0.250,0.0,0.0,2018204.0,36349.0,0.0,0.0,784.0,300.0
```

## 便利なプラグインを活用する

dstatはプラグインを組み込むことができ、標準でもいくつかプラグインが入っている（と思う）。これらを使うと様々な情報をdstatにまとめて表示できる。dstatはPythonで書かれているので、Pythonで簡単にプラグインを書くこともできる。

### CPU負荷の原因を探る

ロードがすごく上がってるサーバとかでuserがCPU使いまくってる場合にtopでCPU使ってるプロセスを見たりするが、それをdstatでできるのが`--top-cpu`である。このプラグインでは、最もCPUを使ってるプロセス名とその値を表示してくれる。

```
$ sudo dstat -ta --top-cpu
```

Apache等同じプロセス名のプロセスが複数ある時はPIDも知りたい。そのようなときは`--top-cpu-adv`が便利だ。`--top-cpu-adv`はPIDに加えてread、writeの値も表示する。

```
$ sudo dstat -ta --top-cpu-adv
```

### IOの原因を探る

IOが刺さってるようなサーバで詳しく見たい時には`--top-io`、`--top-bio`が便利だ。

```
$ sudo dstat -ta --top-io --top-bio
```

`--top-io`は最もIOが多いプロセスを表示し、`--top-bio`は最もブロックIOが多いプロセスを表示する。また、一般ユーザでは他ユーザのプロセスなどを取得できないので、`sudo`をつけて実行するとよい。もちろんPIDを知りたい時は`--top-cpu-adv`と同じように`--top-io-adv`、`--top-bio-adv`もある。

```
$ sudo dstat -ta --top-io-adv --top-bio-adv
```

### どんなプラグインが入っているのか調べる

どのようなプラグインが使えるかしりたい場合は、`dstat -V`を使う。Debian7.1では次のようになった。

```
harukasan@debian7:~$ dstat -V
Dstat 0.7.2
Written by Dag Wieers <dag@wieers.com>
Homepage at http://dag.wieers.com/home-made/dstat/

Platform posix/linux2
Kernel 3.2.0-4-amd64
Python 2.7.3 (default, Jan  2 2013, 13:56:14)
[GCC 4.7.2]

Terminal type: screen (color support)
Terminal size: 43 lines, 224 columns

Processors: 4
Pagesize: 4096
Clock ticks per secs: 100

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-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
```

このようなかんじで`/usr/share/dstat`にあるプラグインが表示された。使ったことないプラグインでも便利そうなやつが結構あるのでいつか試してみたい。

## dstatは便利

こんな感じでdstatはとても便利なのでみんな使おう。