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

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

最近改めて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はとても見やすくて便利ですね。

  • logstash 2.2.2で行った際、幾つかの設定が変更となっておりましたので、ここに掲示しておきます(DISQUSコメントではインデントが削除されてしまうので、適宜読み替えて下さい)。
    ———-
    input{
    twitter{
    consumer_key => “”
    consumer_secret => “”
    oauth_token => “”
    oauth_token_secret => “”
    keywords => [“aws”]
    full_tweet => true
    }
    }
    output {
    elasticsearch{
    hosts => [“localhost:9200”]
    index => “twitter”
    document_type => “stream”
    }
    stdout {}
    }
    ———-
    変更された部分は

    # ホストとポートの設定(hostsに一纏めに書く事になりました)
    ## ver 1.5.3
    host => localhost
    port => “9200”
    ## ver 2.2.2
    hosts => [“localhost:9200”]
    ## プロトコル設定が廃止(冗長な設定として削除されました)
    ## ver 1.5.3
    protocol => “http”
    ## ver 2.2.2

     
    以上となります。エラーメッセージを読めば分かる範囲の内容だとは思いますが、新しいバージョンでお困りの方がおりましたら、ご参考までに。

    • 佐々木大輔

      @disqus_jHcuyYFQ5t:disqus さん、有益な情報ありがとうございます!