๊ธฐ์ ์กฐ์ฌ - ELK
1. Elastic Search
๊ฐ์
- JSON ๊ธฐ๋ฐ์ ๋ถ์ฐํ ๊ฒ์ ์์ง
Apache Lucene๋ผ๋ Java ๊ฒ์ ์์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
ํ์ง๋ง Apache Lucene๋ ๋๋ฌด ์ ์์ค ๋๊ตฌ๋ค์ด๋ผ ์ง์ ํ์ฉํ๊ธฐ ํ๋ฆ.
๋ฐ๋ผ์ Lucene์ ๋ด๋ถ ์์ง์ผ๋ก ์ฌ์ฉํ๋ฉด์ REST API, ๋ถ์ฐ ์ฒ๋ฆฌ, ํด๋ฌ์คํฐ๋ง, JSON๋ฐ์ดํฐ ์ฒ๋ฆฌ, ๋์๋ณด๋ ์ฐ๋ ๋ฑ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๊ณ ์์ค ํ๋ซํผ
์๋ ์๋ฆฌ(๊ฐ๋จํ)
- ๋ฐ์ดํฐ ์ ์ฅ
- Jsonํ์์ ๋ฌธ์๋ฅผ elasticsearch์ ์ ์ก
- ๋ด๋ถ์ ์ผ๋ก ๋จ์ด(ํ ํฐ)๋ก ์ชผ๊ฐฌ โ ์ญ์์ธ ๊ตฌ์กฐ๋ก ์ ์ฅ
- ๊ฒ์ํ ๋
- ์ฌ์ฉ์์ ๊ฒ์ ํค์๋ ๋ํ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ชผ๊ฐฌ
- ์ญ์์ธ์ ์กฐํํด ํด๋น ํค์๋๋ฅผ ํฌํจํ ๋ฌธ์ ID๋ฅผ ์ฐพ์๋
์ญ์์ธ ๊ตฌ์กฐ
๋จ์ด โ ๋ฌธ์๋ฅผ ์ฐ๊ฒฐํด ์ ์ฅํ๋ ๊ตฌ์กฐ
ex)
๋ฌธ์ 1 : ์ผ์ฑ์ ์ ์ฃผ๊ฐ ์์น
๋ฌธ์ 2 : ์ ํ ์ฃผ๊ฐ ํ๋ฝ
"์ผ์ฑ์ ์" -> [๋ฌธ์ 1]
"์ฃผ๊ฐ" -> [๋ฌธ์ 1, ๋ฌธ์ 2]
"์์น" -> [๋ฌธ์ 1]
"ํ๋ฝ" -> [๋ฌธ์ 2]
- (๊ฐ๋จํ ์์์์ง๋ง, ๋น์ฐํ ์ ๋ชฉ๋ง์ ์ญ์์ธํ๋ ๊ฒ์ด ์๋๋ค.)
- ํ๊ธ์ ์์ด๊ฐ ์๋๋ค. ๋์์ฐ๊ธฐ ๋จ์๋ก ์๋ฅด๋ ๊ฒ ๋ณด๋ค ํจ์ฌ ๊ณ ์์ค์ โํํ์ ๋ถ์๊ธฐโ๊ฐ ํ์ํ๋ค.
์ฉ์ด
๊ฐ๋ | ์ค๋ช |
---|---|
๋ฌธ์ document | ๊ฒ์ํ ๋ฐ์ดํฐ ํ ๊ฑด |
์ธ๋ฑ์ค index | ๋ฌธ์๋ค์ด ๋ชจ์ธ ๊ณต๊ฐ DB์ ํ ์ด๋ธ ๋๋ |
ํ๋ field | ๋ฌธ์ ๋ด ๋ฐ์ดํฐ ์์ฑ title, content, โฆ |
๋งคํ | ๊ฐ ํ๋์ ๋ฐ์ดํฐ ํ์
์ ์ text, keyword, data |
์ญ์์ธ inverted index | ํ ์คํธ โ ๋จ์ด โ ๋ฌธ์ ID ์ฐ๊ฒฐ, ๋น ๋ฅธ ๊ฒ์์ ํต์ฌ |
2. Kibana
๊ฐ์
- Elasticsearch ๋ฐ์ดํฐ๋ฅผ ์๊ฐํํ๊ณ ๋ถ์ํ ์ ์๊ฒ ํด์ฃผ๋ ๋์๋ณด๋ ๋๊ตฌ.
- ์ฌ์ฉ์๋ ๋ธ๋ผ์ฐ์ ์์ Kibana๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ณ , ๊ฒ์ํ๊ณ , ๊ทธ๋ํ๋ก ํํํ ์ ์๋ค.
์ญํ
- ๐ ๋์๋ณด๋ ์์ฑ
- ๐ ๋ฐ์ดํฐ ๊ฒ์/ํํฐ๋ง
- ๐งพ ๋ก๊ทธ ํ์
- โ๏ธ ์ธ๋ฑ์ค ๊ด๋ฆฌ (ํจํด์ผ๋ก ์ค์ ๊ฐ๋ฅ)
3. Logstash
๊ฐ์
- ๋ฐ์ดํฐ ์์ง ๋ฐ ๊ฐ๊ณต ๋๊ตฌ
- ๋ก๊ทธ, ์ด๋ฒคํธ, ๋ฉํธ๋ฆญ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ ์ฒ๋ฆฌํ๊ณ ๋ค๋ฅธ ์์คํ ์ผ๋ก ์ ์ก
์ญํ
-
๋ฐ์ดํฐ ์์ง (Input) ๋ค์ํ ์์ค์์ ๋ฐ์ดํฐ๋ฅผ ์์ง (ํ์ผ, HTTP, ๋ฐ์ดํฐ๋ฒ ์ด์ค, ๋ฉ์์ง ํ ๋ฑ)
-
๋ฐ์ดํฐ ์ฒ๋ฆฌ (Filter)
์์งํ ๋ฐ์ดํฐ๋ฅผ ํํฐ๋งํ๊ณ , ํ์์ ๋ฐ๊พธ๊ฑฐ๋, ์๋ก์ด ํ๋๋ฅผ ์ถ๊ฐํ๋ ๋ฑ ๊ฐ๊ณต์ ํจ. -
๋ฐ์ดํฐ ์ ์ก (Output) ๊ฐ๊ณต๋ ๋ฐ์ดํฐ๋ฅผ Elasticsearch๋ ๋ค๋ฅธ ์ ์ฅ์๋ก ์ ์กํจ.
4. ๊ธฐํ ๊ธฐ์
4-1. Fluentd
- Fluentd๋ ๋ค์ํ ์์ค๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ , ์ํ๋ ํฌ๋งท์ผ๋ก ๋ณํํ์ฌ ๋ชฉ์ ์ง๋ก ์ ๋ฌํ๋ ์คํ์์ค ๋ฐ์ดํฐ ์์ง๊ธฐ
- Logstash์ ๋น์ทํ ์ญํ ์ ํ ์ ์๋ค.
[๋ด์ค API] โ [Fluentd] โ [Elasticsearch]
โ [ํ์ผ ์ ์ฅ]
โ [MongoDB]
๊ตฌ์ฑ ์์
๊ตฌ์ฑ ์์ | ์ค๋ช |
---|---|
Input | ๋ฐ์ดํฐ๋ฅผ ์ด๋์ ์์งํ ์ง (์: HTTP, ํ์ผ, Kafka ๋ฑ) |
Filter | ๋ฐ์ดํฐ ๊ฐ๊ณต/์ ์ (ํ๋ ์ ๊ฑฐ, ํ์ ๋ณ๊ฒฝ ๋ฑ) |
Output | ๋ฐ์ดํฐ๋ฅผ ์ด๋๋ก ๋ณด๋ผ์ง (์: Elasticsearch, DB, ํ์ผ ๋ฑ) |
vs. Logstash
ํญ๋ชฉ | Logstash | Fluentd |
---|---|---|
์์ | Elastic Stack | CNCF (Cloud Native Computing Foundation) |
๋ชฉ์ | Elasticsearch์ ์ฐ๋ ์ต์ ํ | ๋ค์ํ ๋ชฉ์ (ES, DB, Kafka ๋ฑ) ์ง์ |
์ฑ๋ฅ | ๊ฐ๋ ฅํ์ง๋ง ๋ฌด๊ฒ๊ณ ๋ฆฌ์์ค ์ฌ์ฉ ํผ | ๊ฐ๋ณ๊ณ ํจ์จ์ (ํนํ Fluent Bit) |
ํ์ฅ์ฑ | ๊ณ ๊ธ ํ์ฑ/ํํฐ๋ง(grok ๋ฑ) ๊ฐ์ | ๋ค์ํ ํ๋ฌ๊ทธ์ธ ์ํ๊ณ |
์ค์ ๋ฐฉ์ | .conf ย (์ค์ฒฉ X, ๊ฐ๋จํ ๊ตฌ์กฐ) | .conf ย ๋๋ย .yaml ย (์ค์ฒฉ ๊ตฌ์กฐ ์ง์) |
UI | Kibana ๋ฑ์ผ๋ก ์ฐ๋ ๊ฐ๋ฅ | UI ์์ (์ธ๋ถ ํด ํ์) |
ํ์ต ๋์ด๋ | ๋น๊ต์ ์ฌ์ | ๊ตฌ์กฐ ์ดํด ํ์, ์กฐ๊ธ ๋ ๋ณต์กํ ์ ์์ |
์ฉ๋ ์ถ์ฒ | Elastic Stack ์ค์ฌย ์์คํ | ํด๋ผ์ฐ๋/๋ฉํฐ ๋ก๊ทธ ์์คย ํตํฉ ๊ด๋ฆฌ |