muninグラフの読み方と意味

サーバー監視ツール「munin」の各グラフの意味と読み方。

muninをインストールすると標準でたくさんのグラフが出力されます。中には聞いた事もない単語のグラフもあり、
「いったいこれは何なのか」と疑問に思っていたので調べてみました。

グラフはすべてplugin (/etc/munin/plugins) の内容から出力されていて、さらにそのほとんどが単なるperlスクリプトシェルスクリプトでした。このpluginが実際はどのようなコマンドを使った結果なのかを確認しながら調べました。プログラムにはあまり明るくない&英語が苦手、なので意味違いしている可能性がありますのでお気づきの点がありましたらコメントを頂けると嬉しいです。
使用したmuninバージョンは1.4.5です。

ほとんどの値は /proc/以下から参照されているようで以下のページがとても役に立ちました。
Man page of PROC – http://linuxjm.sourceforge.jp/html/LDP_man-pages/man5/proc.5.html

disk

Disk IOs per device



プラグイン diskstats
IO使用率(Disk utilization per deviceで得た値)を単位時間内で行ったI/O数で分割し
1秒間で行ったI/O数の平均値を出力します。
グラフを見てると入出力したkbyte数も出力してくれるようです。

実体は /proc/diskstats の出力内容から。
ファイルには各ディスクデバイスのディスク I/O 統計情報が書かれていて、
詳細は以下のカーネルドキュメント。
http://www.kernel.org/doc/Documentation/iostats.txt

各項目の意味はこちらが詳しいです。
http://hagio.org/wiki/index.php/Linux/%E9%9B%91%E8%A8%98#.2Fproc.2Fdiskstats_.E3.81.AE.E5.90.84.E9.A0.85.E7.9B.AE.E3.81.AE.E6.84.8F.E5.91.B3

Disk latency per device



プラグイン diskstats
こちらのグラフもTOPページで全ディスクの読み書きにかかる時間を表示、
クリックで、各ディスクごとの読み書きにかかる時間を表示します。

この時間はsyscallがアプリケーションとデバイスを行き来する平均時間から算出されている?みたいです。
単位はミリセカンド(1000分の1秒)。

実体は /proc/diskstats の出力内容から。

Disk throughput per device



プラグイン diskstats
1秒間に読み書きしたバイト数を表示します。

Disk usage in percent



プラグイン df
ファイルシステムごとのディスク使用率を%で表示。
元コマンドはdfコマンドです。

Disk utilization per device


プラグイン diskstats
こちらのグラフはTOPページで全ディスクのIO使用率を表示、
クリックで、各ディスクごとのIO使用率を表示します。
LinuxではI/Oリクエストの発生中は1ミリセカンドごとにインクリメントするカウンターを使っています。
もしこのカウンターが1秒の間に1000msecぶんインクリメントされるとI/Oリクエストの発生が100%とほぼ近い値になります。
このプラグインは上記の考えからディスクへのIO使用率を%にて提供してくれます。
ただ5分ごとの計測なので当然、瞬間的な表示の取得はできません。

実体は /proc/diskstats の出力内容から。

Inode usage in percent



プラグイン df_inode

ファイルシステムごとのinode使用率を%で表示。
元コマンドはdfコマンドです。

IO Service time



プラグイン iostat_ios
バイスごとの書き込み/読み込みの遅れをグラフ化してくれます。
書き込み/読み込みにかかった時間を成功回数で割った時間です。
左メニューの le-05 などは10の-5乗という意味。
つまりこのグラフが大きければ大きいほどIOがヤバイという事になります。

実体は上記と同じく /proc/diskstats の出力内容から。
・読み込みが成功した回数
・読み込みにかかった時間 (ミリ秒)
・書き込みが成功した回数
・書き込みにかかった時間 (ミリ秒)
の値を取得し前回取得した数の差分を求めて計算する事でグラフ化されています。

IOstat



プラグイン iostat
バイスごとの書き込み能力をグラフ化してくれます。
こちらは表示の仕方が特殊で1秒間に読み書きに成功したセクタ数が出力されています。
グラフの+項目が書き込み、-項目が読み込みの値となっています。

実体は /proc/diskstats の出力内容から。

munin

Munin processing time



プラグイン munin_stats
muninがデータを取得し、グラフ、html出力など、4つの作業ごとにかかった時間を出力します。

network

Connections through firewall



プラグイン fw_conntrack
iptables を使うとき, ip_conntrack というテーブルで tcp のセッションを管理しています。
iptablesを通ったパケットは現在の接続状態などを上記のテーブルへ記録します。
このプラグインではそのテーブルを参照し、現在の状態別の接続数を表示してくれます。

ESTABLISHED
TCPコネクションが確立して通信している状態

