💭

ELK Stackを触ってみよう!((01)Elastic Searchのインストール)

2021/11/13に公開

本シリーズのゴール

ELK Stack(ElasticSearch / Kibana / Logstashをインストールし、各マシンのメトリック情報をKibanaで参照してみること)
※本シリーズではHTTP通信までを解説し、HTTPS化は別タイトルで投稿する予定です※

ちょっと解説

ElasticSearch

全文検索ソフトウェア(いわゆるデータ分析基盤のこと)

Kibana

可視化ツール(下記イメージ)

Logstash

ELTツール(データの収集、加工、転送を行ってくれるツール)
本シリーズでは、あまり存在感を発揮しませんが、ログ分析を行うときはなくてはならない存在です。私もまだ使い初めたばかりですが、めちゃくちゃ頼りになる力強い存在。

使用する環境

| # | OS | IPアドレス | 役割 |
| :-- | :-- | :-- | :-- | :-- |
| 1 | centos stream 8 | 192.168.151.131 | Elastic Search |
| 2 | centos stream 8 | 192.168.151.132 | Kibana |
| 3 | centos stream 8 | 192.168.151.133 | Logstash |
| 4 | Windows Server 2016 | 192.168.151.201 | 閲覧クライアント |

Elastic Searchのインストール

リポジトリの登録

CentOS(Elastic Search)
sudo vi /etc/yum.repos.d/elasticsearch.repo
elasticsearch.repo
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

パッケージのインストール

CentOS(Elastic Search)
sudo yum update -y
sudo yum install -y java-11-openjdk-devel
yum install elasticsearch-7.14.1 -y

設定ファイルの編集

デフォルトは英語なので、日本語化した設定ファイルを掲載します。

CentOS(/etc/elasticsearch/elasticsearch.yml)
# ======================== Elasticsearch Configuration =========================
#
# NOTE: Elasticsearchには、ほとんどの設定に適切なデフォルト値が用意されています。
# 設定を微調整する前に、何を設定しようとしているのか、そしてその結果を理解しておく必要があります。
#
# ノードを設定する主な方法は、このファイルを介して行われます。
# このテンプレートには、本番クラスタで設定したいと思われる最も重要な設定が記載されています。
#
# 設定オプションの詳細については、ドキュメントを参照してください。
# https://www.elastic.co/guide/en/elasticsearch/reference/index.html
#
# ---------------------------------- Cluster -----------------------------------
#
# クラスターには、わかりやすい名前をつけましょう。:
#
#cluster.name: my-application
#
# ------------------------------------ Node ------------------------------------
#
# ノードの説明的な名前を使用します。
#
node.name: node-1
#
# ノードにカスタムアトリビュートを追加します。
#
#node.attr.rack: r1
#
# ----------------------------------- Paths ------------------------------------
#
# データを保存するディレクトリへのパス(複数の場合はカンマで区切る)。
#
path.data: /var/lib/elasticsearch
#
# Path to log files:
#
path.logs: /var/log/elasticsearch
#
# ----------------------------------- Memory -----------------------------------
#
# Lock the memory on startup:
#
#bootstrap.memory_lock: true
#
# ヒープサイズがシステムで利用可能なメモリの約半分に設定されており、
# プロセスのオーナーがこの制限を使用することを許可されていることを確認してください。
#
# システムがメモリをスワップしているときに、Elasticsearchのパフォーマンスが低下します。
#
# ---------------------------------- Network -----------------------------------
#
# デフォルトではElasticsearchはlocalhostでしかアクセスできません。
# このノードをネットワーク上に公開するには、ここに別のアドレスを設定します。
#
# _site_
# いわゆるプライベートIPアドレスでのリクエストを受け付ける。
# セグメント異なっていてもOK。
#network.host: 192.168.0.1
network.host: _local_,_site_

# デフォルトでは、Elasticsearch は 9200 から始まる最初に見つかった空きポートで 
# HTTP トラフィックをリッスンします。
# ここでは、特定のHTTPポートを設定します。
#
http.port: 9200
#
# For more information, consult the network module documentation.
#
# --------------------------------- Discovery ----------------------------------
#
# このノードの起動時に、ディスカバリーを行うホストの初期リストを渡します。
# The default list of hosts is ["127.0.0.1", "[::1]"]
#
discovery.seed_hosts: ["192.168.151.131"]
#
# マスター資格を持つノードの初期セットを使用して、クラスターをブートストラップします。
cluster.initial_master_nodes: ["node-1"]
#
# For more information, consult the discovery and cluster formation module documentation.
#
# ---------------------------------- Various -----------------------------------
#
# インデックスを削除する際に、明示的な名前を要求するようになりました。
#
#action.destructive_requires_name: true

