Amazon Elasticsearch ServiceにTwitterの情報を集めてみよう EC2 + AWS ES


# 何をしているか

Twitterの情報楽に集めて色々出来ないかと思い試してみました。
割りとメジャーなネタなのか結構資料あって楽でした。
logstash + Elasticserchの勉強が出来て良かったです。


# 前提
- Elasticserch Serviceの構築が完了し、AWSesに対してデータの投入や削除が出来るようにポリシーの設定まで完了している
- コンソール上のKibanaエンドポイントからKibanaのコンソールが見れるようになっている

_今回省略しましたが、需要あるなら書こうかな・・・？_

# 手順

## 1.EC2インスタンスの作成
Ec2を一台作成します。

- SSHが出来るようにしておく

### EC2の準備

#### yum をアップデートしておきます

```bash:コマンド
sudo su
yum update -y
```

#### Javaのインストール
AmazonLinuxには1.7が入っていた(2017/04 現在)のでjava1.8系を導入

まず確認

```bash:コマンド
java -version
```

```:結果
java version "1.7.0_131"
OpenJDK Runtime Environment (amzn-2.6.9.0.71.amzn1-x86_64 u131-b00)
OpenJDK 64-Bit Server VM (build 24.131-b00, mixed mode)
```

インストール

```bash:コマンド
yum -y install java-1.8.0-openjdk-devel
alternatives --config java
```

alternativesコマンドで1.8を指定する

```bash:コマンド
java -version
```

```:結果
openjdk version "1.8.0_121"
OpenJDK Runtime Environment (build 1.8.0_121-b13)
OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)
```

```bash:コマンド
javac -version
```

```:結果
javac 1.8.0_121
```

javacのほうが1.7だったら

```alternatives --config javac``` で1.8を指定する

参考: [Amazon LinuxでJava8/Tomcat8の環境を構築する| Developers.IO](http://dev.classmethod.jp/cloud/aws/java8_tomcat8_on_amazon_linux/)

#### logstashをインストールする

yumから最新版をインストール出来るようにします
参考: [公式リファレンス](https://www.elastic.co/guide/en/logstash/current/installing-logstash.html)

鍵のインストールし、レポジトリを登録します

```bash:コマンド
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
```

```:戻り値
なし
```

```bash:コマンド
ls /etc/yum.repos.d/
```

```:結果
amzn-main.repo  amzn-nosrc.repo  amzn-preview.repo  amzn-updates.repo  epel.repo  epel-testing.repo
```

では登録

```bash:コマンド
cat << _FIN_ > /etc/yum.repos.d/logstash.repo
[logstash-5.x]
name=Elastic repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
_FIN_
```

```bash:確認
cat /etc/yum.repos.d/logstash.repo
```

```:結果
[logstash-5.x]
name=Elastic repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
```

インストール

```bash:コマンド
yum install logstash -y
```

インストール出来たか確認

```bash:コマンド
/usr/share/logstash/bin/logstash --version
```

```:結果
logstash 5.3.1
```

logstash-output-amazon_esプラグインのインストール

参考：[logstash-output-amazon_esを使ってAmazon Elasticsearch Serviceにデータを投入する | Developers.IO](http://dev.classmethod.jp/cloud/aws/amazon-es-using-logstash-plugin/)
記事で書かれているものと、logstashのバージョンがだいぶ違うのでパスが異なります。注意してください

```bash:コマンド
/usr/share/logstash/bin/logstash-plugin install logstash-output-amazon_es
```

ちょっと時間かかります。待ちましょう

```:戻り値
Validating logstash-output-amazon_es
Installing logstash-output-amazon_es
Installation successful
```

上記以外でエラーが出たら恐らくJava関係だと思うので戻って確認しましょう。

```
vi  /etc/logstas/logstash.yml
```



confファイルの設定
Twitterの方は以前書いたこれを参考に
[Twitter Developer登録](http://qiita.com/Yuki_BB3/items/f3aaf62d8a1b1859a6ca)

```bash:変数指定
TWI_KEY=記事を参考に
TWI_KYE_SEC=記事を参考に
TWI_TOKEN=記事を参考に
TWI_TOKEN_SEC=記事を参考に
ES_EDP=ESのエンドポイントを記載(******.es.amazonaws.com)
ES_REG=ESを立てたリージョンを記載

```

```bash:コマンド
cat << _FIN_ > /etc/logstash/conf.d/twitter.conf
input {
  twitter {
    consumer_key => "$TWI_KEY"
    consumer_secret => "$TWI_KYE_SEC"
    oauth_token => "$TWI_TOKEN"
    oauth_token_secret => "$TWI_TOKEN_SEC"
    keywords => ["引っ掛けたいキーワード"]
    full_tweet => true
  }
}
output { 
    amazon_es {
        hosts => ["$ES_EDP"]
        region => "$ES_REG"
        index => "twitter"
        document_type => "stream"
    }
    stdout { } 
}
_FIN_
```

```bash:コマンド
cat /etc/logstash/conf.d/twitter.conf
```

これで指定したとおりに結果が帰ってくれば大丈夫です。

実行

```bahs:コマンド
/usr/share/logstash/bin/logstash --path.settings /etc/logstash -f /etc/logstash/conf.d/twitter.conf
```

しばらく待つとスタートします。

```
2017-04-26T09:50:06.000Z %{host} %{message}
```

こんな感じで標準出力が出てくればOKです。
引っかかりが弱いツイートだとゆっくり出てきますが、ものすごい早いやつかませるととんでもなく大量に出てきます。

https://www.elastic.co/guide/en/logstash/current/plugins-inputs-twitter.html
ここに書いてある通りですが、ストリーミング全部喰って、読み込み制限かかったら5分待機してもう一回読み込む様になってます。

Kibanaで確認すれば情報の確認ができると思います。

__Kibanaの調教はまた別途溜まったら書きます。__