FIN_WAIT
終了を宣言した状態

TIME_WAIT
コネクションの終了待ち状態

SYN_SENT
SYNを送信した状態。

UDP_Connections
UDPコネクション数

Assured
ASSUREDフラグの数。
このフラグは

NATed
NATの数?詳細はちょっとわからなかったです。

実態は以下のコマンドで出力される内容です。
cat /proc/net/ip_conntrack

参考
conntrackエントリ – http://www.asahi-net.or.jp/~aa4t-nngk/ipttut/output/theconntrackentries.html

eth0 errors



プラグイン if_err_*
パケットのエラー数を計測します。
基本的にインターフェイスにてエラーパケットが1でも存在すれば設定や接続先のハブに問題がなければ
個人的には信頼できないNICとして交換を視野に入れます。

実態は以下のコマンドで出力される内容です。
cat /proc/net/dev

eth0 traffic



プラグイン if_*
パケットの転送料を計測します。
ethtoolにてNICの接続状態やリンクモード(100Mbpsとか1000Mbpsとか)を取得し、
/proc/net/devの値を取得しています。

inがマイナス、outがプラスとしてグラフ出力されます。

Firewall Throughput


プラグイン fw_packets
1秒間に転送したパケット数を表示します。
/proc/net/snmp のIP:行の値を取得してこちらの値を元に計算されています。

HTTP loadtime of a page



