LoginSignup
0
1

More than 5 years have passed since last update.

Elasticsearch入門

Last updated at Posted at 2017-06-12

Elasticsearch構築メモ

環境

OS
Censtos7.2

ソフトウェア
Elasticsearch 5.2.2
kibana 5.2.2
grafana 4.1

cerebro 0.6.3
ハードウェア
メモリ : 4GB
CPU : 2core

インストール

やんごとなき理由でローカルインストールです・・・


 su -l
 yum install -y elasticsearch-5.2.2.rpm
 yum install -y kibana-5.2.2-x86_64.rpm
 yum install -y grafana-4.1.2-1486989747.x86_64.rpm
 tar zxvf cerebro-0.6.3.tgz

設定

クラスタ設定

今回は推奨の3台構成。


 vi /etc/elasticsearch/elasticsearch.yml
+ network.host: 0.0.0.0
+ discovery.zen.ping.unicast.hosts: ["ip_address1", "ip_address2","ip_address3"]
+ discovery.zen.minium_master_nodes: 2

discovery.zen.minuum_master_nodesについては公式にもある通り、
クラスタ構成台数/2+1に設定します。

kibana設定

vi /etc/kibana/kibana.yml
+ server.host: 0.0.0.0

また、5.2では一部kibanaのコードにバグがあり、ファイヤーウォール環境下ではページ描画に時間がかかるため以下の設定を変更します。


# vi /usr/share/kibana/src/server/config/schema.js

- manifestServiceUrl: _joi2['default'].string()['default']('https://tiles.elastic.co/v2/manifest'),
+ manifestServiceUrl: _joi2['default'].string()['default']('https://localhost'), 

調べるとどうもhttps://tiles.elastic.co/v2/manifest?my_app_version=5.2.0というURLにアクセスしようとしてタイムアウトを待っているようです。

2017年2月現在、GitHubのissueにも挙がっています。
https://github.com/elastic/kibana/issues/10205

起動


systemctl enable elasticsearch
systemctl start elasticsearch
systemctl status elasticsearch

systemctl enable kibana
systemctl start kibana
systemctl status kibana

/root/cerebro-0.6.3/bin/cerebro &

設計

ElasticsearchではIndex,Type,Documentという概念があり、
それぞれRDBでいうデータベース、テーブル、レコードに相当します。

Mapping

RDBでいうDB設計です。
今回は以下の定義でIndexを作成します。

ちなみにこれ以降設定等は基本的にKibanaのコンソールから行います(面倒なので!)


PUT /log

{
    "settings":{
        "number_of_shards" : 3,
        "number_of_replicas" : 1,
        "max_result_window":100000,
        "refresh_interval":"5s",
        "index":{
            "mapping":{
                "ignore_malformed":"true"
            }
        },
        "mapper":{
            "dynamic":"false"
        }
    },
    "mappings":{
        "alert":{
            "properties":{
                "server":{
                    "type":"keyword",
                    "fields"{
                       "text":{
                           "type":"text"
                       }
                    }
                },
                "date":{
                    "type":"date"
                },
                "log":{
                    "type":"text"
                }
            }
        }
    }
}

実はElasticsearchはDynamic Mappingにも対応していて、
存在しないindexにデータを投入すると自動でindexを作成してくれます。
しかし、余計な設定や意図しない設定が反映されたりするのでやはりMappingは手動をおすすめします。

Index

indexとはRDBでいうDB相当です。ここにデータであるdocumentを格納します。
Elasticsearchはクラスタを組むことでデータをノードごとに分散して保持することが可能ですが、
何台でデータを保持するか(shards)を基本的にIndex作成後にで変更出来ないため、設計時によく考える必要があります。
今回はデフォルトで3としています。

Type

タイプはRDBでいうテーブルのようなものです。
ただここで設計したフィールドは他のTYPEでも同じ設計でないといけません。
(例えばlogというフィールド名でフィールドタイプがtextだった場合、他のタイプでもlogというフィールドはtext型でないといけない)

ただし、TYPEは6.0で削除されるので使わない方がよいでしょう。

Shard

shardは一つのIndexを分割したものです。
各shardは基本的にノードごとに分散して配置されます、shardを適切な数に設計することが高速化につながります。
shardは基本的に一度設定すると変更が不可能なため、事前に十分な運用・拡張性を考慮する必要があります。

また、各shardには上限ドキュメント数があり、約20億doc(2,147,483,519)を越えてデータを投入することはできません。(Lucenの限界)
https://www.elastic.co/guide/en/elasticsearch/reference/5.6/_basic_concepts.html

0
1
0

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
0
1