์๋
ํ์ธ์, ์ ์ด๋ฆ์ ์ํฐ๋ชจ๋น B2B ํ์ฅ ์ ์ง์
๋๋ค. ์ฐ๋ฆฌ ํ์ ์
๋ฌด ์ค ํ๋๋ ํํธ๋๋ก๋ถํฐ ํ์๋ฅผ ์ฃผ๋ฌธํ๊ธฐ ์ํ ํตํฉ์ ์ง์ํ๋ ๊ฒ์ด๋ฉฐ ์์ ์ ์ธ ์๋น์ค๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด ์ฐ๋ฆฌ๋ ๋ง์ดํฌ๋ก ์๋น์ค์์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ํญ์ ์ดํดํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด์๋ ๋ก๊ทธ๋ฅผ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํด์ผ ํฉ๋๋ค.
Citymobil์์๋ ELK ์คํ(ElasticSearch, Logstash, Kibana)์ ์ฌ์ฉํ์ฌ ๋ก๊ทธ ์์ ์ ํ๊ณ ๊ฑฐ๊ธฐ์ ๋ค์ด์ค๋ ๋ฐ์ดํฐ์ ์์ด ์์ฒญ๋ฉ๋๋ค. ์ ์ฝ๋๋ฅผ ๋ฐฐํฌํ ํ์ ๋ํ๋ ์ ์๋ ์ด๋ฌํ ๋๋์ ์์ฒญ์์ ๋ฌธ์ ๋ฅผ ์ฐพ๋ ๊ฒ์ ๋งค์ฐ ์ด๋ ต์ต๋๋ค. ์๊ฐ์ ์๋ณ์ ์ํด Kibana์๋ ๋์๋ณด๋ ์น์ ์ด ์์ต๋๋ค.
Habrรฉ์๋ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ณ ์ ์ฅํ๊ธฐ ์ํด ELK ์คํ์ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ ๊ฐ ํฌํจ๋ ๊ธฐ์ฌ๊ฐ ๊ฝค ์์ง๋ง Dashboard ์์ฑ์ ๋ํ ๊ด๋ จ ์๋ฃ๋ ์์ต๋๋ค. ๋ฐ๋ผ์ Kibana์์ ๋ค์ด์ค๋ ๋ก๊ทธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ์ ์๊ฐ์ ํํ์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๊ณ ์ถ์ต๋๋ค.
์กฐ์
๋ช
ํํ๊ฒ ํ๊ธฐ ์ํด ELK์ Filebeat๋ก Docker ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์ ์ฉ๊ธฐ์ ๋ด์
๊ตฌ์ฑ ์ ์ฅ์ ๋ณต์ docker-compose
๋ฐ ELK ์ค์ , ๋ช
๋ น์ผ๋ก ์คํ docker-compose up
. ์๋์ ์ผ๋ก ํค๋ฅผ ์ถ๊ฐํ์ง ์์ -d
ELK ์คํ์ ์งํ ์ํฉ์ ํ์ธํฉ๋๋ค.
git clone https://github.com/et-soft/habr-elk
cd habr-elk
docker-compose up
๋ชจ๋ ๊ฒ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑ๋๋ฉด ๋ก๊ทธ์ ํญ๋ชฉ์ด ํ์๋ฉ๋๋ค(์๋ง๋ ์ฆ์๋ ์๋ ์ ์์ผ๋ฉฐ ์ ์ฒด ์คํ์ด ์๋ ์ปจํ ์ด๋๋ฅผ ์์ํ๋ ํ๋ก์ธ์ค๋ ๋ช ๋ถ ์ ๋ ๊ฑธ๋ฆด ์ ์์).
{"type":"log","@timestamp":"2020-09-20T05:55:14Z","tags":["info","http","server","Kibana"],"pid":6,"message":"http server running at http://0:5601"}
์ฃผ์ : localhost:5061
Kibana๊ฐ ์ด๋ฆด ๊ฒ์
๋๋ค.
์ฐ๋ฆฌ๊ฐ ๊ตฌ์ฑํด์ผ ํ ์ ์ผํ ๊ฒ์ ํ์ํ ๋ฐ์ดํฐ์ ๋ํ ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ Kibana์ ๋ํ ์ธ๋ฑ์ค ํจํด์ ์์ฑํ๋ ๊ฒ์
๋๋ค. ์ด๋ฅผ ์ํด curl ์์ฒญ์ ์คํํ๊ฑฐ๋ ๊ทธ๋ํฝ ์ธํฐํ์ด์ค์์ ์ผ๋ จ์ ์์
์ ์ํํฉ๋๋ค.
$ curl -XPOST -D- 'http://localhost:5601/api/saved_objects/index-pattern'
-H 'Content-Type: application/json'
-H 'kbn-xsrf: true'
-d '{"attributes":{"title":"logstash-*","timeFieldName":"@timestamp"}}'
GUI๋ฅผ ํตํด ์ธ๋ฑ์ค ํจํด ์์ฑ
๊ตฌ์ฑํ๋ ค๋ฉด ์ผ์ชฝ ๋ฉ๋ด์์ ๊ฒ์ ์น์
์ ์ ํํ๊ณ ์ธ๋ฑ์ค ํจํด ์์ฑ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
"์ธ๋ฑ์ค ํจํด ๋ง๋ค๊ธฐ" ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์ธ๋ฑ์ค ์์ฑ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค. "์ธ๋ฑ์ค ํจํด ์ด๋ฆ" ํ๋์ "logstash-*"๋ฅผ ์
๋ ฅํฉ๋๋ค. ๋ชจ๋ ๊ฒ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑ๋ ๊ฒฝ์ฐ Kibana ์๋์ ๊ท์น์ ํด๋นํ๋ ์ธ๋ฑ์ค๊ฐ ํ์๋ฉ๋๋ค.
๋ค์ ํ์ด์ง์์ ํ์์คํฌํ๊ฐ ์๋ ํค ํ๋๋ฅผ ์ ํํฉ๋๋ค. ์ด ๊ฒฝ์ฐ์๋ @timestamp
.
์ด๋ ๊ฒ ํ๋ฉด ์ธ๋ฑ์ค ์ค์ ํ์ด์ง๊ฐ ํ์๋์ง๋ง ์ง๊ธ์ ์ถ๊ฐ ์กฐ์น๊ฐ ํ์ํ์ง ์์ต๋๋ค.
์ด์ ๊ฒ์ ์น์ ์ผ๋ก ๋ค์ ์ด๋ํ์ฌ ๋ก๊ทธ ํญ๋ชฉ์ ๋ณผ ์ ์์ต๋๋ค.
๋์๋ณด๋
์ผ์ชฝ ๋ฉ๋ด์์ ๋์๋ณด๋ ์์ฑ ์น์ ์ ํด๋ฆญํ์ฌ ํด๋น ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
"์ ๋์๋ณด๋ ๋ง๋ค๊ธฐ"๋ฅผ ํด๋ฆญํ๊ณ ๋์๋ณด๋์ ๊ฐ์ฒด๋ฅผ ์ถ๊ฐํ๋ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
"์๋ก ๋ง๋ค๊ธฐ" ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์์คํ
์์ ๋ฐ์ดํฐ ํ์ ์ ํ์ ์ ํํ๋ผ๋ ๋ฉ์์ง๋ฅผ ํ์ํฉ๋๋ค. Kibana์๋ ๋ง์ ์๊ฐ ์์ง๋ง "์์ง ๋ง๋"์ ํ ํ์์ "๋ฐ์ดํฐ ํ
์ด๋ธ"์ ๊ทธ๋ํฝ ํํ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ๋ค๋ฅธ ์ ํ์ ํ๋ ์ ํ
์ด์
๋ ๋น์ทํ ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
์ฌ์ฉ ๊ฐ๋ฅํ ์ผ๋ถ ๊ฐ์ฒด์๋ B ๋ฐ E๋ผ๋ ๋ ์ด๋ธ์ด ์ง์ ๋์ด ์์ผ๋ฉฐ ์ด๋ ํ์์ด ์คํ์ ์ด๊ฑฐ๋ ๋ฒ ํ ํ
์คํธ ์ค์์ ์๋ฏธํฉ๋๋ค. ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ํ์์ด ๋ณ๊ฒฝ๋๊ฑฐ๋ Kibana์์ ์์ ํ ์ฌ๋ผ์ง ์ ์์ต๋๋ค.
์์ง ๋ฐ
"์์ง ๋ง๋" ์์ ๊ฒฝ์ฐ ์๋น์ค์ ์ฑ๊ณต ๋ฐ ์คํจ ์๋ต ์ํ ๋น์จ์ ๋ํ ํ์คํ ๊ทธ๋จ์ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค. ์ค์ ์ด ๋๋๋ฉด ๋ค์ ๊ทธ๋ํ๋ฅผ ์ป์ต๋๋ค.
์๋ต ์ํ๊ฐ < 400์ธ ๋ชจ๋ ์์ฒญ์ ์ฑ๊ณต์ผ๋ก, >= 400์ ๋ฌธ์ ์๋ ๊ฒ์ผ๋ก ๋ถ๋ฅํฉ๋๋ค.
"์์ง ๋ง๋" ์ฐจํธ๋ฅผ ๋ง๋ค๋ ค๋ฉด ๋ฐ์ดํฐ ์์ค๋ฅผ ์ ํํด์ผ ํฉ๋๋ค. ์์์ ์์ฑํ ์ธ๋ฑ์ค ํจํด์ ์ ํํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ์ดํฐ ์์ค๋ฅผ ์ ํํ๋ฉด ๋จ์ผ ์๋ฆฌ๋ ๊ทธ๋ํ๊ฐ ๋ํ๋ฉ๋๋ค. ์ค์ ํด ๋ด
์๋ค.
"๋ฒํท" ๋ธ๋ก์์ "์ถ๊ฐ" ๋ฒํผ์ ๋๋ฅด๊ณ "X-asis"๋ฅผ ์ ํํ๊ณ X์ถ์ ์ค์ ํฉ๋๋ค. ๋ก๊ทธ์ ํญ๋ชฉ์ ์์ ํ๊ธฐ ์ํ ํ์์คํฌํ๋ฅผ ๋ฐ๋ก ์ค์ ํด ๋ก๋๋ค. "์ง๊ณ" ํ๋์์ "๋ ์ง ํ์คํ ๊ทธ๋จ"์ ์ ํํ๊ณ "ํ๋"์์ ์๊ฐ ํ๋๋ฅผ ๋ํ๋ด๋ "@timestamp"๋ฅผ ์ ํํฉ๋๋ค. "์๋" ์ํ์์ "์ต์ ๊ฐ๊ฒฉ"์ ๊ทธ๋๋ก ๋๋ฉด ๋์คํ๋ ์ด์ ์๋์ผ๋ก ์กฐ์ ๋ฉ๋๋ค.
"์
๋ฐ์ดํธ" ๋ฒํผ์ ํด๋ฆญํ๋ฉด 30์ด๋ง๋ค ์์ฒญ ์๊ฐ ๊ทธ๋ํ๋ก ํ์๋ฉ๋๋ค.
์ด์ Y์ถ์ ๋ฐ๋ผ ์ด์ ์ค์ ํ๊ฒ ์ต๋๋ค. ์ด์ ์ ํํ ์๊ฐ ๊ฐ๊ฒฉ์ ์ด ์์ฒญ ์๋ฅผ ํ์ํฉ๋๋ค.
"Aggregation" ๊ฐ์ "Sum Bucket"์ผ๋ก ๋ณ๊ฒฝํ์ฌ ์ฑ๊ณตํ ์์ฒญ๊ณผ ์คํจํ ์์ฒญ์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ๊ฒฐํฉํ ์ ์์ต๋๋ค. ๋ฒํท -> ์ง๊ณ ๋ธ๋ก์์ "ํํฐ"๋ก ์ง๊ณ๋ฅผ ์ ํํ๊ณ "statusCode >= 400"์ผ๋ก ํํฐ๋ง์ ์ค์ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ "์ฌ์ฉ์ ์ง์ ๋ ์ด๋ธ" ํ๋์๋ ์ฐจํธ์ ๋ฒ๋ก์ ์ผ๋ฐ ๋ชฉ๋ก์์ ๋ณด๋ค ์ดํดํ๊ธฐ ์ฌ์ด ํ์๋ฅผ ์ํด ํ์๊ธฐ ์ด๋ฆ์ ํ์ํฉ๋๋ค.
์ค์ ๋ธ๋ก ์๋์ "์
๋ฐ์ดํธ" ๋ฒํผ์ ํด๋ฆญํ๋ฉด ๋ฌธ์ ์์ฒญ์ด ํฌํจ๋ ๊ทธ๋ํ๊ฐ ํ์๋ฉ๋๋ค.
๋ฒ๋ก ์์ ์์ ํด๋ฆญํ๋ฉด ์ด ์์์ ๋ณ๊ฒฝํ ์ ์๋ ์ฐฝ์ด ๋ํ๋ฉ๋๋ค.
์ด์ ์ฑ๊ณตํ ์์ฒญ์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ์ฐจํธ์ ์ถ๊ฐํด ๋ณด๊ฒ ์ต๋๋ค. "์ธก์ ํญ๋ชฉ" ์น์
์์ "์ถ๊ฐ" ๋ฒํผ์ ํด๋ฆญํ๊ณ "Y์ถ"์ ์ ํํฉ๋๋ค.
์์ฑ๋ ๋ฉํธ๋ฆญ์์ ์๋ชป๋ ์์ฒญ๊ณผ ๋์ผํ ์ค์ ์ ์ง์ ํฉ๋๋ค. ํํฐ์์๋ง "statusCode < 400"์ ์ง์ ํฉ๋๋ค.
์ ์ด์ ์์์ ๋ณ๊ฒฝํ์ฌ ๋ฌธ์ ๊ฐ ์๋ ์์ฒญ๊ณผ ์ฑ๊ณตํ ์์ฒญ์ ๋น์จ์ ํ์ํฉ๋๋ค.
ํ๋ฉด ์๋จ์ "์ ์ฅ" ๋ฒํผ์ ํด๋ฆญํ๊ณ ์ด๋ฆ์ ์ง์ ํ๋ฉด ๋์๋ณด๋์ ์ฒซ ๋ฒ์งธ ์ฐจํธ๊ฐ ํ์๋ฉ๋๋ค.
๋ฐ์ดํฐ ํ
์ด์ ํ ์ด๋ธ ํ์์ "๋ฐ์ดํฐ ํ ์ด๋ธ" ๋ณด๊ธฐ๋ฅผ ๊ณ ๋ คํ์ญ์์ค. ์์ฒญ๋ ๋ชจ๋ URL ๋ชฉ๋ก๊ณผ ํด๋น ์์ฒญ ์๊ฐ ํฌํจ๋ ํ ์ด๋ธ์ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค. ์์ง ๋ง๋ ์์ ์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋จผ์ ๋ฐ์ดํฐ ์์ค๋ฅผ ์ ํํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ ์ ํํ ์๊ฐ ๊ฐ๊ฒฉ์ ๋ํ ์ด ์์ฒญ ์๋ฅผ ๋ณด์ฌ์ฃผ๋ ํ๋์ ์ด์ด ์๋ ํ
์ด๋ธ์ด ํ๋ฉด์ ํ์๋ฉ๋๋ค.
"๋ฒํท" ๋ธ๋ก๋ง ๋ณ๊ฒฝํ๊ฒ ์ต๋๋ค. "์ถ๊ฐ" ๋ฒํผ์ ํด๋ฆญํ๊ณ "ํ ๋ถํ "์ ์ ํํฉ๋๋ค.
"์ง๊ณ" ํ๋์์ "์ฉ์ด"๋ฅผ ์ ํํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ํ๋ ํ๋ "Field"์์ "url.keyword"๋ฅผ ์ ํํฉ๋๋ค.
"๋ง์ถค ๋ผ๋ฒจ" ํ๋์ "Url" ๊ฐ์ ์ง์ ํ๊ณ "์
๋ฐ์ดํธ"๋ฅผ ํด๋ฆญํ๋ฉด ์ ํํ ๊ธฐ๊ฐ ๋์ ๊ฐ URL์ ๋ํ ์์ฒญ ์๊ฐ ํฌํจ๋ ์ํ๋ ํ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
ํ๋ฉด ์๋จ์์ "์ ์ฅ" ๋ฒํผ์ ๋ค์ ํด๋ฆญํ๊ณ ํ
์ด๋ธ ์ด๋ฆ(์: Urls)์ ์ง์ ํฉ๋๋ค. ๋์๋ณด๋๋ก ๋์๊ฐ์ ์์ฑ๋ ๋ ๋ณด๊ธฐ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋์๋ณด๋ ์์
๋์๋ณด๋๋ฅผ ๋ง๋ค ๋ ํ์ ๊ฐ์ฒด ์ค์ ์์ ๊ธฐ๋ณธ ๋ณด๊ธฐ ๋งค๊ฐ ๋ณ์๋ง ์ค์ ํฉ๋๋ค. "๋ ์ง ๋ฒ์", "useragent๋ณ ํํฐ๋ง", "์์ฒญ ๊ตญ๊ฐ๋ณ ํํฐ๋ง" ๋ฑ๊ณผ ๊ฐ์ด ๊ฐ์ฒด์ ํํฐ์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ์ง์ ํ๋ ๊ฒ์ ์๋ฏธ๊ฐ ์์ต๋๋ค. ๊ฐ์ฒด ์์ ์๋ ์ฟผ๋ฆฌ ํจ๋์์ ์ํ๋ ๊ธฐ๊ฐ์ ์ง์ ํ๊ฑฐ๋ ํ์ํ ํํฐ๋ง์ ์ค์ ํ๋ ๊ฒ์ด ํจ์ฌ ๋ ํธ๋ฆฌํฉ๋๋ค.
์ด ํจ๋์ ์ถ๊ฐ๋ ํํฐ๋ ๋์๋ณด๋ ์ ์ฒด์ ์ ์ฉ๋๋ฉฐ ๋ชจ๋ ํ์ ๊ฐ์ฒด๋ ์ค์ ํํฐ๋ง๋ ๋ฐ์ดํฐ์ ๋ฐ๋ผ ๋ค์ ์์ฑ๋ฉ๋๋ค.
๊ฒฐ๋ก
Kibana๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํธ๋ฆฌํ ๋ฐฉ์์ผ๋ก ์๊ฐํํ ์ ์๋ ๊ฐ๋ ฅํ ๋๊ตฌ์
๋๋ค. ๋ ๊ฐ์ง ์ฃผ์ ๋์คํ๋ ์ด ์ ํ์ ์ค์ ์ ํ์ํ๋ ค๊ณ ํ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ค๋ฅธ ์ ํ๋ ๋น์ทํ ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ด๊ฐ "๋ค์" ๋จ๊ฒจ๋ ํ๋ถํ ์ค์ ์ ํตํด ํ์์ ๋ง๊ฒ ์ฐจํธ๋ฅผ ๋งค์ฐ ์ ์ฐํ๊ฒ ์ฌ์ฉ์ ์ ์ํ ์ ์์ต๋๋ค.
์ถ์ฒ : habr.com