Nagiosのインストール(Nginx + CentOS)

CentOS 6.5 + Nginx環境にOSSの監視ツールNagiosをインストールする。

公式サイトではソースコードからインストール方法が記載されているが、メンテが面倒なのでyumでインストールする。

1. インストール

公式リポジトリにはないため、epelを利用する。

# yum install --enablerepo=epel nagios nagios-plugins

nagiosユーザ、グループも追加される。

nginxがnagios関連ファイルにアクセスできるようにnginxユーザをnagiosグループに追加する。

# usermod -Ga nagios nginx

 

2. BASIC認証の設定

# htpasswd -bc /etc/nagios/passwd id password

idとpasswordは任意の値を設定。

 

3. 通知先を設定

/etc/nagios/objects/contacts.cfg

email nagios@localhot → 通知先に変更

Nagiosの自動起動の設定と、サービスの起動。

# chkconfig nagios on
# service nagios start

この時点で監視が開始されるが、NagiosのWebインタフェース(例えばTactical View)はCGIの設定が完了するまで利用できない。

 

3. CGIの設定

NagiosのWebインタフェース(管理画面)では、PHPとCのCGIを利用するため、php-fpmとfgiwrap + spawn-fcgiをインストールする。php-fpmの設定はこのエントリーで実施済みなので、fcgiwrap + spawn-fcgiの設定をこの記事を参考に行う。

まずはfcgiwrapのインストール。

# cd /usr/local/src/
# git clone git://github.com/gnosek/fcgiwrap.git
# cd /usr/local/src/fcgiwrap
# autoreconf -i
# ./configure
# make
# mv fcgiwrap /usr/local/bin/

initスクリプトを上記サイトのものをそのまま作成する。

/etc/init.d/fcgiwrap

fcgiwrapが自動起動するように/etc/rc.localの最後へ下記を追記する。

sudo -u nginx /etc/init.d/fcgiwrap

fcgiwrapの設定が終わった時点で単純なCGIは動作するが、NagiosのWebインタフェースはうまく動作せず、以下のようなエラーが表示される。おそらく認証周りの問題。

Whoops!

Error: Could not read object configuration data!

Here are some things you should check in order to resolve this error:

Verify configuration options using the -v command-line option to check for errors.
Check the Nagios log file for messages relating to startup or status data errors.

よって、spawn-fcgiを導入する

# yum install spawn-fcgi

ここを参考に、/etc/sysconfig/spawn-fcgiへ以下を記載。最初から記載していある項目はコメントアウト。

CGI_SOCKET=/var/run/fcgiwrap.socket
FCGI_PROGRAM=/usr/local/bin/fcgiwrap
FCGI_USER=nginx
FCGI_GROUP=nginx
FCGI_EXTRA_OPTIONS="-M 0700"
OPTIONS="-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S $FCGI_EXTRA_OPTIONS -F 1 -P /var/run/spawn-fcgi.pid -- $FCGI_PROGRAM"

起動と自動起動の設定。

# chkconfig spawn-fcgi on
# service spawn-fcgi start

 

4. Pluginの設定

この時点でWebインタフェースのServiceを確認すると全ての監視項目がNGになっている。監視を行うにはplug-inのインストールが必要。

今回は、デフォルトの8つに加えて、smtp, popのplug-inをインストールする。

yum install --enablerepo=epel nagios-plugins-ping nagios-plugins-load nagios-plugins-users nagios-plugins-http nagios-plugins-disk nagios-plugins-ssh nagios-plugins-swap nagios-plugins-procs

以上で、監視が開始される。

nagios_status

Webインタフェースで確認できるReportの値をリセットするには/var/log/nagios/archives配下で該当日付のログを消去すればよい。

例えば3日より古いデータを消すには以下。

find /var/log/nagios/archives/ -mtime +3 | xargs rm -f

■参考

PHP5.5をインストール

phpの最新版(2013年11月4日時点だと、5.5)をインストールするには4つの方法がある。今回は(a)-(c)を紹介。

 

手軽さ 信頼性 保守性 独自拡張
(a) 第三者リポジトリからyumでインストール × ×
(b) 第三者リポジトリのSRPMから独自RPMを作成 × ×
(c) 公式サイトのソースコードをビルド、インストール × ×
(d) 公式サイトのソースコードから独自RPMを作成 ×

 

(a) 第三者リポジトリからyumでインストール

PHPの公式サイトからもリンクされている第三者リポジトリremiを利用する。

remiのアップデート。

# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

remi-php55リポジトリが追加されているので、以下を実行。

# yum --enablerepo=remi-php55 install php php-fpm

 

(b) 第三者リポジトリのSRPMから独自RPMを作成