プロセスの起動

CentOS(Elastic Search)
systemctl start elasticsearch
systemctl status elasticsearch

起動ログの確認

エラーが出ていないことを確認。

CentOS(/var/log/elasticsearch/elasticsearch.log)
[2021-11-13T02:26:18,480][INFO ][o.e.x.m.p.l.CppLogMessageHandler] [node-1] [controller/3678] [Main.cc@117] controller (64 bit): Version 7.14.1 (Build 696c4ee37e496c) Copyright (c) 2021 Elasticsearch BV
[2021-11-13T02:26:19,143][INFO ][o.e.x.s.a.s.FileRolesStore] [node-1] parsed [0] roles from file [/etc/elasticsearch/roles.yml]
[2021-11-13T02:26:20,510][INFO ][o.e.i.g.LocalDatabases   ] [node-1] initialized default databases [[GeoLite2-Country.mmdb, GeoLite2-City.mmdb, GeoLite2-ASN.mmdb]], config databases [[]] and watching [/etc/elasticsearch/ingest-geoip] for changes
[2021-11-13T02:26:20,511][INFO ][o.e.i.g.DatabaseRegistry ] [node-1] initialized database registry, using geoip-databases directory [/tmp/elasticsearch-14498880023815662487/geoip-databases/oUql9vkYRSOhzo5VuI58RA]
[2021-11-13T02:26:21,507][INFO ][o.e.t.NettyAllocator     ] [node-1] creating NettyAllocator with the following configs: [name=unpooled, suggested_max_allocation_size=1mb, factors={es.unsafe.use_unpooled_allocator=null, g1gc_enabled=true, g1gc_region_size=4mb, heap_size=896mb}]
[2021-11-13T02:26:21,617][INFO ][o.e.d.DiscoveryModule    ] [node-1] using discovery type [zen] and seed hosts providers [settings]
[2021-11-13T02:26:22,499][INFO ][o.e.g.DanglingIndicesState] [node-1] gateway.auto_import_dangling_indices is disabled, dangling indices will not be automatically detected or imported and must be managed manually
[2021-11-13T02:26:23,372][INFO ][o.e.n.Node               ] [node-1] initialized
[2021-11-13T02:26:23,372][INFO ][o.e.n.Node               ] [node-1] starting ...
[2021-11-13T02:26:23,441][INFO ][o.e.x.s.c.f.PersistentCache] [node-1] persistent cache index loaded
[2021-11-13T02:26:23,648][INFO ][o.e.t.TransportService   ] [node-1] publish_address {192.168.100.143:9300}, bound_addresses {[::1]:9300}, {127.0.0.1:9300}, {192.168.134.137:9300}, {192.168.100.143:9300}, {192.168.151.131:9300}
[2021-11-13T02:26:24,379][INFO ][o.e.b.BootstrapChecks    ] [node-1] bound or publishing to a non-loopback address, enforcing bootstrap checks
[2021-11-13T02:26:24,423][INFO ][o.e.c.c.Coordinator      ] [node-1] cluster UUID [wE_DJXBnTOucrliZWCOi2g]
[2021-11-13T02:26:24,682][INFO ][o.e.c.s.MasterService    ] [node-1] elected-as-master ([1] nodes joined)[{node-1}{oUql9vkYRSOhzo5VuI58RA}{0JKy3M6MTmCAgT-yS3d0_w}{192.168.100.143}{192.168.100.143:9300}{cdfhilmrstw} elect leader, _BECOME_MASTER_TASK_, _FINISH_ELECTION_], term: 3, version: 92, delta: master node changed {previous [], current [{node-1}{oUql9vkYRSOhzo5VuI58RA}{0JKy3M6MTmCAgT-yS3d0_w}{192.168.100.143}{192.168.100.143:9300}{cdfhilmrstw}]}
[2021-11-13T02:26:24,869][INFO ][o.e.c.s.ClusterApplierService] [node-1] master node changed {previous [], current [{node-1}{oUql9vkYRSOhzo5VuI58RA}{0JKy3M6MTmCAgT-yS3d0_w}{192.168.100.143}{192.168.100.143:9300}{cdfhilmrstw}]}, term: 3, version: 92, reason: Publication{term=3, version=92}
[2021-11-13T02:26:25,009][INFO ][o.e.h.AbstractHttpServerTransport] [node-1] publish_address {192.168.100.143:9200}, bound_addresses {[::1]:9200}, {127.0.0.1:9200}, {192.168.134.137:9200}, {192.168.100.143:9200}, {192.168.151.131:9200}
[2021-11-13T02:26:25,010][INFO ][o.e.n.Node               ] [node-1] started
[2021-11-13T02:26:25,679][INFO ][o.e.l.LicenseService     ] [node-1] license [703aa656-f2aa-4ece-8bd7-0f3df5222622] mode [basic] - valid
[2021-11-13T02:26:25,680][INFO ][o.e.x.s.s.SecurityStatusChangeListener] [node-1] Active license is now [BASIC]; Security is disabled
[2021-11-13T02:26:25,680][WARN ][o.e.x.s.s.SecurityStatusChangeListener] [node-1] Elasticsearch built-in security features are not enabled. Without authentication, your cluster could be accessible to anyone. See https://www.elastic.co/guide/en/elasticsearch/reference/7.14/security-minimal-setup.html to enable security.
[2021-11-13T02:26:25,701][INFO ][o.e.g.GatewayService     ] [node-1] recovered [8] indices into cluster_state
[2021-11-13T02:26:26,821][INFO ][o.e.i.g.GeoIpDownloader  ] [node-1] updating geoip databases
[2021-11-13T02:26:26,821][INFO ][o.e.i.g.GeoIpDownloader  ] [node-1] fetching geoip databases overview from [https://geoip.elastic.co/v1/database?elastic_geoip_service_tos=agree]
[2021-11-13T02:26:27,579][INFO ][o.e.c.r.a.AllocationService] [node-1] Cluster health status changed from [RED] to [GREEN] (reason: [shards started [[.geoip_databases][0]]]).
[2021-11-13T02:26:27,669][INFO ][o.e.i.g.DatabaseRegistry ] [node-1] downloading geoip database [GeoLite2-Country.mmdb] to [/tmp/elasticsearch-14498880023815662487/geoip-databases/oUql9vkYRSOhzo5VuI58RA/GeoLite2-Country.mmdb.tmp.gz]
[2021-11-13T02:26:27,670][INFO ][o.e.i.g.DatabaseRegistry ] [node-1] downloading geoip database [GeoLite2-ASN.mmdb] to [/tmp/elasticsearch-14498880023815662487/geoip-databases/oUql9vkYRSOhzo5VuI58RA/GeoLite2-ASN.mmdb.tmp.gz]
[2021-11-13T02:26:27,671][INFO ][o.e.i.g.DatabaseRegistry ] [node-1] downloading geoip database [GeoLite2-City.mmdb] to [/tmp/elasticsearch-14498880023815662487/geoip-databases/oUql9vkYRSOhzo5VuI58RA/GeoLite2-City.mmdb.tmp.gz]
[2021-11-13T02:26:28,177][INFO ][o.e.i.g.GeoIpDownloader  ] [node-1] geoip database [GeoLite2-ASN.mmdb] is up to date, updated timestamp
[2021-11-13T02:26:28,505][INFO ][o.e.i.g.GeoIpDownloader  ] [node-1] geoip database [GeoLite2-City.mmdb] is up to date, updated timestamp
[2021-11-13T02:26:28,540][INFO ][o.e.i.g.DatabaseRegistry ] [node-1] database file changed [/tmp/elasticsearch-14498880023815662487/geoip-databases/oUql9vkYRSOhzo5VuI58RA/GeoLite2-Country.mmdb], reload database...
[2021-11-13T02:26:28,595][INFO ][o.e.i.g.DatabaseRegistry ] [node-1] database file changed [/tmp/elasticsearch-14498880023815662487/geoip-databases/oUql9vkYRSOhzo5VuI58RA/GeoLite2-ASN.mmdb], reload database...
[2021-11-13T02:26:28,660][INFO ][o.e.i.g.GeoIpDownloader  ] [node-1] geoip database [GeoLite2-Country.mmdb] is up to date, updated timestamp
[2021-11-13T02:26:30,158][INFO ][o.e.i.g.DatabaseRegistry ] [node-1] database file changed [/tmp/elasticsearch-14498880023815662487/geoip-databases/oUql9vkYRSOhzo5VuI58RA/GeoLite2-City.mmdb], reload database...

接続確認

CentOS(Elastic Search)
curl http://192.168.151.131:9200
{
  "name" : "node-1",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "wE_DJXBnTOucrliZWCOi2g",
  "version" : {
    "number" : "7.14.1",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "66b55ebfa59c92c15db3f69a335d500018b3331e",
    "build_date" : "2021-08-26T09:01:05.390870785Z",
    "build_snapshot" : false,
    "lucene_version" : "8.9.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

正常に動作していることを確認できました!
次回はkibanaのインストールを行っていきます。

Discussion