AWS
fluentd
Elasticsearch
kibana

AWS EC2上にfluentd + fluent-plugin-twitter + elasticsearch + kibana インストールするメモ

More than 1 year has passed since last update.

AWS EC2上にfluentd + fluent-plugin-twitter + elasticsearch + kibana インストールするメモ。

0. instance立ち上げ

EC2上にinstanceを立ち上げる。
とりあえず、お試しならt2.microでも良いかも。

AWS t2.micro
OS: Amazon Linux AMI (HVM)

ツール、データはS3上に上げておくと、外部からダウンロードするより少し早いし、お財布にも少し優しい。

1. yum update

$ sudo yum update -y

2. swap設定

EC2instanceがt2.microのときswap領域を設定する

$ sudo dd if=/dev/zero of=/swap.img bs=1M count=2048
$ sudo chmod 600 /swap.img
$ sudo mkswap /swap.img
$ sudo bash -c 'echo "/swap.img    swap    swap    defaults    0    0" >> /etc/fstab'

swapを有効にする

$ sudo swapon -a

3. 日本時間に設定

$ sudo vi /etc/sysconfig/clock

ZONE="Asia/Tokyo"
に書き換える。

$ sudo ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
$ sudo reboot

4. 開発環境インストール

$ sudo yum -y install gcc* make

5. TreasureDataレポジトリの追加。

install-redhat.sh によりyumレポジトリの登録と、td-agentのrpmパッケージのインストールが行える。

$ sudo bash -c 'curl -L http://toolbelt.treasuredata.com/sh/install-redhat.sh | sh'
$ sudo service td-agent start
$ sudo chkconfig td-agent on

タグを動的に扱うプラグインとプレースホルダを扱えるようにするプラグインを追加でインストール。

$ sudo /usr/lib64/fluent/ruby/bin/fluent-gem update
$ sudo /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-forest
$ sudo /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-config-expander

6. Elasticsearchインストール

ElasticsearchにJavaが必要だが、Amazon Linux AMI (HVM)にはJavaがインストール済み。

公式サイト からダウンロード

$ wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.2.2.noarch.rpm
$ sudo rpm -ivh elasticsearch-1.2.2.noarch.rpm
$ sudo chkconfig elasticsearch on
$ sudo service elasticsearch status

動いていないようなら、起動

$ sudo service elasticsearch start

Elasticsearchの動作確認

テストデータ登録

$ curl -XPUT http://localhost:9200/mytest/test/1 -d '
> {
>   "title" : "test_title",
>   "text"  : "test_text"
> }'

データを検索

$ curl -XGET http://localhost:9200/mytest/test/_search -d '
> {
>   "query":
>   { "match":{"title":"test_title"}}
> }'

Kuromojiプラグインインストール

Kuromojiプラグインは、Elasticsearch用の日本語解析プラグインである。

elasticsearch/elasticsearch-analysis-kuromoji

Elasticsearchのバージョンによって、インストールするバージョンが異なるので注意。

$ sudo /usr/share/elasticsearch/bin/plugin -install elasticsearch/elasticsearch-analysis-kuromoji/2.2.0

ElasticSearchの再起動

$ sudo service elasticsearch restart

テスト用の登録

$ curl -XPUT 'http://localhost:9200/kuro_test/' -d'
  {
      "index":{
          "analysis":{
              "tokenizer" : {
                  "kuromoji" : {
                     "type" : "kuromoji_tokenizer"
                  }
              },
              "analyzer" : {
                  "analyzer" : {
                      "type" : "custom",
                      "tokenizer" : "kuromoji"
                  }
              }
          }
      }
  }'

テスト

$ curl -XPOST 'http://localhost:9200/kuro_test/_analyze?analyzer=analyzer&petty' -d '貴社の記者'

ElasticsearchとKuromojiプラグインで日本語全文検索

$ sudo vi /etc/elasticsearch/elasticsearch.yml
index.analysis.analyzer.default.type: custom
index.analysis.analyzer.default.tokenizer: kuromoji_tokenizer
$ sudo service elasticsearch restart

テスト用の登録

$ curl -XPUT http://localhost:9200/jptest/test/1 -d '
>  {
>    "title" : "メモ",
>    "text"  : "梅酒は水"
>  }'
$ curl -XPUT http://localhost:9200/jptest/test/1 -d '
>  {
>    "title" : "メモ",
>    "text"  : "梅酒は水"
>  }'

