Thursday, May 19, 2016

nginxモジュールのngx_dynamic_upstreamを使えるようにする


nginxモジュールの ngx_dynamic_upstream を試してみたかったので、使えるようにしてみました。
nginxをyumからインストールして、ユーザ追加などの雑用を任せて、そのあとにソースからコンパイルします。
モジュールの使い方については、ここでは説明しません。
環境は、CentOS 6.7です。

nginxの最新版をyumからインストール。
# rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
# yum -y install nginx
オプションを確認します。
# nginx -V
nginx version: nginx/1.10.0
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-http_perl_module=dynamic --add-dynamic-module=njs-1c50334fbea6/nginx --with-threads --with-stream --with-stream_ssl_module --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_v2_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic'
nginxのビルドに必要なライブラリをインストール。
# yum install pcre-devel zlib-devel openssl-devel libxml2-devel libxslt-devel gd-devel perl-ExtUtils-Embed GeoIP-devel
nginxをダウンロード。
$ cd /usr/local/src
$ git clone https://github.com/cubicdaiya/ngx_dynamic_upstream.git
$ wget http://nginx.org/download/nginx-1.10.0.tar.gz
$ tar zxvf nginx-1.10.0.tar.gz
$ cd nginx-1.10.0
configureに、先ほどのオプションを全部追加すると、以下のエラーが出ます。
adding module in njs-1c50334fbea6/nginx
./configure: error: no njs-1c50334fbea6/nginx/config was found
これは、nginx with HTTP JavaScript moduleです。オプションから --add-dynamic-module=njs-1c50334fbea6/nginxを外してconfigureを実行します。
必要な場合は、https://github.com/nginx/njs を準備しましょう。

configureを実行。
$ ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-http_perl_module=dynamic --with-threads --with-stream --with-stream_ssl_module --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_v2_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --add-module=/usr/local/src/ngx_dynamic_upstream
インストール。
# make
# make install
# nginx -V
nginx version: nginx/1.10.0
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-http_perl_module=dynamic --with-threads --with-stream --with-stream_ssl_module --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_v2_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --add-module=/usr/local/src/ngx_dynamic_upstream
ngx_dynamic_upstreamが有効になりました。

Top image from James Morris upstream - we're on the same page

Thursday, May 12, 2016

MySQL HandlerSocketのレイテンシを監視するNagiosプラグイン

https://github.com/takeshiyako2/nagios-check_handlersocket_latency

MySQL HandlerSocketのレイテンシを監視するプラグインを書きました。
簡単な使い方。
% check_handlersocket_latency -w [waring seconds] -c [critical seconds] -host [hostname]
% check_handlersocket_latency -w 0.70 -c 1.00 -host localhost
デフォルトでは、mysqlデータベースのuserテーブルから、Hostがlocalhostのレコードを取り出して、時間を測っています。
デフォルト値は以下のようにしています。
host: localhost
port: 9998
database: mysql
table: user
index: PRIMARY
columns: Host
value: localhost
これは、オプションで変更可能です。
たとえば、以下の様なテーブルを用意したときは、このようになります。
mysql> use sampledb;
mysql> CREATE TABLE personal(id int PRIMARY KEY, name varchar(20));
mysql> INSERT INTO personal (id,name) VALUES (100, "test");
$ ./check_handlersocket_latency -w 0.005 -c 0.020 -host localhost -database sampledb -table personal -columns id -value 100
OK: HandlerSocket read response in 0.001996 s|latency_seconds=0.001996

Tuesday, May 10, 2016

GitとGoの最新バージョンとVulsをインストール CentOS


https://github.com/future-architect/vuls
Vulsをgo getでインストールしようとしたら、gopkg.in/gomail.v2のインストールで止まってしまった。
# go get -v github.com/future-architect/vuls
Fetching https://gopkg.in/gomail.v2?go-get=1
Parsing meta tags from https://gopkg.in/gomail.v2?go-get=1 (status code 200)
get "gopkg.in/gomail.v2": found meta tag main.metaImport{Prefix:"gopkg.in/gomail.v2", VCS:"git", RepoRoot:"https://gopkg.in/gomail.v2"} at https://gopkg.in/gomail.v2?go-get=1
gopkg.in/gomail.v2 (download)
調べたところ、Gitのバージョンが古いので、動かなかったことがわかった。Gitを最新バージョンにしたらうまく動いてくれた。
ここでは、GitとGoの最新バージョンとVulsをインストールするところを説明します。具体的なVulsの使いかたについては、説明しません。

環境は、CentOS 6.7です。
# cat /etc/redhat-release
CentOS release 6.7 (Final)
Git最新版をインストール
https://www.kernel.org/pub/software/scm/git/
yumでインストールした既存のGitを削除。
# git --version
git version 1.7.1
# yum -y remove git
必須ライブラリと、Git最新バージョンをインストール。
# yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker
# wget https://www.kernel.org/pub/software/scm/git/git-2.8.2.tar.gz
# tar zxvf git-*.tar.gz
# cd git-*
# ./configure --prefix=/usr/local
# make prefix=/usr/local all
# make prefix=/usr/local install
# export PATH=/usr/local/bin:$PATH
# git --version
git version 2.8.2
Go最新版をインストール
https://golang.org/dl/
# wget https://storage.googleapis.com/golang/go1.6.2.linux-amd64.tar.gz
# tar -C /usr/local -xzf go1.6.2.linux-amd64.tar.gz
# export PATH=$PATH:/usr/local/go/bin
# go version
go version go1.6.2 linux/amd64
# export GOPATH=$HOME/work
# mkdir work
Vulsをインストール
# go get -v github.com/future-architect/vuls
# ~/work/bin/vuls help
うまく動いたでしょうか?

Top photo from Alan L go!