IDCFクラウド上に Elasticsearch 2.0 + kibana 4構築
IDCFクラウド上に Elasticsearch 2.0 + kibana 4を構築して
可視化して遊んでみます。
IDCFクラウドのS2 CentOS6.5です。
各種インストール
Elasticsearch は java で動くので java をインストール
# Install Java sudo yum install -y java-1.8.0-openjdk
# Install Setting Elasticsearch 2.0 sudo rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch vim /etc/yum.repos.d/elasticsearch.repo
elasticsearch.repo に以下の記述をします。
[elasticsearch-2.0] name=Elasticsearch repository for 2.0 packages baseurl=http://packages.elastic.co/elasticsearch/2.x/centos gpgcheck=1 gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch enabled=1
# Install Elasticsearch 2.0 sudo yum install elasticsearch chkconfig --add elasticsearch sudo service elasticsearch start
日本語解析プラグインのkuromojiを入れます。
# Install Kuromoji sudo yum install -y /usr/lib64/libssl3.so /usr/share/elasticsearch/bin/plugin install analysis-kuromoji
# Install Kibana 4.3.0 wget https://download.elastic.co/kibana/kibana/kibana-4.3.0-linux-x64.tar.gz tar xvzf kibana-4.3.0-linux-x64.tar.gz mv kibana-4.3.0-linux-x64 kibana
sense は kibana のプラグインです。kibana の可視化とは関係ありませんが、
kibana 上から query を記述・発行できるエディタが使用できるので便利です。
# Install Sense ./bin/kibana plugin --install elastic/sense
# start kibana cd kibana/ ./bin/kibana >/dev/null 2>&1 &
ポートを開ける
kibana はデフォで5601ポートを使用するので、5601のポートを開放します。
kibana 4から静的ファイルベースでなく Node.jsのアプリケーションになったため、 Elasticsearch のポートを開ける必要はありません。
データを突っ込む
東方創想話というサイトがあります。
東方プロジェクトの二次創作SSが投稿されるサイトです。
実はこのサイト、JSON APIを公開しているので、それを取得して、Elasticsearchにぶっこむコードを書きます。
API · mfakane/Megalopolis Wiki · GitHub
JSONをスクレイピングするスクリプトですが、Node.js を使って今回は書きました。
# Install Node sudo yum install -y epel-release yum install -y nodejs npm --enablerepo=epel
Node.js でスクレイピングするときのポイントですが、
- 非同期でhttpアクセスするので、逐次処理でアクセスしないと、一斉にアクセスされて先方に迷惑がかかる
- timestamp 型のデータを突っ込んでおくと、kibana で時系列順に可視化できて便利。
というのがあります。1については、Promise と Array.prototype.reduce を使うと解決できます。
コードは下記にて公開しておきます。使用される方は、先方に迷惑のかからないようにしてください。
kibana
kibana にアクセスします。デフォルトでは最新15分のデータを表示するので、2005年〜2010年辺りにデータを絞ってみます。
このように Elasticsearch にぶっこんだデータが表示されたことかと思います。
可視化
東方創想話にはタグ機能があるので、これでキャラを絞ってデータを可視化できたりします。
古明地こいしに絞って、Y軸にSSの投稿数、X軸に時系を取り、Area chartで表示しました。 東方地霊殿の発表が2008年頃なので、2008年ごろから投稿数が始まっているのも納得です。
こちらはLine chart 。八雲紫の投稿数をY軸に取って表示しています。
こちらは pie chart 。円グラフのことですね。タグで領域分けしているのですが、 うまいこといっておらず、1文字だけで領域分けされていますね。
これはインデックス時にタグを kuromoji でアナライズしちゃったせいですね。
terms で絞りたいカラムは not_analyzed
にする必要があります。
最後に vertical bar chart。棒グラフのことですね。 創想話自体の投稿件数を時系列順に表示しています。
終わり
X軸・Y軸に取る値をさまざまに変えられるので、elasticsearch の aggregation 機能をよく知れば、 もっと面白いデータを見ることができるかもしれない。