78
80

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-07-16

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ページ

78
80
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
78
80

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?