まるまるこふこふ

数々の次元が崩壊し、全ての生命が塵と化すのを見てきた。私ほどの闇の心の持ち主でも、そこには何の喜びも無かった。

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 でスクレイピングするときのポイントですが、

  1. 非同期でhttpアクセスするので、逐次処理でアクセスしないと、一斉にアクセスされて先方に迷惑がかかる
  2. timestamp 型のデータを突っ込んでおくと、kibana で時系列順に可視化できて便利。

というのがあります。1については、Promise と Array.prototype.reduce を使うと解決できます。

コードは下記にて公開しておきます。使用される方は、先方に迷惑のかからないようにしてください。

github.com

kibana

kibana にアクセスします。デフォルトでは最新15分のデータを表示するので、2005年〜2010年辺りにデータを絞ってみます。f:id:sairoutine:20151227173622p:plain

このように Elasticsearch にぶっこんだデータが表示されたことかと思います。 f:id:sairoutine:20151227174318p:plain

可視化

東方創想話にはタグ機能があるので、これでキャラを絞ってデータを可視化できたりします。 f:id:sairoutine:20151227175112p:plain

古明地こいしに絞って、Y軸にSSの投稿数、X軸に時系を取り、Area chartで表示しました。 東方地霊殿の発表が2008年頃なので、2008年ごろから投稿数が始まっているのも納得です。

f:id:sairoutine:20151227180513p:plain

こちらはLine chart 。八雲紫の投稿数をY軸に取って表示しています。

f:id:sairoutine:20151227181759p:plain

こちらは pie chart 。円グラフのことですね。タグで領域分けしているのですが、 うまいこといっておらず、1文字だけで領域分けされていますね。

これはインデックス時にタグを kuromoji でアナライズしちゃったせいですね。 terms で絞りたいカラムは not_analyzed にする必要があります。

f:id:sairoutine:20151227182045p:plain

最後に vertical bar chart。棒グラフのことですね。 創想話自体の投稿件数を時系列順に表示しています。

終わり

X軸・Y軸に取る値をさまざまに変えられるので、elasticsearch の aggregation 機能をよく知れば、 もっと面白いデータを見ることができるかもしれない。