プラグイン http_loadtime
http://localhost/wgetにて取得、その時間をtimeコマンドで取得し表示します。
任意のURLへ変えたい場合は、プラグインの以下の部分
[code]
target – URL to fetch (default: “http://localhost/“)
[/code]
を変更すれば可能だと思います。

ipconntrack



プラグイン fw_forwarded_local
iptables を使うとき, ip_conntrack というテーブルで tcp のセッションを管理しています。
接続数が増えると、それだけip_conntrackテーブルを使用するのですが、
これがいっぱいになると以下のようなログが出て通信がまったく出来なくなる状態となります。
[code]
ip_conntrack: table full, dropping packet
[/code]

このグラフでは現在のip_conntrackの上限値と使用数を表示してくれます。
実態は /proc/sys/net/ipv4/netfilter/ip_conntrack_max に記述されている値(上限値)と
/proc/net/ip_conntrack の値(現在の使用値)です。

中規模〜大規模なサイトだとこの値は意外と問題となってきますので、使用率があがってきたら
メモリと相談しながら上限をあげたり対策を行いましょう。

参考

iptables の ip_conntrack の最大値を変更する方法 – http://www.sssg.org/blogs/naoya/archives/1454

process

Fork rate



プラグイン forks
1秒間にfork(プロセスのコピーを生成する事)された数を表示します。
/proc/stat の値の processes 行(プロセスやスレッドが作成された数)の値を取得しています。

Number of threads



プラグイン threads
スレッドとは一つのプロセスの中で平行に処理を行いたい場合などに使用されます。
このグラフではスレッドがシステム全体でいくつ作られたスレッド数を表示します。

/proc以下にあるプロセスIDのディレクトリからThreadsの値を取得した合計値です。
実際には以下のようなコマンドで表示されていました。
grep -s ‘^Threads’ /proc/[0-9]*/status

Processes



プラグイン processes
プロセスの総数をそれぞれの状態別に表示してくれます。
実態はPSコマンドです

ps –no-header -eo s

Processes priority



プラグイン proc_pri
プロセスの優先度ごとの数を表示します。
元コマンドはpsでstat項目の内容で判断しています。
< 優先度高 (high-priority)
N 優先度低 (low-priority)
L メモリーロックプロセス (locked)
として集計されています。

VMstat



プラグイン vmstat
実行中であるプロセス数、スリープ状態にあるプロセス数をグラフ表示します。
vmstatコマンドのproc行にあるrとbの値をそれぞれ取得しています。

r:実行待ち状態にあるプロセス数
b:割り込み不可能なスリープ状態にあるプロセス数

rは実行可能でCPUの割当をまっている状態のプロセス数なのでグラフではrunningと表示されていますが、実際には実行中ではないような気がします。
この値はロードアベレージとほぼ同じ値を示します。
bはスリープ状態にあるプロセス、、ですがほとんどの原因はI/O待ちで、I/O待ちプロセス数と言い換える事ができます。

System

Available entropy



プラグイン entropy
エントロピー(entropy)は乱雑さを意味します。
主に鍵ファイルの生成などランダムな文字列を作成する時に使用されます。
通常はマウス操作などで自動的に乱数が作成されますが、サーバーの場合は付けっぱなしのまま置く事も多いので
このエントロピーが徐々に枯渇していき、乱数発生の際などに極端に動作が遅くなる事があります。

通常は3000とかくらいまであればいいんですが、仮想サーバーだと思うように溜まらないようです。
今の所問題になるほどの遅延は発生していませんがVMWareやさくらのVPSとかで150程度。
物理サーバーだと3000くらいはすぐに溜まります。

使用可能なエントロピーの値は以下のコマンドで取得でき、グラフ生成も以下のコマンドで行われています。
cat /proc/sys/kernel/random/entropy_avail

CPU usage



プラグイン cpu
CPUの使用率を表示します。
コア数ぶん表示するので、例えばコア2、ハイパースレッディング対応の場合はMAXが400%となります。

system
システムモード

user
ユーザモード

nice
低い優先度のユーザモード

idle
未使用の状態

iowait
I/O の完了を待っていた時間

irq
割り込み処理を行った時間

softirq
ソフト割り込みの処理を行った時間

steal
仮想化環境での動作時に他のオペレーティングシステムにより消費された時間

guest
Linux カーネルの制御下のゲストオペレーティングシステムの仮想 CPU の 実行に消費された時間

基本的には system user iowaitの値を確認します。
システムモードはOSコードやデバイス・ドライバなどで使用された基本的にはOSで使用されるCPU使用
ユーザーモードPHPとかApacheなどのユーザーアプリでのCPU使用
iowatiはHDDへの書き込み/読み込み待ち状態のCPU使用
です。

このプラグインが使用している値は /proc/stat のCPU項目です。

File table usage



プラグイン openfile
オープンされているファイル数とシステム中のオープンファイル管理データの最大数をグラフ化します。

上限値は /etc/security/limits.conf で変更可能
fs.file-max = 90000 など

取得もとは以下の値です。
/proc/sys/fs/file-nr

Individual interrupts



プラグイン irqstats
様々な種類の割り込みの数をグラフ化してくれます。
割り込みの種類はマウスとキーボード(i8042)、イーサネット(eth0)などのハードウェアから生じる割り込みや
カーネルからくる割り込みなど様々な種類があるみたいです。

取得元は /proc/interrupts です

Inode table usage



プラグイン irqstats
システム中のメモリiノードの数および使用中のメモリiノードの数をグラフします。

取得元は /proc/sys/fs/inode-nr の値です。

Interrupts and context switches



プラグイン irqstats
処理された割り込みの回数とコンテクスト・スイッチ(CPUの状態を保存したり復元したりした回数)を表示する。

取得元は /proc/stat の intr および ctxt の値。

Load average



プラグイン load
ロードアベレージの値をグラフしてくれます。

取得元は /proc/loadavg で
cut -f2 -d’ ‘ < /proc/loadavg
として取得されているので5分平均の値です。

Logged in users



プラグイン users
ログインしているユーザー数を表示します。
取得元はwhoコマンド

Memory usage



プラグイン memory
モリーの使用状況をグラフに表示してくれます。

apps
ユーザアプリ使用メモリサイズ
MemTotal – MemFree – Buffers – Cached – Slab – PageTables – SwapCached

page_tables
ページテーブルエントリという「ページ」の管理構造体として利用されているメモリ

swap_cache
物理メモリ上にキャッシュされたスワップページの総容量

vmalloc_used
vmalloc()で確保された物理メモリ領域とMMCONFIGで確保しているメモリ領域の総容量

slab_cache
スラブアロケータで使用されている物理メモリの総容量

cache
ファイルデータのキャッシュなどに使用している物理メモリの総容量。共有メモリは Cached に加算される。SwapCachedは含まない
cache-(SwapCache+buffers)

buffers
ファイルなどのメタデータとして使用している物理メモリの総容量

unused
未使用のメモリ。

swap
スワップとして使用されている量
SwapTotal – SwapFree

committed
全プロセスによって確保された仮想メモリの総容量。

mapped
ページテーブルに登録されている物理メモリの総容量

active
最近アクセスした物理メモリの容量

inactive
最近アクセスしていない解放してよい物理メモリの容量

取得元は /proc/slabinfo と /proc/meminfo

Swap in/out



プラグイン swap
1秒間にswap in/outされたブロック数を表示、

取得元は /proc/vmstat の pswpin / pswpoutの値です

Uptime



プラグイン uptime
パソコンが起動してから現在までの時間。

取得元は /proc/uptime

前へ

CGIプログラムをPlack::Testでテストする

次へ

perlbrewで構築するモダンなPerl環境

1 Comment

  1. […] accesses”と相関性があるように見える。 muninグラフの読み方と意味 | シーズクリエイターズブログというすばらしいサイトによると This entry was posted in Munin, OSS and tagged munin […]

コメントは停止中です。

© SEEDS Co.,Ltd.