【メモ】SmokePingでlatency視覚化はじめました(1)導入編

【メモ】SmokePingでlatency視覚化はじめました(1)導入編 はてなブックマーク - 【メモ】SmokePingでlatency視覚化はじめました(1)導入編


◆Smokeping を入れてみました。

SmokePing – About SmokePing
http://oss.oetiker.ch/smokeping/

Smokepingは、ネットワークのレイテンシ(遅延、という和訳が適切かどうか分かりませんが、そのように表現されることもあると思います)を視覚的に表示するためのツールです。オープンソースで公開されており、作者は MRTG や RRDtool でおなじみTobias Oetiker氏。

これが Smokeping の画面。特定ホストに対する PING の状況が視覚化されています。”Smoke”という名の通り、値の幅を視覚化できるのが、他のツールとの大きな違いです。

Smokepingキャプチャ画面

Smokeping には、次のような特長があります。

  • レイテンシの視覚化
  • 動的なグラフの展開可能
  • 幅広いレイテンシの視覚化を行うプラグイン(HTTPやDNSにも対応)
  • 高度にカスタマイズ可能なアラート機能

言語自体は Perl で記述されていて、公式サイトの説明では色々な事が出来るようです。

◆導入経緯

とあるネットワークで、不定期に遅延が発生している「らしい」とう事象。時たまアラートがあがることもあるのだが、見かけ上は何も問題が無い「らしい」所うっきょう(;´∀`) しかし、放っておくと、何かのトラブルに陥るかもしれないし、各種のアラーティングでは、閾値以下…。

という所、ググッて見つけたのが Smokeping 。これを使えば、結構、細かく ping の状況を視覚化出来るとサイトに書いてある。で、実際に試してみた結果がこちらです。今回は、実際に1分間隔で ping の状況をグラフ化する所まで、試してみました。

◆導入方法

使うためには、ウェブサーバが動いている鯖で、ソースからコンパイル&設定を行います。なお、以下手順(私の環境)は Red Hat Enterprise Linux 5 ですが、CentOS や Debian 等々、同じような方法でインストールできると思います。なお、インストール手順詳細は、オフィシャルのドキュメントが参考になります。

まずは、ソースの入手と展開です。

# cd /usr/local/src/
# wget http://oss.oetiker.ch/smokeping/pub/smokeping-2.6.8.tar.gz
# tar xvfz smokeping-2.6.8
# cd smokeping-2.6.8

次に、Perl のモジュールをセットアップします。

# ./setup/build-perl-modules.sh /opt/smokeping/thirdparty

もしかしたら、環境によっては Perl のモジュールはセットアップ不要かもしれません。

あとは、configure です。/opt/smokeping にインストールします。

# ./configure --prefix=/opt/smokeping
# gmake install

lsでディレクトリをひらくと、必要なファイル群が展開されていることが分かります。

# ll /opt/smokeping/
合計 24
drwxr-xr-x 2 root root 4096  4月 23 13:10 bin
drwxr-xr-x 3 root root 4096  4月 23 13:11 etc
drwxr-xr-x 3 root root 4096  4月 23 13:11 htdocs
drwxr-xr-x 3 root root 4096  4月 23 13:11 lib
drwxr-xr-x 3 root root 4096  4月 23 13:11 share
drwxr-xr-x 6 root root 4096  4月 23 13:08 thirdparty

次に、fping をセットアップします。Smokeping はfpingと連動するため、もし入っていなければセットアップします。EPEL のパッケージで公開されているので、セットアップは非常に簡単。

# yum install fping

これでokです。EPEL リポジトリの組み込み方は、こちらのページを参照ください。

【メモ】EPELリポジトリをRed Hat Enterprise Linuxで使うには | Pocketstudio.jp log3
http://pocketstudio.jp/log3/2012/04/09/how_to_use_epel_repository_on_rhel/

◆初期設定

インストールが終われば、あとは設定ファイルの設置、Web サーバから見えるようにする設定、そして smokeping デーモンの起動です。

まずはsmokepingの設定ファイルです。「/opt/smokeping/etc/config」に設定ファイルを置きます。/opt/smokeping/etc/config/example/ のサンプルや、サイトの例を参考に、自分の場合は、次のようにしました。(変更箇所が青字です)

その前に、サンプル用の設定ファイル(config.dist)をコピーし、必要情報を書き換えます。

# cd /opt/smokeping/etc
# cp config.dist config

設定ファイルを編集します。

# vi config

*** General ***

owner    = Masahito Zembutsu   # 管理者の名前。Smokepingトップページに出ます
contact  = zem@pocketstudio.jp  # 管理者のアドレス
mailhost = localhost
sendmail = /usr/sbin/sendmail
# NOTE: do not put the Image Cache below cgi-bin
# since all files under cgi-bin will be executed ... this is not
# good for images.
imgcache = /opt/smokeping/cache
imgurl   = cache
datadir  = /opt/smokeping/data
piddir  = /opt/smokeping/var
cgiurl   = http://example.jp/smokeping/smokeping.cgi # ブラウザ上からのURL
smokemail = /opt/smokeping/etc/smokemail.dist
tmail = /opt/smokeping/etc/tmail.dist
# specify this to get syslog logging
syslogfacility = local0
# each probe is now run in its own process
# disable this to revert to the old behaviour
# concurrentprobes = no

*** Alerts ***
to = zem@pocketstudio.jp # アラート用の通知先
from = zem@pocketstudio.jp # アラート用の From

+someloss
type = loss
# in percent
pattern = >0%,*12*,>0%,*12*,>0%
comment = loss 3 times  in a row

*** Database ***

#step     = 300
step     = 60  # 一分間隔
pings    = 20

# consfn mrhb steps total

AVERAGE  0.5   1  1008
AVERAGE  0.5  12  4320
 MIN  0.5  12  4320
 MAX  0.5  12  4320
AVERAGE  0.5 144   720
 MAX  0.5 144   720
 MIN  0.5 144   720

*** Presentation ***

template = /opt/smokeping/etc/basepage.html.dist

+ charts

menu = Charts
title = The most interesting destinations

++ stddev
sorter = StdDev(entries=>4)
title = Top Standard Deviation
menu = Std Deviation
format = Standard Deviation %f

++ max
sorter = Max(entries=>5)
title = Top Max Roundtrip Time
menu = by Max
format = Max Roundtrip Time %f seconds

++ loss
sorter = Loss(entries=>5)
title = Top Packet Loss
menu = Loss
format = Packets Lost %f

++ median
sorter = Median(entries=>5)
title = Top Median Roundtrip Time
menu = by Median
format = Median RTT %f seconds

+ overview

width = 600
height = 50
range = 10h

+ detail

width = 600
height = 200
unison_tolerance = 2

"Last 3 Hours"    3h
"Last 30 Hours"   30h
"Last 10 Days"    10d
"Last 400 Days"   400d

#+ hierarchies
#++ owner
#title = Host Owner
#++ location
#title = Location

*** Probes ***

+ FPing

binary = /usr/sbin/fping

*** Slaves ***
secrets=/opt/smokeping/etc/smokeping_secrets.dist
+boomer
display_name=boomer
color=0000ff

+slave2
display_name=another
color=00ff00

*** Targets ***

probe = FPing

menu = Top
title = Network Latency Grapher
remark = Welcome to this SmokePing website.

+ mysite1
menu = Site 1
title = Hosts in Site 1

++ node1  # 以下ping対象ノード 環境に合わせ書き換えてください
host = node1.pocketstudio.net
++ node2
host = node2.pocketstudio.net
++ node3
host = node3.pocketstudio.net

ほとんどデフォルトのままですが、監視の時間間隔をデフォルトの300秒(5分)から60秒(1分)に変えています。これは、より細かなネットワークの情報が欲しかったからです。

設定ファイルの次は、Web インターフェース(Webから見えるところ)を設定します。/opt/smokeping/htdocs がウェブから見えるべき場所です。とある環境では、そのままドキュメントルート直下におきました。

# ln -s /opt/smokeping/htdocs/ /var/www/html/smokeping
# mv /var/www/html/smokeping/smokeping.fcgi.dist /var/www/html/smokeping/smokeping.cgi
# chmod 755 /var/www/html/smokeping/smokeping.cgi

※fcgi環境が入っていないとエラーになるかもしれません。その場合は、必要なモジュール・パッケージをインストールください。

※自分は、この直後ハマりました。なぜか画面は次のようなエラーが。

Software error:

ERROR: /opt/smokeping/etc/config, line 10: Directory '/opt/smokeping/cache' does not exist

For help, please send mail to the webmaster (root@xxxx, giving this error message and the time and date of the error.

原因は、見ての通り、「/opt/smokeping/cache」ディレクトリが無いよとの事。そういえば config ファイルで指定したディレクトリを作成していませんでした。ディレクトリ作成後も、エラーが表示されます。

ERROR: /opt/smokeping/etc/config, line 111: File '/opt/smokeping/etc/smokeping_secrets.dist' is world-readable or writable, refusing it

まだ足りないところがありました。最終的に、次のように対処。

# mkdir /opt/smokeping/cache
# mkdir /opt/smokeping/data
# mkdir /opt/smokeping/var
# chmod 640 ./smokeping_secrets.dist
# chown -R apache.apache /opt/smokeping/cache/ /opt/smokeping/data/ /opt/smokeping/var
# ln -s /opt/smokeping/cache /var/www/html/smokeping

※ chown の所有者およびグループが apache になっていますが(Red Hat のデフォルト設定)、Web サーバが動作するユーザ権限に書き換えてください。

最後に smokeping デーモンの起動です。

/opt/smokeping/bin/smokeping --config=/opt/smokeping/etc/config --logfile=smoke.log

正常に起動すると 、次のようにデーモンが立ち上がっているのが見えると思います。

# ps ax | grep smoke
18938 pts/0    S+     0:00 grep smoke
28517 ?        Ss     0:00 /opt/smokeping/bin/smokeping [FPing]

ちなみに、/var/log/messages にも、起動時の記録が残ります。もし正常動作しない時は、ログのチェックが有効でしょう。

Apr 23 14:20:08 sv smokeping[28434]: Starting syslog logging
Apr 23 14:20:08 sv smokeping[28517]: Smokeping version 2.006008 successfully launched.
Apr 23 14:20:08 sv smokeping[28517]: Not entering multiprocess mode for just a single probe.

あとは、しばらく待てば、グラフがアップデートされます。

ブラウザから http://URL/smokeping/smokeping.cgi にアクセスすると、画像が見えます。

SmokePing でホスト毎のグラフが表示される

この画面を更にクリックすると、特定のホストに関するグラフが拡大できます。

直近の3時間、30時間、10日分のグラフが表示

なお、グラフの上をクリック&ドラッグすると、その区間だけ拡大表示することもできます。

マウスで視点をクリックし、終点までドラッグすると…

このように、任意の区間をズーム可能です

今の所まだPingしか試していませんが、色々応用が利きそうです。特に、HTTPの応答時間の監視や、DNSサーバの応答時間測定、その他なんらかのパラメータをグラフ化したい時には役立つのじゃ無いでしょうか( ´∀`)

Reference:

先駆者のみなさん(ググッたら結構ありますね):