ElasticSearch
κ²μμ μ΅μ νλ μ€νμμ€
곡μλ¬Έμ λ₯Ό μ°Έκ³ νμ¬ ν΄λΉ λ΄μ©μ ν¬μ€ν ν©λλ€. 무μ μ¬ λ°μ΄ν° μ¬μ΄μΈμ€ μμ§λμ΄ λΈλ‘κ·Έ
01. κ°μ
Elasticsearch (ES) λ νμ₯μ±μ΄ λ°μ΄λ μ€νμμ€ νν
μ€νΈ κ²μ λ° λΆμ μμ§μ΄λ€. λ°©λν μμ λ°μ΄ν°λ₯Ό μ μνκ²,
κ±°μ μ€μκ°μΌλ‘ μ μ₯, κ²μ, λΆμν μ μλλ‘ μ§μν©λλ€. μΌλ°μ μΌλ‘ 볡μ‘ν κ²μ κΈ°λ₯ λ° μꡬ μ¬νμ΄ μλ
μ ν리μΌμ΄μ
μ μν κΈ°λ³Έ μμ§/κΈ°μ λ‘ μ¬μ©λ©λλ€.
Elasticsearchλ λ€μμ λΉλ‘―ν λ€μν νμ© μ¬λ‘μ ν¨κ³Όμ μ λλ€.
- κ³ κ°μ΄ ν맀 μ νμ κ²μν μ μλ μ»€λ¨Έμ€ μΉμ μ΄μνλκ²½μ°, Elasticsearchλ₯Ό μ¬μ©νμ¬ μ 체 μ ν μΉ΄νλ‘κ·Έ λ° μ¬κ³ μ 보λ₯Ό μ μ₯νκ³ κ·Έμ λν κ²μ λ° μλ μμ± μ μ κΈ°λ₯μ μ 곡ν μ μμ΅λλ€.
- Log or Transaction λ°μ΄ν°λ₯Ό μμ§νκ³ μ΄ λ°μ΄ν°λ₯Ό λΆμνκ³ λ§μ΄λνμ¬ μΆμ΄, ν΅κ³, μμ½ μ 보λ₯Ό μ»κ±°λ,
μ΄μ μμΈμ μμλ΄λ € ν©λλ€. μ΄ κ²½μ°μλ Logstash (ELK μ€νμ μΌλΆ) λ₯Ό μ¬μ©νμ¬ λ°μ΄ν° μμ§, μ§κ³, νμ±μ μνν λ€μ Logstashμμ ES μ μ΄ λ°μ΄ν°λ₯Ό νΌλ ννλ‘ μ λ¬
λ°μ΄ν°κ° ESμ μ μ¬λλ©΄ κ²μ λ° μ§κ³λ₯Ό μ€ννμ¬ κ΄μ¬ μλ μ΄λ€ μ 보λ λ§μ΄λν μ μμ΅λλ€. - κ³ κ°μ΄ μ΄λ€ μ
λ¬μ μ νμ΄λ κ°κ²©μ΄ $?? μλλ‘ λ΄λ €κ°λ©΄ μλ¦Όμ λ°μ μ μλ€.
κ³ κ°μκ² νΈμ λ°©μμΌλ‘ μ릴 μ μλ€. - BI κΈ°λ₯μ΄ νμνλ©° λ°©λνλ°μ΄ν°λ₯Ό λμμΌλ‘ μ μνκ² μ‘°μ¬, λΆμ, μκ°ν, μμ μ§μλ₯Ό μν
ES λ₯Ό μ¬μ©νμ¬ λ°μ΄ν°μ μ₯ν Kibana λ₯Ό μ¬μ©νμ¬ λ°μ΄ν° μ€ μ€μν μμλ₯Ό μκ°ννλ€.
02. κΈ°λ³Έ κ°λ
- NRT (Near Realtime)
- ES λ NRT κ²μ νλ«νΌμ΄λ€. μ¦, λ¬Έμλ₯Ό μμΈν(index)νλ μμ λΆν° λ¬Έμκ° κ²μ κ°λ₯ν΄μ§λ
μμ κΉμ§μ λκΈ°μκ°(λκ² 1μ΄)μ΄ μμ΅λλ€.
- ES λ NRT κ²μ νλ«νΌμ΄λ€. μ¦, λ¬Έμλ₯Ό μμΈν(index)νλ μμ λΆν° λ¬Έμκ° κ²μ κ°λ₯ν΄μ§λ
- ν΄λ¬μ€ν° (Cluster)
- ν΄λ¬μ€ν°λ νλ μ΄μμ λ Έλ(μλ²)κ° λͺ¨μΈ κ²
- μ 체 λ°μ΄ν°λ₯Ό μ μ₯νκ³ , λͺ¨λ λ Έλλ₯Ό ν¬κ΄νλ ν΅ν© μμΈν λ° κ²μ κΈ°λ₯μ μ 곡
- ν΄λ¬μ€ν°λ κ³ μ ν μ΄λ¦μΌλ‘ μλ³λλ©°, κΈ°λ³Έκ°μ elasticsearch μ΄λ€.
- μ΄λ¦μ΄ μ€μν μ΄μ λ, μ΄λ€ λ Έλκ° μ΄λ ν΄λ¬μ€ν°μ ν¬ν¨λκΈ° μν΄μλ μ΄λ¦μ μν΄ ν΄λ¬μ€ν° ꡬμ±μμ΄ λλλ‘ μ€μ λκΈ° λλ¬Έμ΄λ€.
- λμΌν ν΄λ¬μ€ν° μ΄λ¦μ μλ‘ λ€λ₯Έ νκ²½μμ μ¬μ¬μ© X
- λ Έλκ° μλͺ»λ ν΄λ¬μ€ν°μ ν¬ν¨λ μνμ΄ μλ€. μλ₯Όλ€μ΄
- κ°λ°, μ€ν
μ΄μ§, νλ‘λμ
ν΄λ¬μ€ν°μ
logging-dev
,logging-stage
,logging-prod
κ°λ₯ - ν΄λ¬μ€ν°μ νλμ λ Έλλ§ μλ κ²λ κ°λ₯νλ©°, λν κ°μ κ³ μ ν ν΄λ¬μ€ν° μ΄λ¦μ κ°μ§ λ 립μ μΈ ν΄λ¬μ€ μ¬λ¬ κ°λ₯Ό λ μλ μλ€.
- λ
Έλ (Node)
- λ Έλλ ν΄λ¬μ€ν°μ ν¬ν¨λ λ¨μΌ μλ²λ‘μ λ°μ΄ν°λ₯Ό μ μ₯νκ³ ν΄λ¬μ€ν°μ μμΈν λ° κ²μ κΈ°λ₯μ μ°Έμ¬
- λ Έλλ ν΄λ¬μ€ν°μ²λΌ μ΄λ¦μΌλ‘ μλ³λλ©°, κΈ°λ³Έ μ΄λ¦μ μμ μ λ Έλμ μ§μ λ μμ UUID
- κΈ°λ³Έμ΄λ¦ λμ Custom λ Έλμ΄λ¦μ μ μ κ°λ₯
- μ΄λ¦μ κ΄λ¦¬λͺ©μ μμ μ€μνλ€. λ€νΈμν¬μ μ΄λ€ μλ²κ° ES ν΄λ¬μ€ν°μ μ΄λ€ λ Έλμ ν΄λΉνλμ§ μλ³νμ!!
- λ Έλλ ν΄λ¬μ€ν° μ΄λ¦μ ν΅ν΄ μ΄λ€ ν΄λ¬μ€ν°μ μΌλΆλ‘ ꡬμ±λ μ μλ€.
- κΈ°λ³Έμ μΌλ‘ κ° λ Έλλ elasticsearch λΌλ μ΄λ¦μ ν΄λ¬μ€ν°μ ν¬ν¨λλλ‘ μ€μ λλ€.
- λ€νΈμν¬μμ λ€μμ λ Έλλ₯Ό μμν κ²½μ° (κ°κ°μ κ²μν μ μλ€κ³ κ°μ ) μ΄ λ Έλκ° λͺ¨λ μλμΌλ‘ Elasticsearch λΌλ λ¨μΌ ν΄λ¬μ€ν°λ₯Ό νμ±νκ³ μ΄ ν΄λ¬μ€ν°μ μΌλΆκ° λ©λλ€.
- νλμ ν΄λ¬μ€ν°μμ μνλ κ°μμ λ Έλλ₯Ό ν¬ν¨ν μ μλ€.
- ES μ λ Έλκ° νλλμμ μ, λ¨μΌ λ Έλλ‘ μμνλ©΄ κΈ°λ³Έμ μΌλ‘ elasticsearch λΌλ μ΄λ¦μ λ¨μΌλ Έλ ν΄λ¬μ€ν°κ° λ§λ€μ΄μ§λ€.
- μΈλ±μ€ (Index)
- μμΈμ λ€μ λΉμ·ν νΉμ±μ κ°μ§ λ¬Έμμ λͺ¨μ
- κ³ κ° λ°μ΄ν°μ λν μμΈ, μ ν μΉ΄νλ‘κ·Έμ λν μμΈ, μ£Όλ¬Έ λ°μ΄ν°μ λν μμΈ λ±λ±..
- μμΈμ λͺ¨λ μλ¬Έμμ΄λ¦μΌλ‘ μλ³λλ©°, μ΄ μ΄λ¦μ μμΈμ ν¬ν¨λ λ¬Έμμ λν μμΈν, κ²μ, μ λ°μ΄νΈ, μμ μμ μμ ν΄λΉ μμΈμ κ°λ¦¬ν€λ λ° μ°μΈλ€.
- λ¨μΌ ν΄λ¬μ€ν°μμ μνλ κ°μμ μμΈμ μ μν μ μλ€.
- RDBλ‘ λΉμ νλ©΄ Tableκ³Ό λΉμ·ν λλ?
- νμ
(Type)
- νλμ μμΈμμ νλ μ΄μμ μ νμ μ μν μ μλ€.
- Type(μ ν) μ΄λ, Index(μμΈ)μ λ Όλ¦¬μ μΌλ‘ λΆλ₯/ꡬλΆν κ², κ·Έ μλ―Έ 체κ³λ μ¬μ©μκ° κ²°μ
- μΌλ°μ μΌλ‘ μ¬λ¬ 곡ν΅λ νλλ₯Ό κ°λ λ¬Έμμ λν΄ μ νμ΄ μ μλλ€.
- μλ₯Ό λ€μ΄, λΈλ‘κ·Έ νλ«νΌμ μ΄μνκ³ μλλ° λͺ¨λ λ°μ΄ν°λ₯Ό νλμ Index(μμΈ)μ μ μ₯νκ² λλ€λ©΄,
μ΄ Index μμ μ¬μ©μ λ°μ΄ν°, λΈλ‘κ·Έ λ°μ΄ν°, λκΈ λ°μ΄ν°μ λν μ ν(Type)μ κ°κ° μ μν μ μλ€.
- λνλ¨ΌνΈ (Document)
- λνλ¨ΌνΈ(λ¬Έμ)λ Indexνν μ μλ κΈ°λ³Έ μ 보 λ¨μ
- λ¨μΌ κ³ κ°, λ¨μΌ μ ν, λ¨μΌ μ£Όλ¬Έμ λν λ¬Έμκ° κ°κ° μ‘΄μ¬ν μ μλ€.
- μ΄ λ¬Έμλ Jsonνμμ΄λ€.
- νλμ Index/Type μ μνλ κ°μμ Documentλ₯Ό μ μ₯ν μ μλ€.
- λνλ¨ΌνΈκ° 물리μ μΌλ‘λ μ΄λ€ Indexλ΄μ μλλΌλ λνλ¨ΌνΈλ Indexνλμ΄ μμΈμ ν¬ν¨λ μ΄λ€ μ νμΌλ‘ μ§μ λμ΄μΌ νλ€
- μ€λ/λ ν리카 (Shard/Replica)
- indexλ λ°©λν μμ λ°μ΄ν°λ₯Ό μ μ₯ν μ μλ€.
- μ΄ λ°μ΄ν°κ° λ¨μΌ λ
Έλμ νλμ¨μ΄ νλλ₯Ό μ΄κ³Όν μλ μλ€.
- 10μ΅ κ°μ λνλ¨ΌνΈλ‘ ꡬμ±λ νλμ μμΈμ 1TB λμ€ν¬ 곡κ°μ΄ νμν κ²½μ°
- λ¨μΌ λ Έλμ λμ€ν¬μμ μμ©νμ§ λͺ»νκ±°λ, λ¨μΌ λ Έλμμ κ²μ μμ² μ²λ¦¬ μ μλκ° λ무 λλ €μ§μμλ€.
- ES λ μ΄λ¬ν λ¬Έμ λ₯Ό ν΄κ²°νκ³ μ Index λ₯Ό Shard μ€λλΌλ μ‘°κ°μΌλ‘ λΆν νλ κΈ°λ₯μ μ 곡νλ€.
- Indexλ₯Ό μμ±μ, μνλ μ€λ μλ₯Ό μ€μ κ°λ₯
- κ° μ€λλ κ·Έ μμ²΄κ° μ¨μ ν κΈ°λ₯μ κ°μ§ λ 립μ μΈ Indexμ΄λ©°, ν΄λ¬μ€ν°μ μ΄λ€ λ Έλμμλ νΈμ€ν ν μμλ€.
- μ€λ©μ΄ μ€μν 2κ°μ§ μ΄μ
- μ½ν μΈ λ³Όλ₯¨μ μν λΆν /νμ₯μ΄ κ°λ₯ν΄μ§λ€.
- μμ μ (μ¬λ¬ λ Έλμ μμΉν) μ¬λ¬ μ€λμ λΆμ° λ°°μΉνκ³ λ³λ ¬νν¨μΌλ‘μ¨ μ±λ₯/μ²λ¦¬λ λ릴 μ μλ€.
- μ€λκ° λΆμ° λ°°μΉλλ λ°©μ λ° κ·Έ λ¬Έμκ° λ€μ κ²μ μμ²μΌλ‘ μ§κ³λλ λ°©μμ λ©μ»€λμ¦μ λͺ¨λ ESμμ
κ΄λ¦¬νλ©° μ¬μ©μμκ²λ ν¬λͺ νκ² μ΄λ£¨μ΄μ§λ€. - μΈμ λ μ€λ₯κ° μΌμ΄λ μ μλ λ€νΈμν¬/ν΄λΌμ°λ νκ²½μμλ μ΄λ€ μ΄μ μμλ μ€λ/λ Έλκ° μ€νλΌμΈ μνκ° λκ±°λ μ¬λΌμ§κ² λ κ²½μ°μ λλΉνμ¬ FailOver λ©μ»€λμ¦μ λ§λ ¨νλ κ²μ΄ μ μ΅νκ³ λ°λμ§νλ€.
- μ΄λ¬ν μ·¨μ§μμ ESμμλ Indexμ Shardμ λν΄ 1κ° μ΄μμ 볡μ¬λ³Έμ μμ±ν μ μλλ°, μ΄λ₯Ό Replica Shard μ€μ¬μ 리ν리카λΌκ³ νλ€.
- 리ν리카λ₯Ό λ§λλ 볡μ κ° μ€μν 2κ°μ§ μ΄μ
- μ€λ/λ Έλ μ€λ₯κ° λ°μνλλΌλ κ³ κ°μ©μ±μ μ 곡νλ€. λ°λΌμ 리ν리카 μ€λλ κ·Έ μλ³ΈμΈ κΈ°λ³Έ μ€λμ λμΌν λ Έλμ λ°°μ λμ§ μλλ€.
- λͺ¨λ 리ν리카μμ λ³λ ¬ λ°©μμΌλ‘ κ²μμ μ€νν μ μμΌλ―λ‘ κ²μ λ³Όλ₯¨/μ²λ¦¬λμ νμ₯ ν μ μλ€.
- μμ½
- κ° Index λ Nκ°μ Shard λ‘ λΆν ν μ μλ€.
- νλμ Indexλ 볡μ νμ§ μκ±°λ(리ν리카 μμ) 1ν μ΄μ 볡μ ν μ μλ€.
- 볡μ λλ©΄ κ° Indexλ κΈ°λ³Έ μ€λ(볡μ μλ³Έ μ€λ)μ 리ν리카 μ€λ(κΈ°λ³Έ μ€λμ 볡μ λ³Έ)λ₯Ό κ°μ΅λλ€.
- Shard λ° Replicaμ μλ Indexλ³λ‘, Index μμ± μμ μ μ μ κ°λ₯νλ€.
- Index μμ± μ΄ν νλ ₯μ μΌλ‘ Replicaμ μλ₯Ό λ³κ²½ν μ μμΌλ, Shard μλ λ³κ²½ λΆκ°λ₯νλ€.
- κΈ°λ³Έμ μΌλ‘ ES μ κ° Indexλ κΈ°λ³Έ Shard 5κ°, Replica 1κ°λ₯Ό κ°μ΅λλ€.
- λ°λΌμ ν΄λ¬μ€ν°μ μ΅μν 2κ°μ λ Έλκ° μλ€λ©΄ Indexλ κΈ°λ³ΈShard 5κ° Replica Shard 5κ° (μμ ν 리ν리카 1κ°) λ₯Ό κ°μ§λ―λ‘ Index λΉ μ΄ 10κ°μ Shard κ° μ‘΄μ¬νκ² λλ€.
03. μ°Έκ³ μ΄λ―Έμ§
ELK = elasticsearch + logstash + kibana
λκΈλ¨κΈ°κΈ°