Edited at

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

More than 3 years have 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ページ