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インストール
$ 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
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からデータが閲覧できることを確認する。
やり残し
- データをs3にも保存しておく
- td-agent2への対応 http://qiita.com/repeatedly/items/5904e81e1856e0671684
参考にしたWebページ
- Installing Fluentd Using rpm Package | Fluentd http://docs.fluentd.org/articles/install-by-rpm
- fluentdでログをS3に格納する - OpenGroove http://open-groove.net/fluentd/fluentd-s3/
- Kuromojiで日本語全文検索 – AWSで始めるElasticSearch(1) | Developers.IO http://dev.classmethod.jp/cloud/aws/use-elasticsearch-1-use-kuromoji/
- fluentd と Elasticsearch と kibana の組み合わせがとても気に入ったのでメモ - ようへいの日々精進 XP http://inokara.hateblo.jp/entry/2013/09/07/122149
- fluentd + fluent-plugin-twitter + elasticsearch + kibana でお手軽にツイートを可視化する試み - ようへいの日々精進 XP http://inokara.hateblo.jp/entry/2013/12/05/072519
- プラグインの設定を入れると、「process finished code=6」で落ちます · Issue #3 · y-ken/fluent-plugin-twitter https://github.com/y-ken/fluent-plugin-twitter/issues/3
- FluentdからElasticsearchに転送してKibanaで可視化する - okochangのインフラ日誌 http://okochang.hatenablog.jp/entry/2014/03/21/191523
- Elasticsearch - Elastic Searchで全てのデータ(index)を削除する - Qiita http://qiita.com/bounscale/items/c2d2eb6cf61bb1fa8e1b