Blog ブログ
2023.10.18

PS事業部の仕事をチラ見せ ~Elasticsearch構築編~

お役立ち情報

こんにちは、プロフェッショナルサービス事業部です。

今回は、私たちが普段行っているインフラ構築作業について少しご紹介です。
ログ管理の代表的なシステム、Elasticsearchサーバの構築についてです。


■ Elasticsearchとは?

サーバが生成するログファイルやイベントログ、サーバの稼働状態、ネットワークの状態など、サーバから生成されるありとあらゆるログ情報をElasticsearchサーバに集約し、一元管理することが出来るシステムです。
集めたログ情報はグラフを用いた分析・検索、ログローテートはもちろんのこと、ログの値の加工やしきい値によるアラート発報も出来ます。

なにより、ログデータの検索が非常に早いことが最大の特徴で、導入事例も多数存在します。
https://www.elastic.co/jp/customers/

■構成

今回の構築で使用した構成がこちら
構築構成の図
白い四角がそれぞれElasticsearchサーバです。masterやdata(hot,warm,cold)など、役割(ロール)を持ったノードが付与できます。
例えば、masterノードはクラスターの管理、dataはログデータの保存および管理の役割を持っています。

サーバから送られてきたデータはまずhotデータノードが受け口となり、ここにデータが保持されます。
ここにいるデータの検索は非常に高速です。
そこから一定時間が経過したデータは設定によりwarm,cold,frozenデータノードの順に渡すことができ、最終的に削除まで自動的に行うことが可能です。

データノードを複数のサーバに分けるとき、注意すべきは「contentノード」の存在です。

contentノードの役割はElasticの製品カタログ、記事アーカイブなどを保持します。
ログデータの管理はhot~coldまであれば可能のため、flozenノードは用意する必要はありませんが、contentノードは必須です。

contentノードを入れないと永遠にクラスタが機能しなくなります。

■インストール方法

方法は公式にいくつか載っていますが、LinuxマシンであればRPMによるインストールが一番やりやすいでしょう。
https://www.elastic.co/guide/en/elasticsearch/reference/current/install-elasticsearch.html

まずはRPMを行うための公開鍵を取得して、
RPMを行うための公開鍵の取得の様子

エディタで /etc/yum.repos.d/elasticsearch.repo にインストール情報を入力します。
x部分は書き換えの必要はありません。
エディタで /etc/yum.repos.d/elasticsearch.repo にインストール情報を入力する様子

保存したらyumまたはdnfコマンドでElasticsearchをインストールします。
yumまたはdnfコマンドでElasticsearchをインストールする様子

バージョンを指定してインストールすることも可能です。
※Kibana,BeatsなどでElastic Stackを構築する場合、すべての製品がマイナーバージョンまで一致している必要があります
バージョンを指定してインストールする様子

Elasticsearchサーバが複数ある場合は、ここまですべてのサーバで実施しておきましょう。

■Elasticsearchクラスタの設定

インストールが完了したらどんどん構築していきます。

まずは各Elasticsearchサーバで以下のyamlファイルをエディタで開きます。
各Elasticsearchサーバでyamlファイルをエディタで開く様子

ここでElasticsearch機能のすべてを設定することが出来ます。
初期状態で色々設定が入っていますが、中でも重要な部分を抜粋します。
(チューニングに関しては別の設定ファイルがありますが今回は割愛します)

・まずは、クラスタ名です。超重要。
クラスタにしたいElasticsearchサーバすべてで同じクラスタ名を入力します。
一字違ってももちろんアウトです。しっかり指差し確認しましょう。
クラスタにしたいElasticsearchサーバすべてで同じクラスタ名を入力する様子

・続いてノード名。
クラスタ名と違って設定しなくてもよい項目ですが、人間がノードを判別できなくなります。
ノード名を設定する様子

・初期のyamlファイルには書いてませんが、ノードのロールも設定しましょう。
ノードのロールを設定する様子

・ネットワークの重要な設定はこの3つ
network.hostはTCP通信、http.hostはHTTP通信、そしてtransport.hostはクラスタ間通信の受け付けIPとなります。
ネットワークのIP設定をする様子

・クラスタ設定としては以下の2つです。
discovery.seed_hostsとcluster.initial_master_nodesには、すべてのmasterノードのIPを設定します。
例えばmaasterが3つある場合は3つすべてを記入します。
クラスタ設定の様子

今回はmasterは1つなので、1つだけ。
クラスタのmaster設定(1つだけの例)

・最後に認証設定
xpackという技術を使った認証を有効化します。
xpackという技術を使った認証を有効化する様子

秘密鍵とサーバ証明書、CA証明書の設定はこんな感じで。http通信とtransport通信でそれぞれ設定する必要があります。
秘密鍵とサーバ証明書、CA証明書の設定

■起動確認

すべて設定し終えたらelasticsearchをデータノードから順に起動してみましょう。
elasticsearchをデータノードから順に起動する様子

ステータスがrunning になっていたら成功です。
ステータスがrunning になっている様子

※うまくいかないときは….
・ymlファイルに誤字があるかも
・ymlファイルの「hogehoge:」の後に半角空白がないかも
・masterノードが他ノードの通信に失敗しているかも
etc……

Elasticsearchのログを確認してみましょう。
初期の設定では以下に格納されています。
Elasticsearchのログの確認

サービスの実行は確認できました。
次はクラスタで連携がちゃんと出来ているかを確認しましょう。

curlコマンドを使ってElasticsearchサーバへアクセスして確認しますが、まずは認証用のelasticユーザパスワードをリセットします。
i オプションを付けると手動、外すと自動的にパスワード生成してくれます。
認証用のelasticユーザパスワードをリセットする様子

それでは、Elasticsearchサーバへアクセスしてみましょう。
構築成功していればどのノードのIPを指定しても結果が返ってきます。
Elasticsearchサーバへアクセスする様子

すべてのノード名がコンソールに表示されていれば成功です。

クラスタのヘルスも確認してみましょう。
クラスタのヘルスを確認する様子

状態がGREENになっていれば構築完了です。
お疲れ様でした。


■おわりに

いかがでしたか?
今回はElasticsearchの構築のみにフォーカスしました。
本来ならこの後、Elasticsearchが蓄積したデータをGUIで見える化できるKibanaサーバの構築や、ログ転送システムのBeatsのサーバ導入なども行いますが、それらの記事はまた別の機会に。

私たちプロフェッショナルサービス事業部は日々、こういった広く使われているシステムの構築のみならず、最近リリースされたまったく新しいシステムの構築、古くなったシステムバージョンから最新バージョンへの大更改、また、用途・規模に合わせてAWSサービス構成をパッケージ化した、AWS導入支援サービスも扱っています。

・クラウド移行支援サービス for AWS
https://www.nac-plus.co.jp/services/service-4/
・クラウド導入支援サービス for AWS
https://www.nac-plus.co.jp/services/service-8/