SmokePing のインストール手順と基本設定
[Last Modified] (2019/06/02 15:48:45)
ここは
趣味のプログラミングを楽しむための情報共有サービス。記事の一部は有料設定にして公開できます。 詳しくはこちらをクリック📝
Recent posts
Popular pages

概要

SmokePing はネットワーク遅延を可視化する Web ツールです。インストール手順と基本設定をまとめます。特に CentOS 6 を使用する場合について記述していますが、基本的な流れや考え方は他の OS でも同じです。

インストール手順

plenv 関連のインストール

こちらで紹介した plenv を利用すると perl およびモジュールのバージョンをプロジェクト内で固定できます。これはとても重要なことで、あるメンバーのマシンでは動作して別のマシンでは動作しないといった事態を回避できます。ここでは plenv をシステムインストールして perl v5.20.0 をインストールすることにしてみます。

plenv のインストール

$ sudo git clone https://github.com/tokuhirom/plenv.git /usr/local/plenv
$ sudo git clone https://github.com/tokuhirom/Perl-Build.git /usr/local/plenv/plugins/perl-build
$ sudo mkdir /usr/local/plenv/shims
$ sudo mkdir /usr/local/plenv/versions
$ sudo vi /etc/profile.d/plenv.sh  (↓のように編集します)
$ source /etc/profile.d/plenv.sh

/etc/profile.d/plenv.sh

export PLENV_ROOT=/usr/local/plenv
export PATH=$PLENV_ROOT/bin:$PATH
eval "$(plenv init -)"

必要なソフトウェアのインストール

$ sudo yum install gcc
$ sudo yum install openssl-devel
$ sudo yum install patch
$ sudo yum install readline-devel

plenv を用いた perl 関連のインストール

perl

$ sudo su -l
# plenv install 5.20.0
# plenv rehash
# plenv global 5.20.0
# exit

cpanm

$ sudo su -l
# plenv install-cpanm
# plenv which cpanm
# exit

carton

$ sudo su -l
# plenv exec cpanm Carton
# plenv rehash
# exit

SmokePing のダウンロードおよび解凍

こちらから最新のものをダウンロードします。今回は smokeping-2.6.11.tar.gz をダウンロードして使用しています。

$ cd /path/to/somewhere
$ tar zxvf smokeping-2.6.11.tar.gz
$ cd smokeping-2.6.11

SmokePing が依存する Perl モジュール一覧を確認します。

$ cat PERL_MODULES
FCGI
CGI
CGI::Fast
Config::Grammar
Digest::HMAC_MD5
Net::Telnet
Net::OpenSSH
Net::SNMP
Net::LDAP
Net::DNS
IO::Pty
LWP

carton による perl モジュールのインストール

carton で perl モジュールをローカルインストールします。まず plenv local によって perl のバージョンを固定します。

$ plenv local 5.20.0

.perl-version が作成されたことが確認できます。

$ cat .perl-version
5.20.0

先程確認した SmokePing が依存する perl モジュールを carton で使用する cpanfile に記載します。

$ vi cpanfile
requires 'FCGI';
requires 'CGI';
requires 'CGI::Fast';
requires 'Config::Grammar';
requires 'Digest::HMAC_MD5';
requires 'Net::Telnet';
requires 'Net::OpenSSH';
requires 'Net::SNMP';
requires 'Net::LDAP';
requires 'Net::DNS';
requires 'IO::Pty';
requires 'LWP';

ローカルディレクトリにインストールします。bundle でキャッシュも作成します。

$ plenv exec carton install
$ plenv exec carton bundle

インストールされたことが確認できます。

$ ls local/
$ ls vendor/cache/

RRDtool のインストール

SmokePing は RRDtool というデータのグラフ化システムに依存しています。RRDtool 本体および perl の RRDtool モジュールをインストールする必要があります。

注意

RPM を用いて以下のようにすることで一見インストールできたように思います。

$ sudo yum install rrdtool  ← 今回は不要!
$ sudo yum install rrdtool-devel  ← 今回は不要!
$ sudo yum install rrdtool-perl  ← 今回は不要!

しかしながら、この方法だと system perl にインストールされてしまいます。

