๐ ElasticSearch ๊ธฐ๋ณธ ๊ฐ๋ ์์ฝ
์ฐ์ ์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ์ ์ฉํ ElasticSearch์ ๋ํด ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค.
๋ด๊ฐ ElasticSearch๋ฅผ ๊ณต๋ถํ๋ฉฐ ์ค์ํ๊ฒ ์์ฉํ ๋ถ๋ถ๋ค๋ง ์ถ๋ ค์ ์ ์ด๋ณธ๋ค.
๐ก ELK
ElasticSearch์ ๋ํด ๊ณต๋ถ๋ฅผ ํ๋ค๋ณด๋ฉด ELK Stack์ด๋ผ๋ ๋ง์ ๋ง์ด ๋ณผ ์ ์๋ค.
ELK๋ ElasticSearch, Logstash, Kibana์ ์ค์๋ง์ธ๋ฐ
๋ฐ์ดํฐ ๋ก๊ทธ๋ค์ด Logstash๋ฅผ ๊ฑฐ์ณ ElasticSearch์ ์ ์ฅ๋๊ณ , ์ด๋ฅผ ์๊ฐํํ์ฌ Kibana์์ ๋ณผ ์ ์๋ค๋ ๋ด์ฉ์ด๋ค.
- Logstash | ๋ค์ํ ๋ฐ์ดํฐ ๋ก๊ทธ ๋๋ ํธ๋์ญ์ ๋ฐ์ดํฐ๋ฅผ ์์ง, ์ง๊ณ, ํ์ฑํ์ฌ ElasticSearch๋ก ์ ๋ฌ
- ElasitcSearch | Logstash๋ก๋ถํฐ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ , ๊ฒ์ ๋ฐ ์ง๊ณํ์ฌ ํ์ํ ์ ๋ณด๋ฅผ ํ๋
- Kibana | ElasticSearch์ ๋์์ ์๊ฐํ ๋ฐ ๋ชจ๋ํฐ๋ง
๐ก ElasticSerach ๋ฐ์ดํฐ ์ ์ฅ
ElasitcSearch๋ฅผ ์ฒ์ ์ ํ๋ ๋ถ๋ค์ด๋ผ๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ด๋์ ์ ์ฅํ๋๊ฑด์ง ์๋ฌธ์ด ๋ค ์ ์๋๋ฐ,
ElasticSearch๋ง์ ๋ฐ์ดํฐ ์ ์ฅ์๊ฐ ์๊ณ , ๋ ๊ทธ๋ค๋ง์ ๋ฐ์ดํฐ ์ ์ฅ ํํ๊ฐ ์ ํด์ ธ์๋ค.
ํํ ์ฌ์ฉ๋๋ RDB์ ๋น๊ตํ์๋ฉด
Database๋ Index, Table์ Type, column์ Field, row๋ Document๋ก ๊ฐ๊ฐ ๋งคํ๋๋ค.
๊ทธ๋ฆฌ๊ณ RDB์ ์ฑ๋ฅ์ ์ธ ์ธก๋ฉด์์๋ ๋น๊ต๋๋ ๋ถ๋ถ์ด ์๋๋ฐ,
๋ฐ์ดํฐ์ ๋ํ ์ฝ์ , ์์ , ์ญ์ ์ ๋ํด์๋ RDB๊ฐ ์ฑ๋ฅ์ด ์ฐ์ํ๋ฉฐ
ํ๋์ ํ (ํน์ ๋จ์ด)๋ฅผ ํฌํจํ๋ ๋ฌธ์๋ฅผ ์ฐพ๋๋ก ํด์ฃผ๋ ๊ธฐ๋ฅ์ ์์ด์๋ ElasticSearch๊ฐ ์ข์ ์ฑ๋ฅ์ ๋ณด์ธ๋ค.
๐ก ์ญ์์ธ
ElasticSearch๊ฐ ์ ์ฒด ๋ฌธ์๋ฅผ ํ๋์ฉ ๋น๊ตํ์ง ์์๋ ๊ธ๋ฐฉ ํ๋์ ๋จ์ด๋ฅผ ์ฐพ์ ์ ์๋ ๋น๊ฒฐ์ด ๋ฐ๋ก ์ญ์์ธ์ด๋ค.
์ ์ฅ ๋ฐ์ดํฐ๋ฅผ ์ด๋ ํ ๋ถ์๊ธฐ(์ ํ ๊ฐ๋ฅ)๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ์ํ๊ณ , index์ ์ ์ฅํ๋ค.
ElasticSearch์ ๊ธฐ๋ณธ ๋ถ์๊ธฐ๋ WhiteSpace๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๋๋ฐ,
์๋ฅผ ๋ค์ด '๋ํด๋ฌผ๊ณผ ๋ฐฑ๋์ฐ์ด'๋ผ๋ ๋จ์ด๊ฐ ์๋ค๋ฉด '๋ํด๋ฌผ๊ณผ'์ '๋ฐฑ๋์ฐ์ด'๋ก ์ชผ๊ฐ์ด ์ ์ฅํ๋ ๊ฒ์ด๋ค.
๐ Elastic Search ์ ์ฉ ๋ฐฉ์ ํ์
์์ ๊ฐ๋ ์ ๊ฐ์ง๊ณ ์ฐ๋ฆฌ ํ๋ก์ ํธ์ ์ ์ฉํ ๋ฐฉ์์ ํ์ํ๋ ๊ณผ์ ์ ์์ ํ๋ค.
๐ก ELK๊ฐ ํ์ํ๊ฐ?
๋ด๊ฐ ์งํ์ค์ธ ํ๋ก์ ํธ์์๋ ์ ํต์ฃผ์ ์ด๋ฆ์ ๋ํ ์ ๋ณด๋ฅผ Index๋ก ์ ์ฅํ๊ณ ,
์ ํต์ฃผ ๊ฒ์ ์ ํค์๋๋ก ๊ฒ์ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์ ElasticSearch ๋์ ์ ๊ฒฐ์ ํ๋ค.
์ฒ์์๋ ElasticSearch๋ฅผ ๊ณต๋ถํ๋ฉฐ ELK๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋น์ฐํ ์์๊ฐ์ด ๋๊ปด์ ธ์
Logstash๋ฅผ ์ด์ฉํ์ฌ ์ฃผ๊ธฐ์ ์ผ๋ก MySQL์ ์ ํต์ฃผ ํ ์ด๋ธ์ ํ์ธํ์ฌ ์ฑํฌ๋ฅผ ๋ง์ถฐ์ฃผ๋ ์์ ์ ์งํํ๋ค.
(input ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ณ cron ํํ์์ ์ฌ์ฉํ์ฌ Logstash ์์ฑ)
๊ทธ๋ฌ๋ ์๊ฐํด๋ณด๋ ์ฌ๋ฌ ์ด์ ๋ก Logstash ์ฌ์ฉ์ด ๋ฌด์๋ฏธํจ์ ๊นจ๋ฌ์๋ค.
์ ํต์ฃผ์ ์ด๋ฆ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ์๋ ๋ณ๋์ด ๊ฑฐ์ ์์ผ๋ฏ๋ก
MySQL์ ์ฃผ๊ธฐ์ ์ผ๋ก ํ์ธํ์ฌ ์ฑํฌ๋ฅผ ๋ง์ถฐ์ฃผ๋ ์์ ์ด ๋นํจ์จ์ ์ผ ๊ฒ์ด๋ฉฐ,
๋ณ๋์ด ์๋ค๊ณ ํด๋ ํ๋์ฉ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํด์ฃผ๋ ๊ณผ์ ์ด RDB์ ๋นํด
์ฑ๋ฅ์์ ์ด์ ์ด ์๊ธฐ ๋๋ฌธ์ ๊ตณ์ด Logstash๋ฅผ ์ด์ฉํ ์ด์ ๊ฐ ์์๋ค.
์ถ๊ฐ์ ์ผ๋ก, ๋ ๊ฐ์ง ํฌ์คํ ์ ์ฐธ๊ณ ํ์ฌ ELK๋ฅผ ์ฌ์ฉํ์ง ์๊ธฐ๋ก ํ์ ํ๋ค.
1๏ธโฃ '์์ํ์ธ์! ์๋ผ์คํฑ์์น'๋ฅผ ์งํํ์ ๊น์ข ๋ฏผ๋์ ๊ธ
์๋ผ์คํฑ์์น ์ฌ์ฉ๋ฒ - Jongmin's Lifelog (kimjmin.net)
์ ๊ธ์์๋ ํ์ ์ ElasticSearch ํ์ฉ ๋ฐฉ์์ ๋ํ ๋ด์ฉ์ด ์ ํ์๋๋ฐ, ์์ฝํ์๋ฉด ์๋์ ๊ฐ๋ค.
ํน์ ๋ชจ๋ฅผ ๋ฐ์ดํฐ ์ ์ค ๋ฑ์ ๋๋นํ์ฌ ์๋ณธ ๋ฐ์ดํฐ๋ฅผ Logstash์ ์ ๋ ฅ ๊ฐ๋ฅํ JSON ํ์์ผ๋ก ์ ์ฅํ๊ณ ,
S3์ ์์ถํ์ฌ ๋ณด๊ดํ๋ ๊ฒ์ ๊ถ์ฅํจ
๊น์ข ๋ฏผ๋์ ๊ฒฝ์ฐ, ๋งค์ผ 10GB์ ๋ ๋๋ ๋ฐ์ดํฐ๋ฅผ JSON์ผ๋ก ๋ณํํ๊ณ ,
Logstash๋ก ์ ๋ ฅํ ๋ค์ ๋ณํ ํ์ผ์ tar.gz๋ก ์์ถํ์ฌ S3 ๋ฒํท์ ๋งค์ผ ๋ ์ง๋ณ๋ก ๋ฐฑ์ ํ๋ ์์ผ๋ก ์ด์
๐ ํ ์คํธ ํ์ผ์ด๊ธฐ ๋๋ฌธ์ ์์ถ ์ 1/100 ์ ๋๋ก ์ค์ด๋ค๋ฉฐ, S3๋ ์ฌ์ฉ๋ฃ๊ฐ ์ ๋ ดํ์ฌ ๋ฐฑ์ ํ๊ธฐ ์ข์
์ด์ํ๋ ์๋น์ค์ ๋ฐ๋ผ ๋ค๋ฅด์ง๋ง,
ES์ ์ ์ฅ๋๋ ๋ฐ์ดํฐ๋ ๋ณํ์ด๋ ๊ฐ๊ณต์ ๋๋๋ก ์ง์ํ๊ณ ๋ฌด๊ฒฐ์ฑ์ ๋ํ ๊ธฐ๋๋ ํ์ง ์์ผ๋ฉฐ
์์ํ๊ฒ ๊ฒ์๊ณผ ํต๊ณ๋ฅผ ์ํด์ ์ฌ์ฉํ๋ ๊ฒ์ ์ถ์ฒํจ
(๋ฐ์ดํฐ๋ฅผ ๋ฌด๊ฒฐํ๊ฒ ์ ์งํ๊ณ ์ ์ง๋์น๊ฒ ์์ฃผ Logstash๋ฅผ ์ด์ฉํด RDB๋ฅผ ๊ฒ์ฌํ๊ฒ ๋๋ฉด
์ฑ๋ฅ์ ์์ข์ ์ํฅ์ ๋ฏธ์น ์ ์์)
์์ ๋ด์ฉ์ผ๋ก ๋ณด์์ ๋, ๋ถํ์ํ๊ฒ MySQL์ ๊ฒ์ฌํ๋ ๊ฒ์ ์ฑ๋ฅ์ ์ข์ง ๋ชปํ๋ฉฐ
ElasticSearch์ ์ ์ฅํ๋ ๋ฐ์ดํฐ๋ ์ฃผ๊ธฐ์ ์ผ๋ก 'ํ ๋ฒ์' ๋ฃ๊ณ ๋นผ๋ ๊ฒ์ด ๊ถ์ฅ๋๋ค๊ณ ๋ณด์ฌ์ก๋ค.
(ํนํ ๋ฐ์ดํฐ ๋ณ๋์ด ๊ฑฐ์ ์๋ ์ ํต์ฃผ ์ด๋ฆ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ์๋ ๋๋์ฑ!)
2๏ธโฃ ๋ฐฐ๋ฌ์ ๋ฏผ์กฑ ํ ํฌ ๋ธ๋ก๊ทธ์ ElasticSearch ํ์ฉ ํฌ์คํ
๊ฒ์์ ์ํ ๋ฐ์ดํฐ ๋ค๋ฃจ๊ธฐ | ์ฐ์ํํ์ ๋ค ๊ธฐ์ ๋ธ๋ก๊ทธ (woowahan.com)
์์ ๊ธ์์๋ ๊ฑด๋ฐ์ด๊ฑด์ผ๋ก ElasticSearch์ ๋ฐ์ดํฐ๋ฅผ update ํ๋ ๊ฒ๋ณด๋ค,
ํ ๋ฒ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ update ํด์ฃผ๋ ๊ฒ์ด ํจ์จ์ ์์ ๋ค๋ฃจ๋ ๋ด์ฉ์ด ์๋ค.
์์ฝํ์๋ฉด ์๋์ ๊ฐ๋ค.
์ด๊ธฐ ์์คํ ์ค๊ณ ์ ๋ค์ด์ค๋ ๋ฐ์ดํฐ์ ์์ด ๊ทธ๋ ๊ฒ ๋ง์ง ์์๊ณ ,
์์ธก์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ณ์ ์ผ๋ก ๋ค์ด์ค๋ ์ด๋ฒคํธ๋ฅผ ๊ฑด๋ฐ์ด๊ฑด์ผ๋ก update request๋ฅผ ๋ง๋ค์ด ๋ฐ์ํจ
๐ ๊ฐ๊ฒ๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์คํํ๋ ์๊ฐ๋๋ ์ฃผ๋ฌธ์ด ๋ง์ ๋ฉ๋ด ํ์ ๋ฑ์ ์ํฉ์ด ๋ง์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ
์ด๋ฒคํธ๋ฅผ ๋ง์ด ์์ ํ๊ฒ ๋์๊ณ , ๊ทธ์ ๋ฐ๋ผ ElasticSearch์ ๋ํ ๋ถ๋ด์ด ์ง์ค๋๋ฉด์
request๊ฐ reject๋๋ ๋ฌธ์ ๋ฑ์ด ๊ธฐํ๊ธ์์ ์ผ๋ก ์์นํจ
๋ฌธ์ ์ ์์ธ์ผ๋ก, ์ฆ์ ๋ณ๊ฒฝ์ ์ํ Dish I/O ๋ฌธ์ ๊ฑด๋ฐ์ด๊ฑด ์์ฒญ์ผ๋ก ์ธํ thread pool ์ด๊ณผ ์ด์ ๋ฐ๊ฒฌ
๐ก ์ ๋ต์ ์ธ์ ๋ ๊ธฐ๋ณธ์ ์๋ค.
MySQL Doc์ ๋ณด๋ฉด ์๋์ ๊ฐ์ ๋ง์ด ์์
"insert ์ฑ๋ฅ์ ๋์ด๊ธฐ ์ํด์๋ ์์ ์ฌ๋ฌ ๊ฐ์ ์ฐ์ฐ์ ํ๋์ ํฐ ์ฐ์ฐ์ผ๋ก ๋ง๋ค์ด๋ผ."
ElasticSearch๋ํ ๊ฐ์ ๊ฐ๋ ์ ๊ฐ๊ณ ์๊ณ ,
๋จ๊ฑด request๋ณด๋ค Bulk request์ ํจ๋ฅ์ด ํฐ ๊ฒ์ ์ ์ฆ๋ ์ฌ์ค์
์์ ๋ด์ฉ์ ๋ณด๊ณ ๊ฑด๋ฐ์ด๊ฑด ์์ฒญ๋ณด๋ค ํ ๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํด์ฃผ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ผ ๊ฒ์ ํ์ ํ๊ณ ,
ElasticSearch์ Bulk API๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๊ฒฐ์ ํ๋ค.
๊ฒฐ๋ก
์ค๋ ์ ๋ฆฌํ ElasticSearch์ ๊ฐ๋ ๊ณผ ์ ์ฉ ๋ฐฉ์ ํ์ ๊ณผ์ ์ ๊ธฐ๋ฐ์ผ๋ก,
์ฐ๋ฆฌ๋ ELK ๋์ Bulk API๋ฅผ ํ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์์ ์ฑํํ๋ค.
๋ค์ ๊ธ์์๋ ์ ์ฉํ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณด๊ฒ ๋ค.
2023.04.02 - [๐ข[ Web ]/๊ธฐํ] - [Web] ElasticSearch nori & Bulk API ํ์ฉ
'1๏ธโฃ Web > ๊ธฐํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Web] Chrome Cross-Origin ์ ์ฑ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ iframe ํ์ฉ ๋ฐฉ์ (feat. PostMessage) (1) | 2023.10.14 |
---|---|
[Web] ElasticSearch nori & Bulk API ํ์ฉ (0) | 2023.04.02 |
[Web] Anchor (a ํ๊ทธ) (0) | 2022.09.18 |
[Web] input ํ๊ทธ์ id์ name ์ฐจ์ด์ (0) | 2022.09.18 |
[Web] Form Tag์ ์ด๋ฒคํธ, ์ด๋ฒคํธ ํธ๋ค๋ฌ (2) | 2022.09.18 |
๋๊ธ