remiからSRPMをダウンロードする。SRPMの一覧はここ

$ curl -O http://rpms.famillecollet.com/SRPMS/php-5.5.5-2.remi.src.rpm

展開。

$ rpm -ivh php-5.5.5-2.remi.src.rpm

rpmbuild/SPECにspecファイルが作成されるので、これを必要に応じて編集後、RPMの作成。

$ rpmbuild -ba rpmbuild/SPECS/php55.spec

rpmbuild/RPMS配下にアーキテクチャー毎にrpmが作成されているので、インストール。

# cd rpmbuild/RPMS/x86_64/
# yum localinstall php php-fpm

インストール時に依存エラーが発生することがあるので、ここを参考に対処。

 

rpmbuildにおいてエラーがでる場合は、以下で対処。

# yum install bzip2-devel curl-devel httpd-devel sqlite-devel libedit-devel libtool-ltdl-devel systemtap-sdt-devel libc-client-devel postgresql-devel unixODBC-devel libxml2-devel net-snmp-devel libxslt-devel t1lib-devel gmp-devel gdbm-devel tokyocabinet-devel libtidy-devel aspell-devel recode-devel enchant-devel libicu-devel
# yum install --enablerepo=remi postfix gd-last-devel libicu-last-devel
# yum install --enablerepo=epel firebird-devel libmcrypt-devel freetds-devel

postfixはsmtpdaemon、gd-last-develはgd-develの代わり。

libicuのインストールで依存エラーがでる場合は以下。

# yum --nodeps -e libicu libicu-devel

 

 (c) 公式サイトのソースコードをビルド、インストール

公式サイトからソースコードをダウンロード。リダイレクトされるので-Lオプションを付ける。

$ curl -O -L http://us3.php.net/get/php-5.5.5.tar.bz2/from/jp1.php.net/mirror

ハッシュを確認してバイナリが正しいかチェック。

$ md5sum mirror

あとは、./configure, ./make, ./make install。

./configureのオプションは./configure -helpにて確認して適宜指定。

 

■参考

MySQLを手動インストール

Linux(CentOS 6.4)上でMySQLの最新版を使用するために、yumを使わず手動インストールする。

MySQLは公式サイトでRPMが配布されているので、それをダウンロードしてインストールするだけですむ。

以下、基本的にはここを参考に進める。

1. RPMのダウンロード

公式サイトのDwonloadから「MySQL Community Edition (GPL)」のダウンロードに進む。Linux – Genericの以下3パッケージをダウンロードする。

  • Linux – Generic (glibc 2.5) (x86, 64-bit), RPM Package, Client Utilities
  • Linux – Generic (glibc 2.5) (x86, 32-bit), RPM Package, Compatibility Libraries
  • Linux – Generic (glibc 2.5) (x86, 32-bit), RPM Package, MySQL Server

通常、ServerとClientがあれば十分だが、Cent OSの場合、デフォルトで古いmysql-libsがインストールされており、これをバージョンアップするためにCompatibility Librariesが必要。

各パッケージの内容はここを参照。

2. インストール

postfixの依存関係でエラーがでたので、取り敢えずpostfixをアンインストール。

yum remove postfixだと、依存関係があるcronなどもアンインストールされてしまうため、rpmコマンドを使用する。

# rpm -e --nodeps postfix

MySQLのインストール。

#yum localinstall MySQL-shared-compat-5.6.14-1.linux_glibc2.5.i386.rpm
#yum localinstall MySQL-server-5.6.14-1.linux_glibc2.5.i386.rpm
#yum localinstall MySQL-client-5.6.14-1.linux_glibc2.5.x86_64.rpm

インストールされていることを確認。

$ yum list installed | grep MySQL

mysqlユーザとグループが追加されている。

$ cat /etc/passwd 
$ cat /etc/group

 

3. 使用準備

初期化

# mysql_install_db --user=mysql

サービス開始。

# mysqld_safe &

mysqlにログインしてrootユーザのパスワードを設定。

# mysql -u root mysql
mysql> SET PASSWORD FOR root@localhost=PASSWORD('new_password');

access denied for user ‘root’@’localhost’ (using password: NO)

のエラーでmysqlにログインできない場合は、ユーザテーブルの作成がうまくいっていない可能性があるので、ここを参考に以下で対処する。

# mysqld_safe --skip-grant-tables &
# mysql -u root mysql
mysql> select * from user; → 現在のユーザテーブルを確認
mysql> truncate table user; → ユーザテーブルを空に。
mysql> flush privileges;
mysql> grant all privileges on *.* to root@localhost identified by 'パスワード' with grant option; → ユーザを追加
mysql> flush privileges;

以上でインストールは完了。次回からはパスワードありの以下でログインする。