$ rpm -ql rrdtool-perl
/usr/lib64/perl5/vendor_perl/RRDp.pm
/usr/lib64/perl5/vendor_perl/RRDs.pm
/usr/lib64/perl5/vendor_perl/auto/RRDs
/usr/lib64/perl5/vendor_perl/auto/RRDs/RRDs.so
/usr/share/doc/rrdtool-perl-1.3.8
/usr/share/doc/rrdtool-perl-1.3.8/html
/usr/share/doc/rrdtool-perl-1.3.8/html/RRDp.html
/usr/share/doc/rrdtool-perl-1.3.8/html/RRDs.html
/usr/share/man/man3/RRDp.3pm.gz
/usr/share/man/man3/RRDs.3pm.gz

$ sudo su -l
# plenv global system
# exit
$ plenv exec perldoc RRDs

plenv で用意した perl からは利用できません。

$ sudo su -l
# plenv global 5.20.0
# exit
$ plenv exec perldoc RRDs
No documentation found for "RRDs".

ソースコードからインストール

plenv でインストールした perl に対して RRDtool をインストールする方法としては、現在のところソースコードからインストールするのが一番簡単です。こちらからソースコードをダウンロードして解凍します。今回は rrdtool-1.4.9.tar.gz を選択しています。

$ cd /path/to/somewhere
$ tar zxvf rrdtool-1.4.9.tar.gz
$ cd rrdtool-1.4.9

必要なソフトウェアをインストールします。

$ sudo yum install libxml2
$ sudo yum install libxml2-devel
$ sudo yum install pango
$ sudo yum install pango-devel
$ sudo yum install liberation-sans-fonts  ← グラフの豆腐化対策です。必ずしもこのフォントでなくてもよいです。

ビルドを実行します。インストールしたい Perl の Version (今回は 5.20.0) が出力されることを確認します。

$ ./configure --disable-tcl --disable-lua --disable-python --disable-ruby \
--with-perl-options='INSTALLDIRS="site"' --prefix=/opt/rrdtool-perl5.20.0
...
Config is DONE!
...
    Perl Version: 5.20.0   ← ★
    Perl Options: INSTALLDIRS="site"
...
$ make

plenv で global 指定した perl に RRDtool を扱うためのモジュールをインストールします。

$ sudo make install
$ ls /opt/rrdtool-perl5.20.0

確かに RRDs モジュールがインストールされました。

$ plenv version
5.20.0 (set by /usr/local/plenv/version)
$ plenv exec perldoc RRDs

SmokePing のインストール

先程解凍したディレクトリに戻ります。

$ cd /path/to/somewhere/smokeping-2.6.11

以下のコマンドでインストールします。

$ plenv exec carton exec ./configure --prefix=/opt/smokeping-perl5.20.0
$ sudo make install
$ ls /opt/smokeping-perl5.20.0

carton による perl モジュールのインストール (再び)

/opt/smokeping-perl5.20.0 にも perl モジュールをインストールします。

$ cd /path/to/somewhere/smokeping-2.6.11
$ sudo cp cpanfile cpanfile.snapshot .perl-version /opt/smokeping-perl5.20.0/
$ sudo mkdir /opt/smokeping-perl5.20.0/vendor
$ sudo cp -r vendor/cache /opt/smokeping-perl5.20.0/vendor/
$ sudo su
# cd /opt/smokeping-perl5.20.0
# plenv exec carton install --deployment --cached
# exit

fping のインストール

SmokePing は fping に依存しているためインストールします。こちらで紹介した epel レポジトリに格納されています。

$ sudo yum install epel-release
$ sudo yum install fping

nginx のインストール

CGI を動作させることができるウェブサーバをインストールします。Apache でもよいですが nginx を利用する場合は以下のようにします。CentOS 6 の場合は fping と同様に epel レポジトリで提供されています。

$ sudo yum install epel-release
$ sudo yum install nginx

基本設定

動作させるために必要な最低限の設定は以下の通りです。

$ cd /opt/smokeping-perl5.20.0
$ sudo cp etc/config.dist etc/config
$ sudo mkdir cache data var
$ sudo chmod 777 cache data var
$ sudo chmod o-r etc/smokeping_secrets.dist

以下のコマンドがエラーなく実行されることを確認します。

$ plenv exec carton exec ./bin/smokeping --config=/opt/smokeping-perl5.20.0/etc/config --debug

実際にデーモンを起動するためには以下のようにします。

$ plenv exec carton exec ./bin/smokeping --config=/opt/smokeping-perl5.20.0/etc/config --logfile=smoke.log

起動していることが確認できます。

