Tuesday, June 24, 2014

NagiosにNagiosgraphを導入して、グラフを表示する方法


Naigosと、Nagiosgraph(http://nagiosgraph.sourceforge.net/)をインストールして、Naigosが取得したデータをグラフで見れるようにします。
以下の様なグラフを表示して、数値を「見える化」してみます。


OSはCentOS6.5です。

# cat /etc/redhat-release
CentOS release 6.5 (Final)

Naigosをインストール

Naigosをyumでインストールしちゃいます。
一緒に、Nagiosgraphで必要になるPerlモジュールも一緒にインストールしておきます。
# yum --enablerepo=epel -y install nagios nagios-plugins nagios-plugins-all gd-devel perl-CGI rrdtool-perl perl-GD perl-Time-HiRes perl-Data-Dumper nagios-plugins-nrpe

nagios管理ユーザーのBASIC認証を設定します。
# htpasswd /etc/nagios/passwd nagiosadmin
New password:[パスワードを入力]
Re-type new password:[パスワードを入力]
Updating password for user nagiosadmin
nagiosをスタートして、自動起動の設定をしておきます。
# service nagios start
# chkconfig nagios on

httpdをスタート。
# service httpd start

ブラウザでアクセスしてみましょう。
http://サーバー名/nagios/

ちゃんとnagiosが立ち上がっているでしょうか?

左の[Services]をクリックしてlocalhostの状態を確認してみましょう。

うまくnagiosが起動しました。
http://サーバー名/ のapacheのウェルカムページが
「HTTP WARNING: HTTP/1.1 403 Forbidden - 5237 bytes in 0.001 second response time 」
となっているので、この項目がWARNINGになっています。
正しい挙動です。

設定ファイルなどは /etc/nagios ディレクトリ以下に設置されています。
便宜設定しておきましょう。

Nagiosgraphをインストール


最新版を公式ページ(http://nagiosgraph.sourceforge.net/)で確認します。
ここでは、バージョン1.5.1を使います。

Nagiosgraphをダウンロードして解凍。
# cd /usr/local/src
# wget http://downloads.sourceforge.net/project/nagiosgraph/nagiosgraph/1.5.1/nagiosgraph-1.5.1.tar.gz
# tar xvf nagiosgraph-1.5.1.tar.gz
# cd nagiosgraph-1.5.1

インストール時に、いくつかパスを聞かれますが、ここでは「Destination directory (prefix)」のみ入力します。
あと、いくつか「y」を入力して、その他は、Enterでスキップしていきます。
※色を変えた箇所が入力した箇所です。
最後に、自動でnagiosとapacheの設定ファイルを書き換えます。
書き換えたファイルは、バックアップが作成されます。
# ./install.pl --layout redhat
checking required PERL modules
  Carp...1.11
  CGI...3.51
  Data::Dumper...2.124
  Digest::MD5...2.39
  File::Basename...2.77
  File::Find...1.14
  MIME::Base64...3.08
  POSIX...1.17
  RRDs...1.3008
  Time::HiRes...1.9721
checking optional PERL modules
  GD...2.44
  Nagios::Config... ***FAIL***
checking nagios installation
  found nagios exectuable at /usr/sbin/nagios
  found nagios init script at /etc/init.d/nagios
checking web server installation
  found apache executable at /usr/sbin/httpd
  found apache init script at /etc/init.d/httpd
Destination directory (prefix)? [/] /usr/local/nagiosgraph
Location of configuration files (etc-dir)? [/etc/nagiosgraph]
Location of executables? [/usr/libexec/nagiosgraph]
Location of CGI scripts? [/usr/lib/nagiosgraph/cgi-bin]
Location of documentation (doc-dir)? [/usr/share/doc/nagiosgraph]
Location of examples? [/usr/share/nagiosgraph/examples]
Location of CSS and JavaScript files? [/usr/share/nagiosgraph/htdocs]
Location of utilities? [/usr/share/nagiosgraph/util]
Location of state files (var-dir)? [/var/spool/nagiosgraph]
Location of RRD files? [/var/spool/nagiosgraph/rrd]
Location of log files (log-dir)? [/var/log/nagiosgraph]
Path of log file? [/var/log/nagiosgraph/nagiosgraph.log]
Path of CGI log file? [/var/log/nagiosgraph/nagiosgraph-cgi.log]
Base URL? [/nagiosgraph]
URL of CGI scripts? [/nagiosgraph/cgi-bin]
URL of CSS file? [/nagiosgraph/nagiosgraph.css]
URL of JavaScript file? [/nagiosgraph/nagiosgraph.js]
URL of Nagios CGI scripts? [/nagios/cgi-bin]
Path of Nagios performance data file? [/tmp/perfdata.log]
username or userid of Nagios user? [nagios]
username or userid of web server user? [apache]
Modify the Nagios configuration? [n] y
Path of Nagios configuration file? [/etc/nagios/nagios.cfg]
Path of Nagios commands file? [/etc/nagios/objects/commands.cfg]
Modify the Apache configuration? [n] y
Path of Apache configuration directory? [/etc/httpd/conf.d]
configuration:
  ng_prefix            /usr/local/nagiosgraph
  ng_etc_dir           /etc/nagiosgraph
  ng_bin_dir           /usr/libexec/nagiosgraph
  ng_cgi_dir           /usr/lib/nagiosgraph/cgi-bin
  ng_doc_dir           /usr/share/doc/nagiosgraph
  ng_examples_dir      /usr/share/nagiosgraph/examples
  ng_www_dir           /usr/share/nagiosgraph/htdocs
  ng_util_dir          /usr/share/nagiosgraph/util
  ng_var_dir           /var/spool/nagiosgraph
  ng_rrd_dir           /var/spool/nagiosgraph/rrd
  ng_log_dir           /var/log/nagiosgraph
  ng_log_file          /var/log/nagiosgraph/nagiosgraph.log
  ng_cgilog_file       /var/log/nagiosgraph/nagiosgraph-cgi.log
  ng_url               /nagiosgraph
  ng_cgi_url           /nagiosgraph/cgi-bin
  ng_css_url           /nagiosgraph/nagiosgraph.css
  ng_js_url            /nagiosgraph/nagiosgraph.js
  nagios_cgi_url       /nagios/cgi-bin
  nagios_perfdata_file /tmp/perfdata.log
  nagios_user          nagios
  www_user             apache
  modify_nagios_config y
  nagios_config_file   /etc/nagios/nagios.cfg
  nagios_commands_file /etc/nagios/objects/commands.cfg
  modify_apache_config y
  apache_config_dir    /etc/httpd/conf.d
  apache_config_file
Continue with this configuration? [y] y

nagiosの設定ファイルをチェック
# /usr/sbin/nagios -v /etc/nagios/nagios.cfg

nagiosをリスタート
# service nagios restart

※ Apache/2.4以上の場合は下記設定を変更しておきます。2箇所あります。
/etc/httpd/conf.d/nagiosgraph.conf
Order allow,deny
Allow from all
->
Require all granted

httpdをリスタート
# service httpd restart

しばらくすると、以下のディレクトリにグラフ用のrrdファイルが作成されていきます。
# cd /var/spool/nagiosgraph/rrd
# ls -al
合計 12
drwxr-xr-x 3 nagios root   4096  6月 24 16:54 2014 .
drwxr-xr-x 3 root   root   4096  6月 24 16:48 2014 ..
drwxrwxr-x 2 nagios nagios 4096  6月 24 16:55 2014 localhost
そうすると、以下のURLでnagiosgraphのURLが確認できるようになります。ブラウザでアクセスしてみましょう。
http://サーバー名/nagiosgraph/cgi-bin/show.cgi

エラーがでたり、うまくいかなかったらnagiosのログを確認しましょう。
# tail -f /var/log/nagios/nagios.log

nagiosのテンプレートファイルを編集して、nagiosのコンソール画面からグラフを見れるようにします。
以下を追記。
# vim /etc/nagios/objects/templates.cfg
define service {
       name graphed-service
       action_url /nagiosgraph/cgi-bin/show.cgi?host=$HOSTNAME$&service=$SERVICEDESC$' onMouseOver='showGraphPopup(this)' onMouseOut='hideGraphPopup()' rel='/nagiosgraph/cgi-bin/showgraph.cgi?host=$HOSTNAME$&service=$SERVICEDESC$&period=week&rrdopts=-w+450+-j
       register 0
     }

サーバの監視ファイルのuseにgraphed-serviceを追加していきます。
カンマ区切りで追加しますが、スペースを空けるとエラーになるので注意です。
それぞれの監視項目に、graphed-serviceを追加しておきましょう。
# vim /etc/nagios/objects/localhost.cfg
define service{         use                             local-service,graphed-service         host_name                       localhost         service_description             PING         check_command                   check_ping!100.0,20%!500.0,60%         } define service{         use                             local-service,graphed-service         host_name                       localhost         service_description             Root Partition         check_command                   check_local_disk!20%!10%!/         }

nagiosの設定ファイルをチェック
# /usr/sbin/nagios -v /etc/nagios/nagios.cfg

nagiosをリスタート
# service nagios restart

ブラウザでアクセスしてみましょう。

四角いグラフアイコンが追加されたのがわかります。
Total Processesなど、グラフの出やすい項目で、ちゃんと描画されているか確認してみましょう。

logrotateを設定


# vim /etc/logrotate.d/nagiosgraph
/var/log/nagiosgraph/*log {
    daily
    dateext
    create
    missingok
    compress
    rotate 30
}

# logrotate -dv /etc/logrotate.d/nagiosgraph
# logrotate -fv /etc/logrotate.d/nagiosgraph


まとめ。

Nagiosで取得した情報をNagiosgraphによってグラフ化しました。
久しぶりに、Nagiosgraphのページを見たらアップデートされていたので導入をしてみました。
Nagiosgraphは、リリースされてから時間がたつのですが、案外、日本語の情報がなかったので、再度、導入方法についてまとめた意味はあったかと思います。
こういった監視ツールは、SaaSサービスも含め色々リリースされている昨今ですが、まだまだNagiosも行けるなーと感じました。

※こちらも参考にしてみてください。
Nagiosgraphのタイムアウトを解決する
http://takeshiyako.blogspot.jp/2014/07/nagiosgraph.html

Friday, June 6, 2014

さくらのクラウドでロードバランサを設定する方法



さくらのクラウドでロードバランサを設定する方法です。

最初、公式の説明(http://cloud-news.sakura.ad.jp/load-balancer/)を見ていたのですが、スイッチとルータの説明が省かれていて良く分らなかったんですよね・・・
スイッチとルータの設定を補完して、自分なりにまとめてみました。
サーバにsshログインしてファイルを編集する能力があれば、誰でも簡単に設定できると思います。

スイッチの追加



[ネットワーク]->[追加]->スイッチ作成画面

スイッチの名前を記入して、ルータ「はい」を選択。
プリフィックスと帯域はお好みで設定します。
右下の「作成」をクリックして、スイッチ + ルータを作成します。

スイッチの確認


暫くすると、スイッチができ上がりました。
確認しましょう。

該当スイッチを選択->[詳細]

ルータの情報



[ルータ]のタブ

ルータの情報がみれます。
割当可能範囲が使えるIPアドレスの範囲になります。
メモしておきましょう。後で必要になります。

今回は、以下のIPアドレスを使っていきます。
割当可能範囲:133.242.25.164 ~ 174

IPアドレスを以下のように割り当てていきます。
---
ロードバランサ IPV4アドレス#1:133.242.25.164
ロードバランサ IPV4アドレス#2:133.242.25.165
ロードバランサ VIPアドレス:133.242.25.166
テストサーバ IPアドレス:133.242.25.167
---


ロードバランサの作成


[アプライアンス]->[追加]

ロードバランサの作成画面です。
せっかくなので、冗長化+ハイスペックプランで設定します。
IPV4アドレス#1と#2には、ルータで作られた割当可能範囲のIPアドレスを入力します。

接続先スイッチ:先ほど作成したスイッチを選ぶ
冗長化:はい
プラン:ハイスペックプラン
VRID:1
IPV4アドレス#1:133.242.25.164
IPV4アドレス#2:133.242.25.165

名前を適当に入れたら、[作成]をクリック。

ロードバランサの起動


[アプライアンス]タブをクリック。
ステータスが"コピー中"のロードバランサがあります。
暫く待ちましょう。

"利用可能"になったら、ロードバランサを選んで[詳細]をクリック。

ロードバランサの詳細


[VIP設定]->[追加]

VIP設定を追加します。
VIPアドレスにはルータで作られた割当可能範囲のIPアドレスを入れます。

VIPアドレス:133.242.25.166
ポート番号:80
チェック間隔:10

このVIPアドレスが、インターネットからアクセスできるIPアドレスになります。
インターネット -> ロードバランサ(133.242.25.166) -> サーバ1, サーバ2 
というイメージです。

入力ができたら、[作成]->[反映]


タブが一つ増えているのが分るでしょうか。
先ほど入力した [VIPアドレス:80] というタブが出来上がりました。
あとで、サーバを作成したら、このタブからロードバランサ配下に配置するサーバを設定していきます。

マップの確認


右上の[マップ]をクリック。
マップはこのようになっています。
スイッチとロードバランサがくっついているのが分りますね。
ひとまずは、ルータ・スイッチ・ロードバランサの設定は完了です。

次にサーバを立てていきます。

サーバの追加


名前とホスト名は test1 としました。
NICの設定で、[スイッチに接続]を選択。
プルダウンから、先ほど作成したスイッチを選びます。
IPアドレスには、割当可能範囲のIPアドレスを入れます。ここには、いままで使っていないIPアドレスを使います。

IPアドレス:133.242.25.167

ゲートウェイには、ルータのゲートウェイIPアドレスが自動で入ります。
その他はお好みで設定しましょう。
今回は、アーカイブに CentOS 6.5 64bit (基本セット) を選びました。

[作成]をクリック。

サーバが出来上がるまで、しばらく待ちましょう。

サーバの確認

サーバが立ち上がったら。
ターミナルを立ち上げて、sshでログインしてみましょう。

$ ssh root@133.242.25.167

The authenticity of host '133.242.25.167 (133.242.25.167)' can't be established.
RSA key fingerprint is 74:da:d3:10:e7:4c:1c:96:c8:a7:71:72:32:1a:01:67.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '133.242.25.167' (RSA) to the list of known hosts.
root@133.242.25.167's password: パスワードを入力

[root@test1 ~]#

ログインできたでしょうか?

HTTPサーバとしてnginxをインストールしておきます。
# yum -y install nginx

nginxをスタート
# service nginx start

ブラウザでアクセスしてみましょう。
IPアドレスは、先ほどサーバ作成のときに入力したIPアドレスです
http://IPアドレス/

サーバのネットワーク設定

sysctl.confに以下を追記します。

# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

設定を反映します。

# sysctl -p

ループバックアドレスの追加設定をします。
IPADDRには、ロードバランサのVIPアドレスを設定します。

# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=133.242.25.166
NETMASK=255.255.255.255

lo:0デバイスを有効化します。

# ifup lo:0

確認します。

# ifconfig lo:0
lo:0      Link encap:Local Loopback
          inet addr:133.242.25.166  Mask:255.255.255.255
          UP LOOPBACK RUNNING  MTU:16436  Metric:1

ロードバランサにサーバを追加


[アプライアンス]->ロードバランサを選んで[詳細] ->
先ほど作成した [VIPアドレス:80] というタブ -> [追加]

IPアドレスにサーバのIPアドレスを入れます。

IPアドレス:133.242.25.167 
ポート番号:80
監視方法:http
パス:/
レスポンスコード:200

[追加] -> [反映]

マップを確認してみましょう。


スイッチを経由してロードバランサとテストサーバが繋がっていますね。

ロードバランサに追加したサーバのステータスを確認

[VIPアドレス:80] というタブをみると、サーバのステータスが確認できます。
ステータスUPになっているでしょうか?

ブラウザで確認してみましょう。
http://ロードバランサのVIPアドレス/

これにて全ての設定が完了です。
お疲れさまでした!

まとめ

さくらのクラウドで、ロードバランサを使えるようにしました。
設定は、慣れてしまえば簡単だと思います。

個人的には、もうちょっとロードバランサのスペックがあがってほしいですね。
月に数十万PVくらいのWEBサービスならば十分ですが、
大きめなトラフィックを捌こうとすると、ハイスペックプランでは全然足りない・・・ので、ロードバランサとサーバを複数セット並べるという構成を取らざるを得ないかんじになったりします。

今後のスケールアップに期待です。

Monday, June 2, 2014

ひとこと!というサイトを作りました。

ひとこと!
http://hitokoto.co/

というサイトを作りました。
画像に文字を入れる事ができるサイトです。

もともとは、「さいきん文字の入った画像がシェアされてくる事が多くなったよね」という話題から、Rails4の勉強がてら、それじゃ作ってみよう。
と、数日かけてRails4を使ってモックを作ったのが始まります。
システムは、CentOS + nginx + Passenger + Ruby on Rails4 + MySQL + Redis という、いまどきスタンダードなものです。
大体の骨組みはこれで完成していて。
あとは友人に頼んでデザインを組んでもらいました。

けっこういい感じになったのでは?と思います。
ご意見ご要望がありましたら、連絡ください。参考にさせて頂きます。

あ、あと。@attripにも紹介して頂きました。
有り難うございます!

画像にひとこと言葉を入れて遊ぶサービス、ひとこと!をリリースしました! | @attrip