# mysql -u root -p

 

4. 基本的なコマンド

データベースの一覧

mysql> show databases;

テーブルの一覧

mysql> use テーブル名;
mysql> show tables;

テーブルの内容確認

mysql> describe テーブル名;

現在のユーザ情報確認

mysql> select user, host, password from mysql.user;

パスワードがない、匿名ユーザを削除

mysql> delete from mysql.user where password='';

データベース作成

mysql> create database データベース名 character set utf8;

ユーザ作成

mysql> grant all privileges on データベース名.テーブル名 to 'ユーザ名'@'localhost' identified by 'パスワード' with grant option;
 → データベース名、テーブル名は*が可能

 

■参考文献

Bashの基本

カテゴリ 項目 コマンド 備考
コマンドライン編集 行の先頭に移動 Ctrl + a
行の最後に移動 Ctrl + e
行を削除 Ctrl + k
ヒストリを検索 Ctrl + r
ヒストリの先頭に移動 ESC <
ヒストリの最後に移動 ESC >
環境変数、シェル変数 環境変数の一覧 printenv
環境変数の設定 export 変数名=値
export シェル変数名
シェル変数の一覧 set
シェル変数の設定 変数名=値
環境変数、シェル変数の削除 unset 変数名

 

■参考

NginxのRPMをリビルドしてインストールする

Nginxをソースコードからコンパイルしてインストールすると以下のデメリットがある。

  • RPM等のパッケージマネージャで管理できない。
  • initスクリプトを自分で作成する必要がある。

一方、RPMからインストールした場合は、コンパイル時のオプションを選択できない。

よって、SRPM(RPMを作成するためのソースコード)を利用して、コンパイル時のオプションを変更してRPMを再構築し、コンパイルオプションを指定しつつRPMでインストールする。

1. 環境構築

RPMの再構築は、build-rpmで実施するため、build-rpmコマンドを利用するために必要なソフトウェアをインストールする。

# yum install build-rpm

 

2. SRPMのダウンロード

公式サイトから実行環境にあったSRPMをダウンロードする。ここでは、Cent OS 6、nginx 1.4.2-1を対象とする。

$ cd ~/
$ curl -O http://nginx.org/packages/centos/6/SRPMS/nginx-1.4.2-1.el6.ngx.src.rpm

 

3. ソースコードの展開

RPMのビルドはrootでなく一般ユーザでの実行が推奨されている。ソースコードの展開。

$ rpm -ivh nginx-1.4.2-1.el6.ngx.src.rpm

~/rpmbuild/ディレクトリと、その配下にSOURCES, SPECディレクトリが自動で作成される。

SOURCESにソースコード、SPECにコンパイル条件等を指定するspecファイル(nginx.spec)がある。

 

4. specファイルの修正

$ cd ~/rpmbuild/SPEC/
$ vim nginx.spec

80行目あたりからの./configureオプションを好みのものに変更する(いらない行を削除する、等)。例えば、以下を削除(同様の記述が2カ所にある)。

--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-mail \
--with-mail_ssl_module \
--with-file-aio \
--with-ipv6 \
--with-debug \

 

5. RPMを再構築

$ rpmbuild -ba nginx.spec

~/rpmbuild/RPMS/x86_64/nginx-1.4.2-1.el6.ngx.x86_64.rpmと、RPMが作成される。

 

6. 再構築したRPMをインストール

$ su -
# rpm -ivh /home/hoge/rpmbuild/RPMS/x86_64/nginx-1.4.2-1.el6.ngx.x86_64.rpm

ソースコードからコンパイル、インストールした場合と異なり、以下のようなメリットがある。

  • ユーザ(nginx)とグループ(こちらもnginx)が作成されている
  • initスクリプトが作成、登録されている。

 

■参考


rpmコマンド

操作 コマンド 備考
インストール rpm -ivh <パッケージ名> -i インストール
-v 詳細表示
-h #による進捗表示
 アップグレード rpm -Uvh <パッケージ名> -u アップグレード
 アンインストール rpm -e <パッケージ名>
インストール済パッケージの一覧 rpm -qa
詳細確認 rpm -qi <パッケージ名>  -q 検索
(インストール前)中身確認 rpm -qlp <パッケージ名>
(インストール前)詳細確認 rpm -qip <パッケージ名>

VPSのベンチマーク

VPSのベンチマークをとってみる。

■対象VPS

  • ServersMan Proプラン CentOS 6.2 64bit(メモリ4GB, CPU 仮想16コア) ※/proc/cpuinfoによる
  • お名前.com VPS メモリ2GBプラン CentOS 5.9 32bit(メモリ2GB, CPU 仮想3コア)

■ベンチマーク

