๋ฐ์ํ
๐ก ๋ณธ ๋ฌธ์๋ ELK Stack ์ค 'Elasticsearch'์ ๋ํ ๊ฐ๋ ์ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํด๋์ ๊ธ์ ๋๋ค.
ํ์์ ELK Stack์ ๊ด์ฌ์ด ์๊ฑฐ๋ Elasticsearch๋ฅผ ์ ๋ฌธํ๊ณ ์ถ์ผ์ ๋ถ๋ค์ ์ฐธ๊ณ ๋ถํ๋๋ฆฝ๋๋ค.
1. Elasticsearch ์๊ฐ
1.1 Elastic Stack (ELK Stack)
- E(Elasticsearch): ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ๊ฒ์
- L(Logstash): ๋ฐ์ดํฐ ์์ง
- ๋ก๊ทธ ์คํ์๋ ๋ฐ์ดํฐ์ ์ ๋ ฅ, ๋ณํ, ์ถ๋ ฅ์ ์ค์๊ฐ ํ์ดํ๋ผ์ธ์ผ๋ก ์ฒ๋ฆฌํ๋ ์คํ์์ค ๋ฐ์ดํฐ ์์ง ์์ง.
- ๋ค์ํ ์ ๋ ฅ ์์ค์์ ๋์์ ๋ฐ์ดํฐ๋ฅผ ์์ง(Ingest)ํ์ฌ ๋ณํํ ํ ์์ฃผ ์ฌ์ฉํ๋ "์คํ์(Stash)-๋ณด๊ด์"(Elasticsearch)๋ก ์ ์ก
- K(Kibana): ๋ฐ์ดํฐ ์๊ฐํ ๋ฐ ๋ฆฌํฌํ
๋ถ์
- ํค๋ฐ๋๋ ์๋ผ์คํฑ์์น์ ์ฐ๋ํ์ฌ ๋์ํ๋ ๋ฐ์ดํฐ ์๊ฐํ(๋ฆฌํฌํ ) ๋ฐ ๋ถ์
1.2 Elasticsearch ํน์ง
Name | Elasticsearch |
Description | A distributed, RESTful modern search and analytics engine based on Apache Lucene |
Primary database model | Search engine |
Secondary database models | Document store Spatial DBMS |
Technical documentation | www.elastic.co/guide/en/elasticsearch/reference/current/index.html |
Developer | Elastic |
Initial release | 2010 |
Current release | 7.8.0, June 2020 |
License | Open Source (Lisence: Apache 2.0) |
Cloud-based only | no |
DBaaS offerings (sponsored links) | |
Implementation language | Java |
Data scheme | schema-free |
Typing | yes |
Secondary indexes | yes |
SQL | SQL-like query language |
APIs and other access methods | Java API RESTful HTTP/JSON API |
- ๋์ฑ ์์ธํ ๋ด์ฉ์ DB-Engines Ranking: Elasticsearch ๋ถ๋ถ์ ์ฐธ๊ณ ํด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
1.3 Elasticsearch ์ธ๋ถ ํน์ง
- ์ ๋ฌธ(full-text) ๊ฒ์, ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ์ ์ค์๊ฐ ๋ถ์
- ๋ถ์ฐ ์์คํ
- ์ฌ๋ฌ ๊ฐ์ ๋
ธ๋์ ๋ฐ์ดํฐ๋ฅผ ์์ธ(Indexing)ํ๊ณ ๊ฒ์, ์ ์ฅ
- ํญ์ ์ผ์ ํ ๋ฐ์ดํฐ ๋ณต์ฌ๋ณธ์ ๊ฐ์๋ฅผ ์ ์งํ๋ฉฐ ๋์ ๊ฐ์ฉ์ฑ๊ณผ ์์ ์ฑ ๋ณด์ฅ
- ๋ ธ๋๋ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋๋ ํ๋ก์ธ์ค
- ๋ฐ์ดํฐ ์ ์ฅ์(data store)
- ์๋ฐฑ ๋์ ์๋ฒ๋ก scale out
- PD ๊ธ์ ๋ฐ์ดํฐ ์ ์ฅ
- ์ฌ๋ฌ ๊ฐ์ ๋
ธ๋์ ๋ฐ์ดํฐ๋ฅผ ์์ธ(Indexing)ํ๊ณ ๊ฒ์, ์ ์ฅ
- ์ํ์น ๋ฃจ์ฌ(Apache Lucene) ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ
- ๊ณ ์ฑ๋ฅ ์ ๋ณด ๊ฒ์(IR, Information retrieval) ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- Java๋ก ๊ตฌํ๋ ์์ ์ ์ด๊ณ ๋ฌด๋ฃ๋ก ์ฌ์ฉํ ์ ์๋ ์คํ ์์ค ํ๋ก์ ํธ
- Elastic Search = ๋ฃจ์ฌ์ ๊ฒ์/์์ธ์ ํ์ํ API๋ฅผ ์ ๊ณต + ๋ถ์ฐ์ฒ๋ฆฌ๋ฅผ ๋น๋กฏํด ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๊ธฐ๋ฅ
1.4 Elasticsearch ์ฌ์ฉ ์ฌ๋ก
์ํคํผ๋์
- ์ ๋ฌธ ๊ฒ์์ ์ํ
- ์ค์๊ฐ ํ์ดํ ๊ฒ์
- ์ถ์ฒ ๊ฒ์์ด ๊ธฐ๋ฅ
์คํ ์ค๋ฒํ๋ก์ฐ
- ๊ฒ์ ๋ด์ฉ๊ณผ ๊ฒฐ๊ณผ๋ฅผ ํตํฉํด ์ ์ฌํ ์ง๋ฌธ๊ณผ ํด๋ต์ ์ฐ๊ฒฐ
๊นํ๋ธ
- 1,300์ต ์ค์ด ๋๋ ์์ค์ฝ๋๋ฅผ ๊ฒ์ํ๋๋ฐ ์ฌ์ฉ
๋ ๊ฐ๋์ธ
- ๋ฐฉ๋ฌธ๊ฐ์ ๋ก๊ทธ ๋ถ์
- ์์ ๋ฐ์ดํฐ ์์ฑ ๋ฐ ๋ถ์์ผ๋ก ์ค์๊ฐ ์๋
- ๊ธฐ์ฌ์ ๋ํ ๋ฐ์ ๋ถ์
๊ณจ๋๋ง ์ญ์ค
- ๋งค์ผ 5TB๊ฐ ๋๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
- ์ฃผ์ ์์ฅ์ ๋ณ๋ ๋ถ์์ ์ฌ์ฉ
2. Elasticsearch ๊ตฌ์กฐ
2.1 Elasticsearch ์ ์ฅ ๊ตฌ์กฐ (RDB์ ๋น๊ต)
๊ธฐ์กด์ RDB์๋ ๋ค๋ฅธ ์ ์ฅ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง
RDB | table | row | column | schema |
Elasticsearch | index | document (Json) | field | mapping |
2.1.1 index (= ์ธ๋ฑ์ค = ์์ธ)
- ๋ค์ ๋น์ทํ ํน์ฑ์ ๊ฐ์ง document์ ๋ชจ์
- ์ด๋ฆ(๋ชจ๋ ์๋ฌธ์์ฌ์ผ ํจ)์ผ๋ก ์๋ณ
- ์ด ์ด๋ฆ์ ์์ธ์ ํฌํจ๋ ๋ฌธ์์ ๋ํ ์์ธํ, ๊ฒ์, ์ ๋ฐ์ดํธ, ์ญ์ ์์ ์์ ํด๋น ์์ธ์ ๊ฐ๋ฆฌํค๋ ๋ฐ ์ฐ์
2.1.2 type (= ํ์ = ์ ํ)
- ํ๋์ ์์ธ์์ ํ๋ ์ด์์ ์ ํ์ ์ ์๊ฐ๋ฅ
- ์ ํ์ด๋ ์์ธ์ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ถ๋ฅ/๊ตฌ๋ถํ ๊ฒ์ด๋ฉฐ ๊ทธ ์๋ฏธ ์ฒด๊ณ๋ ์ ์ ์ผ๋ก ์ฌ์ฉ์๊ฐ ๊ฒฐ์ .
- Elasticsearch 6.0๋ถํฐ๋ ๋ฐ์ดํฐ ์ ์ฅ์ ํ๋์ type๋ง ์ง์๋๊ธฐ ๋๋ฌธ์ ์ดํ ๋ฐ์ดํฐ ์
๋ ฅ์ /$index/_doc/$id๋ก ํด์ผํจ.
- ๋ฌผ๋ก , ๊ฒ์์ ์ํ type์ผ๋ก๋ _search, _bulk ๋ฑ ๋ค์ํ๊ฒ ์ฌ์ฉํจ.
2.1.3 document (= ๋ฌธ์)
- JSON(JavaScript Object Notation) ํ์
- ํ๋์ ์์ธ/์ ํ์ ํ๋ ์ด์์ ๋ฌธ์๋ฅผ ์ ์ฅ๊ฐ๋ฅ
2.2 Elasticsearch ์ํคํ ์ณ ํน์ง
๊ธฐ๋ณธ์ ์ผ๋ก Elasticsearch๋ ํด๋ฌ์คํฐ๋ผ๋ ๋จ์๋ก ๋ฐ์ดํฐ ์ ๊ณต๋๋ฉฐ, ์๋์์ ์ต์์ ๊ฐ๋ ์ธ ํด๋ฌ์คํฐ๋ถํฐ ์ตํ์ ๊ฐ๋ ์ธ ์ธ๊ทธ๋จผํธ๊น์ง ํํฅ์์ผ๋ก ์ดํด๋ณด๊ฒ ์ต๋๋ค.
2.2.1 ํด๋ฌ์คํฐ
- ๊ธฐ๋ณธ์ ์ผ๋ก Elasticsearch๋ ํด๋ฌ์คํฐ๋ผ๋ ๋จ์๋ก ๋ฐ์ดํฐ ์ ๊ณต
- ํด๋ฌ์คํฐ๋ ํ๋ ์ด์์ ๋ฌผ๋ฆฌ์ ์ธ ๋ ธ๋(์๋ฒ)๋ก ๊ตฌ์ฑ๋๋ฉฐ, ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๋ชจ๋ ๋ ธ๋๋ฅผ ํฌ๊ดํ๋ ํตํฉ ์์ธํ ๋ฐ ๊ฒ์ ๊ธฐ๋ฅ์ ์ ๊ณต
- ํด๋ฌ์คํฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก elasticsearch ๋ผ๋ ๊ณ ์ ํ ์ด๋ฆ์ผ๋ก ์๋ณ
- ๋์ผํ ํด๋ฌ์คํฐ ์ด๋ฆ์ ์๋ก ๋ค๋ฅธ ํ๊ฒฝ์์ ์ฌ์ฌ์ฉํ๋ฉด ์๋จ
2.2.2 ๋ ธ๋
- ๋ ธ๋๋ ํด๋ฌ์คํฐ์ ์ผ๋ถ์ด๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ํด๋ฌ์คํฐ์ ์ธ๋ฑ์ฑ ๋ฐ ๊ฒ์ ๊ธฐ๋ฅ์ ์ฐธ์ฌํ๋ ๋จ์ผ ์๋ฒ
- ๋ ธ๋ ๋ด์ ๋ฃจ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํฌํจ๋์ด ์์ผ๋ฉฐ, ์ด๋ ES์ ๊ทผ๊ฐ์ ์ด๋ฃจ๋ ํต์ฌ ๋ชจ๋
- ๊ธฐ๋ณธ ์ด๋ฆ์ ์์ ์ ๋ ธ๋์ ์ง์ ๋๋ ์์ UUID(Universally Unique IDentifier)์ด๋ฉฐ, ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ์ ์ ๊ฐ๋ฅ
- ๋จ์ผ ํด๋ฌ์คํฐ์์ ์ํ๋ ๋งํผ์ ๋ ธ๋๋ฅผ ์์ ๊ฐ๋ฅํ๋ฉฐ, ๋จ์ผ ๋ ธ๋๋ฅผ ์์ํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก `elasticsearch`๋ผ๋ ์ด๋ฆ์ ์๋ก์ด ๋จ์ผ ๋ ธ๋ ํด๋ฌ์คํฐ ์์ฑ
+ ๋ ธ๋ ๋ฐ์ธ๋ฉ
- ๊ฐ์ ํด๋ฌ์คํฐ ์ด๋ฆ์ ๊ฐ์ง๊ณ ์คํ๋ ๋ ธ๋๋ ์๋์ผ๋ก ๋ฐ์ธ๋ฉ
- 9200๋ฒ ๋ถํฐ REST API๋ฅผ ์ํ HTTP ํต์ ํฌํธ๊ฐ ํ ๋น
- 9300๋ฒ ๋ถํฐ ๋ ธ๋๊ฐ ๋ฐ์ธ๋ฉ์ ์ํ ํฌํธ๋ก ํ ๋น
2.2.3 ์ค๋ & ๋ณต์ฌ๋ณธ(๋ฆฌํ๋ฆฌ์นด)
- ์ค๋ (Shard, Primary Shard)
- ์์ธ์ ๋ฐฉ๋ํ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ๊ฐ๋ฅํ๊ธฐ์ ๋จ์ผ ๋ ธ๋์ ๋์คํฌ์์ ์์ฉํ์ง ๋ชปํ๊ฑฐ๋ ๊ฒ์ ์์ฒญ ์ฒ๋ฆฌ ์ ์๋๊ฐ ๋๋ฌด ๋๋ ค์ง
- ์ค๋๋ ๋ฐ์ดํฐ ๊ฒ์์ ์ํด ๊ตฌ๋ถ๋๋ ์ต์ ๋จ์๋ก ์์ธ์ ์ค๋๋ก ๋ถํ ํ๋ ๊ธฐ๋ฅ์ ์ ๊ณต
- ์์ ์ ์ฌ๋ฌ ์ค๋์ ๋ถ์ฐ ๋ฐฐ์นํ๊ณ ๋ณ๋ ฌํํจ์ผ๋ก์จ ์ฑ๋ฅ/์ฒ๋ฆฌ๋ ํฅ์
- ๋ฆฌํ๋ฆฌ์นด (Replica, Replica Shard)
- ์์ธ์ ์ค๋์ ๋ํด ํ๋ ์ด์์ ๋ณต์ฌ๋ณธ์ ์์ฑํ ์ ์๋๋ฐ, ์ด๋ฅผ '๋ฆฌํ๋ฆฌ์นด ์ค๋(replica shard)' ์ค์ฌ์ '๋ฆฌํ๋ฆฌ์นด'๋ผ๊ณ ํจ
- ๋ฆฌํ๋ฆฌ์นด๋ฅผ ๋ง๋๋ ๋ณต์ ๊ฐ ์ค์ํ ์ด์
- ๋ฆฌํ๋ฆฌ์นด ์ค๋๋ ๊ทธ ์๋ณธ์ธ ๊ธฐ๋ณธ ์ค๋์ ๋์ผํ ๋
ธ๋์ ๋ฐฐ์ ๋์ง ์๊ธฐ์ ์ค๋/๋
ธ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ ๋ Failover ๋ฉ์ปค๋์ฆ ๋์
- Primary shard ๊ฐ ํฌํจ๋ ๋ ธ๋ ๋ค์ด ์ ES๋ replicas ์ค ํ๋๋ฅผ Primary ๋ก ์น๊ฒฉํ๊ณ ๊ณ์ ์๋น์ค๋ฅผ ์ด์ด๊ฐ
- Failover(์์คํ ๋์ฒด ์๋): ํ์ ์ฌ์ฉํ๋ ์๋ฒ์ ๊ทธ ์๋ฒ์ ํด๋ก ์๋ฒ๋ฅผ ๊ฐ์ง๊ณ ์๋ค๊ฐ ์ฌ์ฉ ์๋ฒ๊ฐ ์ฅ์ ๋ก ์ฌ์ฉ์ด ์ด๋ ต๊ฒ ๋์์ ๊ฒฝ์ฐ ํด๋ก ์๋ฒ๋ก ๊ทธ ์ผ์ ๋์ ์ฒ๋ฆฌํ๊ฒ ํด์ ๋ฌด์ ์ง ์์คํ ์ ๊ตฌ์ถํ๊ฒ ํด ์ฃผ๋ ๊ฒ์ ์๋ฏธ
- ๋ชจ๋ ๋ฆฌํ๋ฆฌ์นด์์ ๋ณ๋ ฌ ๋ฐฉ์์ผ๋ก ๊ฒ์์ ์คํํ ์ ์์ผ๋ฏ๋ก ๊ฒ์ ๋ณผ๋ฅจ/์ฒ๋ฆฌ๋์ ํ์ฅ๊ฐ๋ฅ
- ๋ฆฌํ๋ฆฌ์นด ์ค๋๋ ๊ทธ ์๋ณธ์ธ ๊ธฐ๋ณธ ์ค๋์ ๋์ผํ ๋
ธ๋์ ๋ฐฐ์ ๋์ง ์๊ธฐ์ ์ค๋/๋
ธ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ ๋ Failover ๋ฉ์ปค๋์ฆ ๋์
- ์ธ๋ฑ์ค๋ณ ๊ธฐ๋ณธ ์ค๋ & ๋ฆฌํ๋ฆฌ์นด ๊ตฌ์ฑ
- ๊ธฐ๋ณธ์ ์ผ๋ก Elasticsearch์ ๊ฐ ์์ธ์ ๊ธฐ๋ณธ ์ค๋ 5๊ฐ, ๋ฆฌํ๋ฆฌ์นด 1๊ฐ ๊ฐ์
- ๋ฐ๋ผ์ ํด๋ฌ์คํฐ์ ์ต์ํ 2๊ฐ์ ๋ ธ๋๊ฐ ์๋ค๋ฉด ์์ธ์ ๊ธฐ๋ณธ ์ค๋ 5๊ฐ, ๋ฆฌํ๋ฆฌ์นด ์ค๋ 5๊ฐ(์์ ํ ๋ฆฌํ๋ฆฌ์นด 1๊ฐ)๋ฅผ ๊ฐ์ง๋ฏ๋ก ์์ธ๋น ์ด 10๊ฐ์ ์ค๋๊ฐ ์กด์ฌํ๊ฒ ๋จ.
2.2.4 ์ธ๊ทธ๋จผํธ(Segment)
- document ๋ค์ ๋น ๋ฅธ ๊ฒ์์ ์ ๋ฆฌํ๋๋ก ์ค๊ณ๋ ํน์ํ ์๋ฃ๊ตฌ์กฐ๋ก ์ ์ฅ๋จ
- ์ค๋ ๋ด๋ถ์ Lucene ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจํ๋ฉฐ, ์ด๋ฅผ ์ด์ฉํด ๋๋ถ๋ถ์ ๊ฒ์ ๊ธฐ๋ฅ์ ์ ๊ณตํจ
- ๋ฃจ์ฌ์ ๋ฐ์ดํฐ๊ฐ ์์ธ๋๋ฉด ๋ฐ์ดํฐ๋ ์ต์ ๋จ์์ธ ํ ํฐ์ผ๋ก ๋ถ๋ฆฌ๋๊ณ , Segment ๋ผ๋ ํน์ํ ํํ์ ์๋ฃ๊ตฌ์กฐ๋ก ์ ์ฅ๋จ
- ์ธ๊ทธ๋จผํธ๋ ์ฝ๊ธฐ์ ์ต์ ํ๋ ์๋ฃ๊ตฌ์กฐ๋ก ์ญ์์ธ์ด๋ ํน์ํ ํํ๋ก ๋ณํ๋์ด ๋ฌผ๋ฆฌ์ ๋์คํฌ์ ์ ์ฅ๋จ
- ๊ฒ์์์ง ํน์ฑ์ ์ฐ๊ธฐ๋ณด๋ค ์ฝ๊ธฐ ๋น์ค์ด ๋น๊ต์ ๋๊ธฐ์, ์ข ๋ ํจ์จ์ ์ผ๋ก ๊ฒ์์ ์ํํ ์ ์๋๋ก ๊ณ ์๋ ์๋ฃ๊ตฌ์กฐ๊ฐ ๋ฐ๋ก ์ญ์์ธ ๊ตฌ์กฐ์
์ฐธ๊ณ
- [Elasticsearch] Official Contents: https://www.elastic.co/guide/kr/elasticsearch/reference/current/gs-basic-concepts.html
- [Elasticsearch] Official Index & Shards: https://esbook.kimjmin.net/03-cluster/3.2-index-and-shards
- elastic search ๊ฐ์ด๋๋ถ: https://esbook.kimjmin.net/
- ์์ฒํฅ๋ํ๊ต ๊ต์ก์๋ฃ: http://cs.sch.ac.kr/lecture/BigData/2017/03-ElasticSearch-Introduction.pdf
- Elastic Search ์ ๋ฌธ: https://www.slideshare.net/seunghyuneom/elastic-search-52724188
- Elastic Search ์ ์ฉ ๋ฐ ํ์ฉ: https://www.slideshare.net/JunyiSong1/elasticsearch-45936425
๋ฐ์ํ
'Study: DeveloperTools(DevTool) > DevTool: NoSQL(Elastic, Mongo)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Elastic] ELK Stack: Kibana ์ ๋ฆฌ (0) | 2022.09.02 |
---|---|
[Elastic] ELK Stack: Logstash ์ ๋ฆฌ (2) | 2022.09.01 |
[Elastic] ELK Stack์ด๋? ๊ธฐ๋ณธ ๊ฐ๋ ์ ๋ฆฝ (0) | 2022.08.30 |
[Elastic] Elasticsearch ๋ฐ์ดํฐ ํ์ : ์ ํํ ๋ฐ์ดํฐ ํ์ ์ผ๋ก ์ ๋ ฅํด์ผ ๋ถ๋ฅ, ์ฐ์ฐ, ๊ฒ์ ๊ฐ๋ฅ! (0) | 2022.08.26 |
[Elastic] Elasticsearch ์ธ๋ฑ์ค ์์ฑ ๋ฐ ์ญ์ : shards, replica, mapping... (0) | 2022.08.26 |