はじめに
前々から気になっていたnorikraを弄る時間ができたので弄ってみました。
インストールしてnginxのログをfluentd経由でnorikraに入れるところまでを記載しておきます。
norikraとは!?という質問には触り始めなのであんまりわかっていないですが、個人的には以下が特徴だと思っています。
- JSON形式のデータをリアルタイムで処理をするOSS
- SQLライクな記述で取得するデータを選択可能
- JRubyで記述されている
- GUIがある
以下参考にさせて頂きました。
今回の構成
Nginx(fluentd)サーバー<->Norikraサーバー
の二台構成。
環境情報
- Nginxサーバー
・OS: Ubuntu14.04
・Nginx: nginx/1.4.6
・Ruby: ruby 2.1.5
・fluentd: 0.10.57
- Norikraサーバー
・OS: Ubuntu14.04
・Ruby: jruby-1.7.16.1
・Norikra: 1.1.1
Step1: Rbenvのインストール(Nginxサーバー, Norikraサーバー)
まずはRbenvをインストールします。
$ sudo groupadd -g 1001 rbenv # Rbenv利用グループ
$ sudo groupadd -g 1002 norikra # Norikra利用グループ
$ sudo usermod -G rbenv,norikra ${username}
$ sudo apt-get update
$ sudo apt-get install gcc make openssl libssl-dev git openjdk-7-jre g++ ruby-dev
$ cd /opt
$ sudo git clone git://github.com/sstephenson/rbenv.git
$ sudo mkdir -p /opt/rbenv/shims /opt/rbenv/versions
$ sudo chgrp -R rbenv rbenv
$ sudo git clone git://github.com/sstephenson/ruby-build.git /opt/rbenv/ruby-build
$ cd /opt/rbenv/ruby-build
$ sudo ./install.sh
export RBENV_ROOT="/opt/rbenv"
export PATH="$RBENV_ROOT/bin:$PATH"
eval "$(rbenv init -)"
$ source /etc/profile.d/rbenv.sh
$ rbenv --version
rbenv 0.4.0-129-g7e0e85b
$
さてこれでrbenvが使えるようになりました。
Step2: JRubyのインストール(Norikraサーバー)
JRubyをインストールします。
$ rbenv install --list
jruby-1.7.14
jruby-1.7.15
jruby-1.7.16
jruby-1.7.16.1
jruby-9.0.0.0-dev
jruby-9.0.0.0+graal-dev
jruby-9000-dev
jruby-9000+graal-dev
maglev-1.0.0
$ # 最新版の安定版をインストールします。
$ sudo env RBENV_ROOT=$RBENV_ROOT PATH=$PATH rbenv install -v jruby-1.7.16.1
$ rbenv global jruby-1.7.16.1
$ ruby --version
jruby 1.7.16.1 (1.9.3p392) 2014-10-28 4e93f31 on OpenJDK 64-Bit Server VM 1.7.0_65-b32 +jit [linux-amd64]
$
Step3: Norikraインストール(Norikraサーバー)
$ gem install norikra --no-ri --no-rd
Step4: Norikra起動(Norikraサーバー)
$ sudo mkdir -p /var/log/norikra /etc/norikra /var/run/norikra
$ sudo chgrp norikra /var/log/norikra /etc/norikra /var/run/norikra
$ norikra start -d -l /var/log/norikra
正常にインストールできてればhttp://${norikra_server}:26578
でnorikraのConsole画面にアクセスできます。
Step5: Nginx, Ruby, Fluentdのインストール(Nginxサーバー)
$ sudo apt-get install nginx
$ rbenv install --list
2.1.0
2.1.1
2.1.2
2.1.3
2.1.4
2.1.5
2.2.0-dev
2.2.0-preview1
2.2.0-preview2
$ sudo env RBENV_ROOT=$RBENV_ROOT PATH=$PATH rbenv install -v 2.1.5
$ rbenv global 2.1.5
$ ruby --version
ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux]
$
$ sudo env PATH=$PATH gem install fluentd
$ sudo env PATH=$PATH fluent-gem install fluent-plugin-norikra --no-ri --no-rdoc # Norikraのプラグインインストール
$ sudo env PATH=$PATH fluentd --setup /etc/fluent # Configファイルなどの作成
Step6: Fluentd設定(Nginxサーバー)
Step5で作成したfluentdの設定ファイルを編集してNginxのログがnorikraに飛ぶように設定します。
$ sudo mkdir -p /var/log/fluent
$ sudo chmod +x /var/log/fluent
# Tailing the Nginx Log
<source>
type tail
path /var/log/nginx/access.log
pos_file /var/log/fluent/nginx-access.pos
tag norikra.nginx
format nginx
</source>
<match norikra.*>
type norikra
norikra ${norikra_server}:26571
remove_tag_prefix norikra
target_map_tag true
</match>
$ sudo env PATH=$PATH fluentd -c /etc/fluent/fluent.conf -vv &
Step7: アクセスしてみる - 1(Nginxサーバー)
以下のコマンドでNginxにアクセスしてみます。
$ curl http://localhost
Step8: 確認する/クエリの設定 - 1(Norikraサーバー)
Norikraサーバーでアクセスを確認してみます。
設定が正常に完了していたら、Target=nginx
が自動で作成されていることがわかると思います。
Nginxログの各種fieldも自動で設定されています。
ただし、今の設定では取得したデータに対するクエリを指定していませんので送られてきたデータに対して何もしません。
Consoleでクエリを設定して、送られてきたデータを表示させてみます。せっかくなのでResponseコードが200以外のデータだけを引っかけるクエリを指定してみます。
私の環境では*を指定するとエラーが出たのでここではカラムを個別に指定しています。
Step9: アクセスしてみる - 2(Nginxサーバー)
以下のコマンドでNginxにアクセスします。
ここでは200OK以外のレスポンスを得たいので存在しないパスを指定します。
$ curl http://localhost
$ curl http://localhost
$ curl http://localhost/no_content/
Step10: 確認してみる - 2(Norikraサーバー)
もう一度NorikraのConsoleにアクセスしてみます。
三回アクセスしましたが、eventは一回しか発生していないことがわかります。
404 Not Found
のレスポンスが発生していることがわかります。
おわりに
まだ触り始めなので理解が不十分だと思いますが、norikraを利用することでSQLライクの方法でイベントを定義でき、イベントとアクションを紐付けることで色々と簡単に自動化ができるのかな思いました。
これを一段発展させ何かしらのシステムを作りたいですね^^
おしまい。