ELK
Last updated
Last updated
ELK๋ ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด, ๋ถ์ ๋ฐ ์ ์ฅ ๊ธฐ๋ฅ์ ๋ด๋นํ๋ ElasticSearch, ์์ง ๊ธฐ๋ฅ์ ํ๋ Logstash, ์ด๋ฅผ ์๊ฐํํ๋ ๋๊ตฌ์ธ Kibana์ ์๊ธ์๋ง ๋ด ๋จ์ด์ด๋ค. ELK๋ ์ ๊ทผ์ฑ๊ณผ ์ฉ์ด์ฑ์ด ์ข์ ์ต๊ทผ ๊ฐ์ฅ ํซํ Log ๋ฐ ๋ฐ์ดํฐ ๋ถ์ ๋๊ตฌ์ด๋ค.
ElasticSearch๋ Lucene ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐํ ๋ถ์ฐ ๊ฒ์์์ง์ผ๋ก, Logstash๋ฅผ ํตํด ์์ ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ์์ ์ ์ฅํ๋ ์ญํ ์ ๋ด๋น
๋ฐ์ดํฐ๋ฅผ ์ค์ฌ๋ถ์ ์ ์ฅํ์ฌ ์์๋๋ ํญ๋ชฉ์ ๊ฒ์ํ๊ณ ์์์น ๋ชปํ ํญ๋ชฉ์ ๋ฐํ๋ผ ์ ์๋ค.
์ ํ, ๋น์ ํ, ์์น์ ๋ณด, ๋ฉํธ๋ฆญ ๋ฑ ์ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ค์ํ ์ ํ์ ๊ฒ์์ ์ํํ๊ณ ๊ฒฐํฉํ ์ ์๋ค.
์๋ผ์คํฑ์์น(Elasticsearch)๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฒ์ ์์ง์ด๋ค. ์ ํต์ ์ธ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฃ๋๋ก ๋ณด๋ฉด ์๋์ ๊ฐ์ ์ฅ์ ๊ณผ ๋จ์ ์ด ๋ํ๋๋ค. ๊ฒ์ ์์ง์ ํน์ฑ์ ์ ํํ๊ฒ ์ดํดํ๊ณ ์ฌ์ฉํ๋ค๋ฉด ์ฅ์ ๊ณผ ๋จ์ ์ด ์ค ์ฌ์ฉ์ ํฐ ์ํฅ์ ๋ฏธ์น์ง ์์ ์ ์๋ค.
์คํ์์ค ์๋ฒ์ธก ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ์ผ๋ก, ๋ค์ํ ์์ค์์ ๋์์ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ ๋ณํํ์ฌ stash ๋ณด๊ด์๋ก ๋ณด๋ธ๋ค.
์์งํ ๋ก๊ทธ๋ฅผ ์ ์ ํด์, ์ง์ ๋ ๋์ ์๋ฒ(ElasticSearch)์ ์ธ๋ฑ์ฑํ์ฌ ์ ์กํ๋ ์ญํ ์ ๋ด๋นํ๋ ์ํํธ์จ์ด
๋ฐ์ดํฐ๋ฅผ ์๊ฐ์ ์ผ๋ก ํ์ํ๊ณ ์ค์๊ฐ์ผ๋ก ๋ถ์ ํ ์ ์๋ค.
์๊ฐํ๋ฅผ ๋ด๋นํ๋ HTML + Javascript ์์ง์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
ํค๋ฐ๋(Kibana)์ ๊ฒฝ์ฐ ๋์ฒด ๊ฐ๋ฅํ ์ํํธ์จ์ด๋ก ๊ทธ๋ผํ๋(Grafana)๊ฐ ์๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ์๊ฐ ์ฃผ๋ก ์ฌ์ฉํ ๋ฒํ ๊ธฐ๋ฅ์ ์ผ๋ถ ์ ์ธํ๊ณ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI) ์ธก๋ฉด์ ๊ฐํํ ํน์ง์ด ์๋ค.
ELK ์๋ฃจ์ ์์ Beats ์ถ๊ฐ๋๋ฉด์ ELK Stack์ด๋ผ๊ณ ๋ถ๋ฆฐ๋ค.
Beats : ์๋ฒ์ ์์ด์ ํธ๋ก ์ค์นํ์ฌ ๋ค์ํ ์ ํ์ ๋ฐ์ดํฐ๋ฅผ ElasticSearch ๋๋ Logstash์ ์ ์กํ๋ ์คํ ์์ค ๋ฐ์ดํฐ ๋ฐ์ก์๋ค.
๊ฐ๋ ฅํ ์ ์ฐ์ฑ๊ณผ ํธํ์ฑ ์๋ผ์คํฑ์์น, ๋ก๊ทธ์คํ์, ํค๋ฐ๋๋ ๊ฐ๊ฐ ๋ฐ์ดํฐ์ ์ฟผ๋ฆฌ(๊ฒ์), ์์ง, ์๊ฐํ๋ฅผ ๋ด๋นํ๋ค. ์ฉ๋๋ณ๋ก ๋ถ๋ฆฌํ์ฌ ๋ฐ์ ํ๋ ์๋ฃจ์ ์ด๊ธฐ์ ๊ตฌ์กฐ์ ์์ ์ฑ์ ๋ฌผ๋ก ๋ค๋ฅธ ์์คํ ๊ณผ๋ ์ ์ฐํ ํธํ์ฑ์ ๊ฐ์ง๋ค.
์์ ์คํค๋ง JSON ๋ฐฉ์์ Key-Value ํ์์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ํ์์ ์์ ๋กญ๋ค. ์ธ๋ฑ์ค ์์ผ๋์นด๋ ์ง์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์น๋ฉด ํ ์ด๋ธ(Table)์ ํด๋นํ๋ ๊ฐ๋ ์ธ ์ธ๋ฑ์ค(Index)์ Union ๋๋ Join์ด ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์์ผ๋ ์นด๋(*) ํ๊ธฐ ํ๋๋ก ๋๋ ์๋ ์๋ค.
ํ์ฅ(Scale-out) ๊ฐ๋ฅ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฒ์๋ถํฐ ํ์ฅ์ ๊ณ ๋ คํ์ฌ ๋ง๋ค์ด์ก๊ธฐ ๋๋ฌธ์, ์ฌ๋ฌ๋์ ์๋ฒ๋ฅผ ์ฎ์ด์ ์ฑ๋ฅ ํฅ์์ ๊ธฐ๋ํ ์ ์๋ ํด๋ฌ์คํฐ ๋ฐฉ์์ ๊ตฌ์ฑํ ๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ณด๋ค ์๋์ ์ผ๋ก ๊ด๋ จ ์ ๋ณด์ ์ฝ๊ฒ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ ์ฐจ๋ฅผ '๋ ๊ฑฐ์ ์ฝ๋ฉ'๋ณด๋จ ๊ฐ๋ณ ์ค์ ์ผ๋ก ๊ฐ๋ฅ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ ์ฐจ๋ฅผ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ด์ฉํ ์ฝ๋ฉ์ผ๋ก ๋ช ์ํ๋ค๋ฉด, ํฅํ ์ ์ง๋ณด์๊ฐ ์ฉ์ดํ์ง ์๊ณ ๋ถํ์ํ ์ข ์์ฑ์ด ๋์์ง๋ ๋ฌธ์ ๊ฐ ์์ง๋ง ๋ก๊ทธ์คํ์(Logstash)๋ฅผ ํฌํจํ๋ ELK ์คํ ๊ตฌ์ฑ ์ ์ ์ฐ์ฑ ํ๋ณด๊ฐ ๊ฐ๋ฅํ๋ค.
์ฌ์ ์ ์ค๋น๋ ์๊ฐํ ๋๊ตฌ์ ๋ถ๊ฐ๊ธฐ๋ฅ ๋ฐ์ดํฐ๋ฅผ ์๊ฐํํ์ฌ ๋ณด์ฌ์ฃผ๊ธฐ ์ํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)๋ฅผ ๋ด๋ณด๋ผ ํ๋ก๊ทธ๋จ์ ๋ฐ๋ก ์์ฑํ์ง ์์๋, ์ด๋ฏธ ์ฌ์ ์ ์ค๋น๋ ์๊ฐํ ๋๊ตฌ๋ฅผ ๊ฐ์ง ํค๋ฐ๋(Kibana)๊ฐ ๋ง์ฐ์ค ๋ช๋ฒ ์กฐ์ํ๋ฉด ๊ฑฐ์ง ๋ค ์์์ ํด์ค๋ค. ๊ทธ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ์๋ฅผ ์ํ ๋ถ๊ฐ๊ธฐ๋ฅ์ด ํฌํจ๋์ด ์๋ค.
์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฉ์์ง ํ(Message Queue, MQ)์ ๊ฒฐํฉํ๋ฉด ๊ฐ๋ ฅํ ์ค์๊ฐ(Realtime) ๋ฐ์ดํฐ ์์ง ๋ฐ ์ฒ๋ฆฌ ์์คํ ์ด ๋๋ค.
์๋ผ์คํฑ์์น์ ๋ฒ์ ๋ณ ๋ฒํฌ(Bulk) ๋ฐฉ๋ฒ ์ฐจ์ด๋ฅผ ์ํ ์๋ผ์คํฑ์์น์ ๋ฒํฌ(Bulk)๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฝ์ (Insert)์ ํด๋นํ๋ค. ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ์ง์ ๊ตฌํํ ๊ฒฝ์ฐ ์๋ผ์คํฑ์์น ๋ฒ์ ๋ณ ๋ฒํฌ ๋ฐฉ๋ฒ์ ์ฐจ์ด๊ฐ ํฌ๊ธฐ ๋๋ฌธ์, ์ธํฐ๋ท์ ๋ ๋์๋ค๋๋ ํํ ๋ฆฌ์ผ๋ง ๋ณด๊ณ ์งํํ๊ธฐ์๋ ์ค๋๋ ์๋ฃ๋ ๋ง์ ๋ฌด๋ฆฌ๊ฐ ๋ฐ๋ฅผ ์ ์๋ค. ๋ก๊ทธ์คํ์(Logstash)๋ก ์๋ผ์คํฑ์์น๋ฅผ ๋ค๋ฃฌ๋ค๋ฉด ์ด๋ฐ ๊ฑฑ์ ์ ํ์ง ์์๋ ๋๋ค.
์ด๊ธฐ ๋ฐ์ดํฐ ๊ตฌ์ฑ ๋ฐ ์ด๊ด ๋ฌธ์ ๋น ๋ฅธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ฅ์ ์ผ๋ก ํ๋ฐฉํ๊ณ ์์ผ๋, ์ด๊ธฐ ๋ฐ์ดํฐ ๊ตฌ์ฑ์ด ๊ธฐ์กด์ ๋ณด์ ํ ๋ฐ์ดํฐ๋ฅผ ์๋ผ์คํฑ์์น๋ก ์ด๊ดํ๋ ๊ฒ์์ ์์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์๋ ๊ณต์์ ์ผ๋ก ๊ณต๊ฐ๋ ํํ ๋ฆฌ์ผ์ ์ฌ๊ฐํ ์ฑ๋ฅ ์ ํ๋ฅผ ์ผ์ผํฌ ์ ์๋ ๋ด์ฉ์ด ์ฃผ๋ฅผ ์ด๋ฃจ๊ณ ์๋ค. ๋ฌธ์ ๋ ๋๋ถ๋ถ ์ค์๊ฐ(Realtime) ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ ์ ํฉํ ๋ฐฉ์์ ๋์ฉ๋ ๋ฐ์ดํฐ ์ด๊ด์๋ ์ ์ฉํ๋ค๊ณ ์๊ฐํ๋ ์ ์์ ๋น๋กฏ๋๋ค. ๊ฐ๋ น, ๋ฉ์์ง ํ(Message Queue, MQ)๋ฅผ ์ด์ฉํ๋ฉด ์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ ๋ถ๋ช ์์ ์ฑ๊ณผ ์๋๋ฉด์์ ๊ฐ์ ์ด ์์ผ๋, 100 ๊ธฐ๊ฐ๋ฐ์ดํธ(GB) ์ด์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(ex. MySQL, ์ค๋ผํด ๋ฐ์ดํฐ๋ฒ ์ด์ค)์ ๋ฐ์ดํฐ ์ด๊ด ์ ์ฐจ์ ๊ทธ๋๋ก ์ ์ฉํ๋ฉด ์๋นํ ์ฑ๋ฅ ์ ํ์ ์ฐ๋ ค๊ฐ ์๋ค. JDBC๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ๋ ๊ณต์ ํํ ๋ฆฌ์ผ์ด๋ ์ง๋์น ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฌธ์ ๋ก ์ธํด ๋ฐ์ดํฐ๊ฐ ๋ช ๊ธฐ๊ฐ ์ ๋๋ง ๋์ด๋ ์ฌ์ค์ ๋ฐ์ดํฐ ์ด๊ด ์ฉ๋๋ก๋ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค. ํ์ง๋ง ํด๊ฒฐ์ฑ ์ ์๋ค. ๋ฐ์ดํฐ ์ด๊ด์ด ๋ชฉ์ ์ธ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ ๋ด์ฉ ์ ์ฒด๋ฅผ ํ์ผ๋ก ์ ์ฅํ ๋ค์ ํ์ผ๋นํธ(Filebeat)[1]๋ฅผ ์ฐ๋๊ฒ ํจ์ฌ ๋น ๋ฅผ ์ ์๋ค.[2] ๊ธฐ์กด ๋ฐ์ดํฐ์ ์ฉ๋์ด ๋๋ฌด ์ปค์ ์ด์ฉ ์ ์์ด ๋คํธ์ํฌ๋ฅผ ์ด์ฉํ๋ค ํ์ฌ๋ ๋ก๊ทธ์คํ์(Logstash)์ ์ ์ ์์ ์๋ ์ ํ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ต์ํํ ์ ์๋๋ก, ๋ชฉํํ ํ์ผ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ํ์ ํ๋ ์ด์ ์ฉ ์ผ์ ํ ์๋ก ์ฝ์ผ๋ฉด์ TCP ๋๋ UDP ๋ฑ ์์ผ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ํ๋ก๊ทธ๋จ์ ์ง์ ๊ตฌํํ๋ฉด ํด๊ฒฐ์ด ๊ฐ๋ฅํ๋ค.
์ปค๋ ๋ณ์์ ๋ถํ์ํ ์ฌ์ฉ ELK ์คํ์ ๊ตฌ์ฑํ๋ ์๋ฃจ์ ์ค ๋ก๊ทธ์คํ์(Logstash)๋ ๋ฆฌ๋ ์ค ์ด์์ฒด์ ์ปค๋์ cgroups์ ํด๋นํ๋ ๋ณ์๋ฅผ ์ฐธ์กฐํ๋ ๋ด์ฉ์ด ํฌํจ๋์ด ์๋๋ฐ, ์ด๊ฒ์ ์ด์์ฒด์ ์์ ์ ํ ์๊ณ๊ฐ์ ํ์ ํ๊ธฐ ์ํจ์ด๋ค. ํ์ง๋ง, ์ปค๋ ์ปดํ์ผ ์ค์ ์ ๋ฐ๋ผ cgroups ๋ด์ ๋ณ์๋ ์ผ๋ถ๋ ์กด์ฌํ์ง ์์ ์ ์์์๋, ๋ฐ์ดํฐ ์์ง์ด๋ผ๋ ๋ชฉ์ ์ ๊ตฌ์ง ํ์์ ์ด์ง ์์ ๋ณ์๊ฐ ์กด์ฌํ์ง ์๋ ์ด์ ๋ก ํ๋ก๊ทธ๋จ์ด ์ค๋จ๋๋ ๋ฌธ์ ์ ์ด ์๋ค. ์ฃผ๋ก ์ด์์ฒด์ ์ ์ปค๋ ํฌ๊ธฐ๋ฅผ ์ต์ํํ๋ ค๋ ์๋๊ฐ ๋ฐ์๋์๊ฑฐ๋, ์ปค๋ ๊ณต์ ๋ฐฉ์์ ๊ฐ์ํ(์ปค๋ ๊ณต์ ๋ฐฉ์์ ์ ๊ฐํ ๋ฐ์ดํฐ ์ผํฐ์์ ์ข ์ข ์ฐ์)์ ์งํํ๋ ํ๊ฒฝ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉฐ ์ ์ ์ค์น ๋ฆฌ๋ ์ค ์ด์์ฒด์ ์ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
์ด์ฐฝ๊ธฐ๋ถํฐ ํ์ฌ๊น์ง๋ ์ํํ์ง ๋ชปํ ์๊ฐ๋(Timezone) ์ฒ๋ฆฌ 3๊ฐ์ ์คํ(๋ก๊ทธ์คํ์->์๋ผ์คํฑ์์น->ํค๋ฐ๋)๋ก ๋ฐ์ดํฐ๊ฐ ๋์ด๊ฐ๋ ๊ณผ์ ์์ ์๊ฐ๋(Timezone) ์ผ๊ด์ฑ์ด ๊นจ์ง๋ ๋ฌธ์ ๊ฐ ์๋ค. 'Asia/Seoul'๊ฐ์ ๋ช ์๋ฅผ ํ์ฌ๋, ๋ง์น 2์ค ํ์ ์ ์ฐ์์ผํ๋ ์๊ฐ๋ ๋ณํ ์ค๋ฅ๋ฅผ ์ฝ๊ฒ ๋ฒํ๋ค. ํ์ง๋ง 3๊ฐ ์๋ฃจ์ ๋ชจ๋ ๊ธฐ๋ณธ ์๊ฐ๋๊ฐ UTC๋ผ๋ ์ ์ ์ธ์งํ๊ณ , ์๊ฐ๋ ์ค์ ์ ๊ฐ๋ฅํ ๊ฒฝ์ฐ๋ฅผ ์ต๋ํ ์๋ํ์ฌ ์ผ๊ด์ฑ์ ์ ์งํ๋ ค๋ ๋ ธ๋ ฅ์ผ๋ก ๊ทน๋ณต์ด ๊ฐ๋ฅํ๋ค