Logstash + Elasticsearch + Kibana4でTwitterを可視化する

はじめに

最近改めてElasticsearchをいろいろ触っているのですが、その中でElasticsearchにデータを流し込むRiverを覚えた...のですが、RiverはDeprecatingなのでLogstash使おうということらしいです。

ということで、elasticsearch-river-twitterでは無くLogstashを使って、Twitter Streaming APIから取得したデータをElasticsearchに投入し、かつKibana4で可視化してみました。

やってみた

全てEC2上のAmazon Linuxで作業を行っています。

Logstashのインストール

Logstashはjavaで動くので、javaが入ってることを確認します。

$ java -version
java version "1.7.0_85"
OpenJDK Runtime Environment (amzn-2.6.1.3.61.amzn1-x86_64 u85-b01)
OpenJDK 64-Bit Server VM (build 24.85-b03, mixed mode)

次にLogstashの公式Webサイトからrpmをゲットしてインストールします。

$ wget https://download.elastic.co/logstash/logstash/packages/centos/logstash-1.5.3-1.noarch.rpm
$ sudo rpm -ivh logstash-1.5.3-1.noarch.rpm

インストールされたことを確認します。

$ /opt/logstash/bin/logstash --version
logstash 1.5.3

この状態だとLogstashのバイナリがあるディレクトリにPATHが通っていませんので、PATHを通しておきます。

$ export PATH=$PATH:/opt/logstash/bin

Elasticsearchのインストール

最新のElasticsearchのrpmファイルをゲットし、インストールします。

$ wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.2.noarch.rpm
$ sudo yum install elasticsearch-1.7.2.noarch.rpm

そして起動。

$ sudo service elasticsearch start
Starting elasticsearch:                                    [  OK  ]

Twitter Appの作成

Twitter AppsからTwitter Streaming APIを取得するためのアプリケーションを作成します。

Twitter_Application_Management

こんな感じで、適当に名前を付けます。

Create_an_application___Twitter_Application_Management

利用許諾にagreeして[Create your Twitter application]ボタンをクリック。

Create_an_application___Twitter_Application_Management 2

これでアプリケーションが出来上がりますので、コンシューマーキー、コンシューマーシークレットキー、OAuthトークン、OAuthシークレットトークンを取得します。

Logstashの実行

以下のように、inputとしてTwitterを指定します。また、全てのtweetを対象に、"aws"というキーワードで取得するようにしました。

$ logstash -e 'input { 
  twitter {
    consumer_key => "<YOUR_CONSUMER_KEY>"
    consumer_secret => "<YOUR_CONSUMER_SECRET_KEY>"
    oauth_token => "<YOUR_OAUTH_TOKEN>"
    oauth_token_secret => "<YOUR_OAUTH_SECRET_TOKEN>"
    keywords => ["aws"]
    full_tweet => true
  }} 
output { 
    elasticsearch 
      { host => localhost
        port => "9200"
        protocol => "http"
        index => "twitter"
        document_type => "stream"
      } 
    stdout { } }'

Kibana4で可視化

Kibanaの公式Webサイトから最新のtar.gzファイルを取得し、 展開します。

$ wget https://download.elastic.co/kibana/kibana/kibana-4.1.2-linux-x64.tar.gz
$ tar xvzf ./kibana-4.1.2-linux-x64.tar.gz
$ cd ./kibana-4.1.2-linux-x64

そしてKibana4を実行します。

$ sudo ./bin/kibana

http://EC2のIPアドレス:5601/にアクセスします。初期設定で、以下の通り対象とするindexを設定し、[Create]ボタンをクリックします。

Settings_-_Kibana_4

[Discover]画面を見ると、こんな風にデータが取得できていることがわかります。

Discover_-_Kibana_4_と_1__ec2-user_ip-172-31-14-208____ssh__と_名称未設定_と_名称未設定フォルダ

Twitterのuser.langでパイチャートにしてみました。圧倒的にenが多いですね。

Visualize_-_Kibana_4

さいごに

超簡単!そしてやっぱりkibana4はとても見やすくて便利ですね。