UnixBenchで測る。makeと実行に必要なものをダウンロード。

# yum install perl perl-Time-HiRes make gcc

UnixBenchの最新バージョンを確認。

https://code.google.com/p/byte-unixbench/downloads/list

ダウンロードとmake。

# curl -O https://byte-unixbench.googlecode.com/files/UnixBench5.1.3.tgz
# tar zxf UnixBench5.1.3.tgz
# cd UnixBench
# make

■実行

4コア利用。(16コアで実行したところ、ServersManでエラーが発生したため)

./Run -c 4

■結果

<ServersMan>

16 CPUs in system; running 4 parallel copies of tests

Dhrystone 2 using register variables        9931940.8 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     5376.8 MWIPS (10.2 s, 7 samples)
Execl Throughput                               3458.6 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        269014.1 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks           78252.6 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        738821.0 KBps  (30.0 s, 2 samples)
Pipe Throughput                              870066.7 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 124893.1 lps   (10.0 s, 7 samples)
Process Creation                              10942.4 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   3908.2 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    536.0 lpm   (60.3 s, 2 samples)
System Call Overhead                         820236.3 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0    9931940.8    851.1
Double-Precision Whetstone                       55.0       5376.8    977.6
Execl Throughput                                 43.0       3458.6    804.3
File Copy 1024 bufsize 2000 maxblocks          3960.0     269014.1    679.3
File Copy 256 bufsize 500 maxblocks            1655.0      78252.6    472.8
File Copy 4096 bufsize 8000 maxblocks          5800.0     738821.0   1273.8
Pipe Throughput                               12440.0     870066.7    699.4
Pipe-based Context Switching                   4000.0     124893.1    312.2
Process Creation                                126.0      10942.4    868.4
Shell Scripts (1 concurrent)                     42.4       3908.2    921.8
Shell Scripts (8 concurrent)                      6.0        536.0    893.4
System Call Overhead                          15000.0     820236.3    546.8
                                                                   ========
System Benchmarks Index Score                                         731.3

以下は参考。

  • 並列1、試行回数1(./Run -c 1 -i 1)485.6
  • 並列4、試行回数1(./Run -c 4 -i 1) 731.4
  • 並列8、試行回数1(./Run -c 8 -i 1) 753.2
  • 並列16、試行回数1(./Run -c 16 -i 1) エラー

<お名前.com VPS>

3 CPUs in system; running 4 parallel copies of tests

Dhrystone 2 using register variables       91580154.2 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                    12620.0 MWIPS (9.5 s, 7 samples)
Execl Throughput                              12651.5 lps   (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        607325.2 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          150802.3 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1537542.5 KBps  (30.0 s, 2 samples)
Pipe Throughput                             6203993.4 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                1003879.9 lps   (10.0 s, 7 samples)
Process Creation                              30982.7 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                  15078.6 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                   2081.4 lpm   (60.1 s, 2 samples)
System Call Overhead                        7052367.8 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   91580154.2   7847.5
Double-Precision Whetstone                       55.0      12620.0   2294.6
Execl Throughput                                 43.0      12651.5   2942.2
File Copy 1024 bufsize 2000 maxblocks          3960.0     607325.2   1533.6
File Copy 256 bufsize 500 maxblocks            1655.0     150802.3    911.2
File Copy 4096 bufsize 8000 maxblocks          5800.0    1537542.5   2650.9
Pipe Throughput                               12440.0    6203993.4   4987.1
Pipe-based Context Switching                   4000.0    1003879.9   2509.7
Process Creation                                126.0      30982.7   2458.9
Shell Scripts (1 concurrent)                     42.4      15078.6   3556.3
Shell Scripts (8 concurrent)                      6.0       2081.4   3469.0
System Call Overhead                          15000.0    7052367.8   4701.6
                                                                   ========
System Benchmarks Index Score                                        2897.6

お名前.com VPSの方が4倍スコアがいい。

NginxでBasic認証

Nginx でBasic認証(ID, PASSによる認証)を行う。

 

1. パスワードファイルの作成

htpasswdコマンドでパスワードファイルを生成する。

パスワードファイルの場所は、インターネットから閲覧されなければどこでもよい。ここでは、nginxのconfディレクトリ配下に作成する。

$ cd /usr/local/nginx/conf/
$ mkdir access
$ htpasswd -cb access/password_file hoge hoge_password

 

2. confファイルの編集

localhost ~ /auth/ {
  auth_basic "Needs ID and Pass.";
  auth_basic_user_file access/password_file;
}

 

3. nginxの再起動

$ service nginx restart

以下の再ロードでも大丈夫なようだが、自分の環境ではだめだった。

 $ service nginx reload

 

■参考文献