梅酒で検索

$ curl -XGET http://localhost:9200/jptest/test/_search -d '
>    {
>      "query":
>      { "match":{"text":"梅酒"}}
>    }'

梅酒はで検索

$ curl -XGET http://localhost:9200/jptest/test/_search -d '
>    {
>      "query":
>      { "match":{"text":"梅酒は"}}
>    }'

両者のスコアの違いを確認する。

Elasticsearchをfluentdで利用するためにfluent-plugin-elasticsearchをインストール

$ sudo /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-elasticsearch

登録されているすべてのインデックスを表示

$ curl -X GET http://localhost:9200/_aliases

次の作業のために、テストデータを削除しておく

$ curl -XDELETE 'http://localhost:9200/*'

7. fluent-plugin-twitterインストール

y-ken/fluent-plugin-twitter

$ sudo yum install openssl-devel libcurl libcurl-devel
$ sudo /usr/lib64/fluent/ruby/bin/fluent-gem install eventmachine
$ sudo /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-twitter

dev.twitter.comでアプリ登録し、以下の情報を入手する。

  • API key
  • API secret
  • Access token
  • Access token secret
$ sudo vi /etc/td-agent/td-agent.conf
<source>
  type twitter
  consumer_key        xxxxxxxx # API key
  consumer_secret     yyyyyyyy # API secret key
  oauth_token         zzzzzzzz # Access token
  oauth_token_secret  pppppppp # Access token secret
  tag                 input.twitter.sampling
  timeline            sampling
  keyword             daihyo
  lang                ja,en
  output_format       nest
</source>

<match input.twitter.sampling>
  type copy
  <store>
    type file
    path /tmp/twitter
  </store>
  <store>
    type elasticsearch
    include_tag_key true
    tag_key @log_name
    host 127.0.0.1
    port 9200
    logstash_format true
    logstash_prefix twitter
    flush_interval 10s
  </store>
</match>
$ sudo service td-agent restart

process finished code=6でtd-agentが落ちてしまう場合、openssl-devel, eventmachineをインストールすると解決する(ことがある?)

twitter-2014.07.15はfluent-plugin-twitterが作ってくれるはず。
分からなければ、登録されているすべてのインデックスを表示して確認すると良い。

$ curl -X GET http://localhost:9200/twitter-2014.07.15/_search -d '
{
"query":
{ "match":{"text":"daihyo"}}
}'

8. Kibana

KibanaはElasticsearchのフロントエンドとして動作するソフトウェアで、Kibanaを使う事によって、ストリーミングデータをリアルタイムで分析することができるようになる。

Kibanaは9200ポート経由でElasticsearchに接続しようとするので、Apacheのリバースプロキシを経由するようにする。
kibana.example.comはヴァーチャルホスト用のアドレス。各自の環境に合わせて変更すること。

$ sudo useradd kibana
$ sudo chmod +x /home/kibana
$ sudo su - kibana
# curl -LO http://download.elasticsearch.org/kibana/kibana/kibana-latest.zip
# unzip kibana-latest.zip
# ln -s /home/kibana/kibana-latest ./kibana
# vi /home/kibana/kibana/config.js
# grep okochang /home/kibana/kibana/config.js
    elasticsearch: "http://kibana.example.com/es/",
# exit
$ sudo yum install httpd -y

digest認証をするなら

$ sudo htdigest -c /etc/httpd/conf/htdigest "Required authentication" kibana
$ sudo vi /etc/httpd/conf.d/kibana.conf
/etc/httpd/conf.d/kibana.conf
NameVirtualHost *:80
<VirtualHost *:80>
    DocumentRoot /home/kibana/kibana
    ServerName kibana.example.com
    ProxyPass /es/ http://localhost:9200/
    ProxyPassReverse /es/ http://localhost:9200/
    CustomLog logs/access_log custom
    ErrorLog logs/error_log
    Options FollowSymLinks
#    <Location />
#        AuthType Digest
#        AuthName "Required authentication"
#        AuthUserFile /etc/httpd/conf/htdigest
#        require valid-user
#        Satisfy any
#        Order deny,allow
#        Deny from all
#        Allow from 127.0.0.1
#    </Location>
</VirtualHost>

必要ならヴァーチャルホスト用のサーバ名をDNS登録する。

ブラウザで http://kibana.example.com にアクセスして、Dashboardからデータが閲覧できることを確認する。

やり残し

参考にしたWebページ