前書き
みなさん、elasticsearch使ってますか?
そうです、あの便利で万能でたくさんデータが集まってる気がして気持ちよくなれるelasticsearchです。
N番煎じだと思われますが、この度rgnet1で運用開始したelasticsearchのチューニングのお話をしたいと思います。
今回の機材/要件
- サーバー1台
- HDD: 500G / SSD: 1T
- ログデータ等を入れたい。冗長化を行うほど重要ではなく、機材もない。(1Node)
- 最低限入れたいデータはsyslog/auditログ/apacheログ
インストール/クラスタ設定
インストールは公式ドキュメントを参考にelasticsearch,kibanaをインストールします。
今回はversion 6.3以降から無料となった2X-Packという拡張機能を有効化したいと思います。X-Packを入れることにより、ユーザー認証やSSL、その他様々な機能が有効化されます。
クラスタについての設定は/etc/elasticsearch/elasticsearch.yml
に格納されています。今回は以下のように設定しました。
cluster.name: rgroot-es
node.name: es.sfc.wide.ad.jp
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
xpack.security.enabled: true
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.key: /etc/elasticsearch/letsencrypt/live/es.sfc.wide.ad.jp/privkey.pem
xpack.security.http.ssl.certificate: /etc/elasticsearch/letsencrypt/live/es.sfc.wide.ad.jp/fullchain.pem
bootstrap.memory_lock: true
network.host: ::0
http.port: 9200
transport.host: ::0
transport.tcp.port: 9300
discovery.type: single-node
今回はX-PackのSSLの設定を追加で行いました。
また、elasticsearchにはproduction modeとdevelop modeがあり、network.host
の設定がlocalhost意外であればproduction modeとして動作します。そのため、productionで利用する場合は必ず設定を行いましょう。
elasticsearchはjavaで動作しています。そのため、JVMの設定変更も忘れず行いましょう。設定ファイルは/etc/elasticsearch/jvm.options
にあります。デフォルトではXms
・Xmx
が1Gで設定されているのでメモリに余裕があれば必ず上げておきましょう。
さらにswapの設定等細かい推奨設定がありますのでsystem設定の公式ドキュメントを確認しておきましょう。
(RBACなどに関しては今回は説明しないのでSecurity設定に関する公式サイトを参考にしてください)
indexのチューニング
ここまで行うとelasticsearchのクラスタがチューニングできた状態で起動することができると思います。
しかし、このまま利用開始するとindex healthがyellow
となり、警告状態となると思います。 これはクラスターで運用することが前提となっており、デフォルトのshard数(冗長化の数)が3になっているからです。shardが3になっているのにもかかわらず、nodeの数が1のため、冗長化できずにアラートが出ている状態です。
デフォルトのshard数の変更
今回はあまり重要ではないデータなので冗長化を行わないため、デフォルトのshardの数を1にしておきましょう(重要なデータがある場合はダメです)
shard数の変更にはkibanaのdev toolsを利用します。今回はshard:1/replica:0に設定します。以下のようにして実行します。
"acknowledged" : true
と出れば設定されています。
今回はdefault
という名前で、*
にマッチするindex(すべてのindex)に対し、shard:1/replica:0になるように設定しました。
この設定はindex-templateに対する設定であり、個別にindex作成のときなどにshard数等を指定して作成するとそちらが優先されるので注意してください。
データを投入後、GET _cat/indices
を実行し、以下のようにgreenになれば正常です。
ILMの設定
ElasticsearchにはILM(Index Lifecycle Policies)というものがあります。この機能はindexの状態をフェーズ分けし、効率よくノード分けしたり、ローテートしたりできます。詳しくは説明しないので他の方の記事を参照してください。
logstashやbeatなどのelastic公式のinput先を利用している場合はILMに対応しているのでKibanaの設定からいろいろ変更することが可能です。対応していない場合は自分で作成しましょう。
あとがき
今回は非常にざっくり、チューニングするときの流れをまとめてみました。個別個別の設定に関してはだいぶ端折りましたが(ごめんなさい)、elasticsearchは公式ドキュメントが非常にしっかりしてるのでしっかりと読み込みましょう。
みなさんもオンプレelasticsearchを構築して気持ちよくなりましょう!!