$ pgrep -l smoke
11291 ./bin/smokeping
$ sudo tail /var/log/messages
...
Apr  4 15:43:35 localhost smokeping[11248]: Starting syslog logging
Apr  4 15:43:35 localhost smokeping[11291]: Smokeping version 2.006011 successfully launched.
Apr  4 15:43:35 localhost smokeping[11291]: Not entering multiprocess mode for just a single probe.
Apr  4 15:43:35 localhost smokeping[11291]: FPing: probing 1 targets with step 300 s and offset 16 s.

一旦停止しましょう。

$ pkill smoke

システムの環境変数の設定

RRDtool で出力されるグラフの時刻を JST に合わせるため、例えば以下のように環境変数を設定します。一旦ログアウトして再度ログインすると設定が反映されます。なお LANG を ja_JP.UTF-8 とするとグラフの一部が豆腐化する可能性があります。ja_JP.UTF-8 としつつ豆腐化を回避する方法は現在のところ不明です。

/etc/environment

export LANG=en_US.UTF-8
export TZ=Asia/Tokyo
export S_TIME_DEF_TIME=UTC

PSGI/Plack アプリケーション化

PSGI (Perl Web Server Gateway Interface) を用いると

Webサーバ(Apache,nginx等) → インターフェース(CGI,FastCGI,mod_perl等) → Perl CGI スクリプト

という構造が

Webサーバによるリバースプロキシ(Apache,nginx等) → PSGIサーバ → Perl PSGI アプリケーション

と変化します。PSGI サーバというレイヤーが追加されることによってアプリケーション開発者は PSGI の仕様にさえ準拠していれば CGI, FastCGI, mod_perl 等の差異を意識しなくてもよいというメリットが発生します。Ruby の Rack のようなものです。Web サーバをリバースプロキシとして利用するため負荷分散もできます。Perl PSGI アプリケーションを作成するための便利なフレームワークのようなものが Plack です。SmokePing は CGI および FastCGI に対応した Perl CGI スクリプトを提供していますが、上述のようなメリットを享受するために Plack で Perl PSGI アプリケーション化してみましょう。今回の構成は以下の通りです。

  • Web サーバ: nginx
  • PSGI サーバ: Starman
  • Perl PSGI アプリケーション: Plack を用いて自作

carton でモジュールの追加インストール

cpanfile に以下の行を追加します。

$ cd /opt/smokeping-perl5.20.0
$ sudo vi cpanfile
...
requires 'Plack', '0.9980';
requires 'Starman', '0.2000';
requires 'CGI::Emulate::PSGI';

インストールを実行します。キャッシュも作成しておきましょう。

$ sudo su
# plenv exec carton install
# plenv exec carton bundle
# exit

Perl PSGI アプリケーションの作成

以下のファイルを作成するだけです。

$ sudo vi app.psgi

app.psgi

#!/usr/local/plenv/versions/5.20.0/bin/perl
use strict;
use warnings;
use lib '/opt/smokeping-perl5.20.0/lib';

use CGI::Emulate::PSGI;

my $app = CGI::Emulate::PSGI->handler(sub {
    use CGI;
    use Smokeping;
    CGI::initialize_globals();
    my $cfg = "/opt/smokeping-perl5.20.0/etc/config";
    my $q = CGI->new;
    Smokeping::cgi($cfg, $q);
});

動作検証

$ plenv exec carton exec starman -p 8080 app.psgi
$ curl http://127.0.0.1:8080/  ←別ターミナルなどで実行

PSGI/Plack アプリケーションをデーモンとして実行

Perl PSGI アプリケーションを起動します。

$ sudo su
# plenv exec carton exec starman -p 8080 \
--access-log /opt/smokeping-perl5.20.0/var/access_log \
--error-log /opt/smokeping-perl5.20.0/var/error_log \
--user nobody --group nobody --daemonize app.psgi
# exit

オプションの意味は以下のコマンドで確認できます。

$ plenv exec carton exec perldoc starman

例えばログファイルを以下のディレクトリに作成するように指示しています。

$ tail /opt/smokeping-perl5.20.0/var/access_log
$ tail /opt/smokeping-perl5.20.0/var/error_log

SmokePing 本体をデーモンとして実行

If you want to read the rest of this page

SmokePing のインストール手順と基本設定

残り文字数は全体の約 19 %
なつかしのねこ
100 円
Related pages
    概要 WSGI (Web Server Gateway Interface) は PSGI に影響を与えた python の標準化された Web インターフェースです。 Apache + mod_wsgi uwsgi WSGI の実装としては上記二つの選択肢があります。前者は Apache に依存しており更新も活発ではないため、後者の uwsgi を利用します。