
์นด์นด์ค์ ์ ์ฌ ๋ฆฌ์์ค ๋ชจ๋ํฐ๋ง ์์คํ - KEMI(Kakao Event Metering & monItoring)
์นด์นด์ค์ ์ ์ฌ ๋ฆฌ์์ค ๋ชจ๋ํฐ๋ง ์์คํ - KEMI(Kakao Event Metering & monItoring) ๊ด๋ จ
KEMI(Kakao Event Metering & monItoring)๋ ์นด์นด์ค์ ์ ์ฌ ๋ฆฌ์์ค ๋ชจ๋ํฐ๋ง ์์คํ ์ ๋๋ค.์๋ฒ, ์ปจํ ์ด๋์ ๊ฐ์ ๋ฆฌ์์ค์ ๋ฉํธ๋ฆญ ๋ฐ์ดํฐ๋ฅผ ์์งํด์ ๋ณด์ฌ์ฃผ๊ณ ์ค์ ํ ์๊ณ์น์ ๋ฐ๋ผ ์๋ฆผ์ ๋ณด๋ด์ฃผ๋ KEMI-STATS๊ณผ ETL์ ํตํด ์์งํ log๋ฅผ ๋์๋ณด๋ ํํ๋ก ๋ณด์ฌ์ฃผ๊ฑฐ๋ ์ค์๊ฐ ์๋ฆผ์ ํ ์ ์๋ KEMI-LOG๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
KEMI-STATS

KEMI-STATS๋ ์๋ง๋์ ์ด๋ฅด๋ ์นด์นด์ค์ ์ ์ฒด ์๋ฒ์ ์ปจํ ์ด๋ ์๋น์ค๋ฅผ ๋ชจ๋ํฐ๋งํ๋๋ฐ ์ด์ฉ๋๊ณ ์์ผ๋ฉฐ polling๋ฐฉ์๊ณผ push๋ฐฉ์ ๋๊ฐ์ง๋ฅผ ์ฌ์ฉํฉ๋๋ค.๋ฆฌ์์ค ์ค ์๋ฒ(physical machine, virtual machine, amazon ec2)์ ๊ฒฝ์ฐ polling๋ฐฉ์์ผ๋ก SNMP๋ฅผ ์ด์ฉํ์ฌ ์์คํ ๋ฉํธ๋ฆญ์ ์์งํฉ๋๋ค.๋ฐ์ดํฐ๋ฅผ ์์งํ๋๋ฐ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ์์ด ์์ ์ ์์ง๋ง SNMP๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ ํํ ์ด์ ๋ ์๋ฒ์ ์ด์์ฒด์ ์(linux/windows/nw switch) ์๊ด์์ด ๋ชจ๋ํฐ๋งํ๊ธฐ ์ํด์ ์ ๋๋ค.
polling ๋ฐฉ์์ ์์ง์ ์ ํจ์ค ๋ฐฐ์น job์ ์ด์ฉํด์ 1๋ถ๋ง๋ค ์๋์ ๊ฐ์ ์์๋ก ์คํ๋ฉ๋๋ค.
- job์ด ์์๋๋ฉด KEMI์ Job Producer๊ฐ IMS(Infrastructure Management System)๋ผ๋ ์นด์นด์ค ์ธํ๋ผ ๊ด๋ฆฌ ์์คํ ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋์์ ๋ฐ์์์ kafka์ polling job queue topic์ ๋ฃ์ด ๋์ต๋๋ค.(์ด๋ ๊ฒ ๋งค ์ฃผ๊ธฐ๋ง๋ค ํธ์คํธ ๋ชฉ๋ก์ ์๋ก ๊ฐ์ ธ์ค๋ ์ด์ ๋ ์๋ฒ๊ฐ ์ถ๊ฐ๋๊ฑฐ๋ ๋น ์ง๋๊ฑธ ๋ฐ๋ก ๋ฐ์ํ๊ธฐ ์ํด์ ์ ๋๋ค.)
- polling job queue topic์ ๋ณด๊ณ ์๋ KEMI์ Poller๊ฐ ๊ฐ ๋์๋ค์์ ์์คํ ๋ฉํธ๋ฆญ์ ๊ฐ์ ธ์์ ๋ค์ kafka์ ์ ์ฅํฉ๋๋ค.(์ด๋ ๊ทธ ํธ์คํธ๊ฐ ์ํ ์๋น์ค๊ฐ ์ด๋ค ๋ฉํธ๋ฆญ๋ค์ ์์งํ ์ง๋ฅผ etcd์ ์ ์ฅํด ๋๊ณ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋์ ์ถ๊ฐ๋ก ํ์ํ ๋ฉํธ๋ฆญ์ด ์์๋ Poller๋ฅผ ์ฌ์์ํ์ง ์๊ณ ๋ etcd์ ์๋ ์ ๋ณด๋ง ์ ๋ฐ์ดํธํ๋ฉด ์์งํ ์ ์์ต๋๋ค.)
- ์ด ๋ฐ์ดํฐ๋ค์ ๊ฐ์ ๊ทธ๋๋ก ์ด์ฉํ ์ ์๋ ๊ฒ(CPU usage ๋ฑ)๊ณผ ๊ณ์ฐ์ด ํ์ํ ๊ฒ(DISK usage ๋ฑ)์ 2์ข ๋ฅ๊ฐ ์๊ฒ ๋๋ฉฐ samza๋ฅผ ์ด์ฉํ KEMI์ Metric Calculator๊ฐ ๊ณ์ฐ์ด ํ์ํ ๊ฒ์ ๊ณ์ฐ์ ํด์ ๊ทธ์ธ ๋ ๊ทธ๋๋ก ๋ค์ kafka์ ๋ฃ๊ฒ ๋ฉ๋๋ค.
push ๋ฐฉ์์ ์์ง์ ์ปจํ ์ด๋ ๋ฆฌ์์ค ๋ชจ๋ํฐ๋ง๊ณผ SNMP๊ฐ ์ง์๋์ง ์๋ ์๋ฒ์์ ์ฌ์ฉ๋๊ณ ์์ผ๋ฉฐ ์๋์ ๊ฐ์ ์์๋ก ์คํ๋ฉ๋๋ค.
- ์๊ฐ, ๋ฆฌ์์ค ์์ด๋, ์์คํ ๋ฉํธ๋ฆญ์ KEMI์ Stats Agg๋ก push
- KEMI์ Stats Agg์์๋ ์ด ๋ฉํธ๋ฆญ๋ค์ kafka์ ์ ์ฅํฉ๋๋ค.
- ์ผ๋ถ ๊ณ์ฐ์ด ํ์ํ ๋ฉํธ๋ฆญ์ polling๋ฐฉ์๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก KEMI์ Metric Calculator์ ์ํด ๊ณ์ฐ๋์ด ์ ์ฅ๋๊ณ ๊ทธ์ธ ๋ฉํธ๋ฆญ์ ๊ทธ๋๋ก kafka์ ์ ์ฅ๋ฉ๋๋ค.
polling ๋๋ push๋ฐฉ์์ผ๋ก ์์ง๋ ๋ฐ์ดํฐ๋ ์๋์ ๊ฐ์ ์์๋ก View๋ฅผ ์ํด Time Series DB์ ์ ์ฅ๋๊ณ ๋ฃฐ์ ๋ฐ๋ผ ์๋์ด ์ํ๋ฉ๋๋ค.
- ์ค๋น๋ ์ต์ข ๋ฐ์ดํฐ๋ KEMI์ Metric Forwarder๋ฅผ ํตํด์ OpenTSDB์ ์ ์ฅ๋ฉ๋๋ค.(OpenTSDB์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ๋ Grafana๋ฅผ ์ด์ฉํ์ฌ ์ฌ์ฉ์๋ค์ด ๊ทธ๋ํ ํํ๋ก ๋ณผ์ ์๊ฒ ๋ฉ๋๋ค.)
- KEMI Event Alert๋ฅผ ํตํด์ etcd์ ์ ํด์ง ๋ฃฐ์ ๋ฐ๋ผ ์๋ ์ด๋ฒคํธ๋ฅผ ์์ฑํ์ฌ ๋ค์ kafka์ ๋ฃ์ต๋๋ค.(CPU ์ฌ์ฉ๋์ด 90% ์ด์๋ผ๋๊ฐ ๋คํธ์ํฌ ํธ๋ํฝ์ด ๋จ์ด์ก๋ค๋๊ฐ ํ ๋ ๊ฐ๋ณ ํธ์คํธ ๋จ์/์ฌ๋ฌ ํธ์คํธ๋ฅผ ๋ฌถ์ ์๋น์ค ๋จ์๋ก ์๋ ์ด๋ฒคํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.)
- KEMI Event Handler๋ kafka์ ์์ฑ๋ ์๋ ์ด๋ฒคํธ๋ฅผ ๊ฐ์ง๊ณ kakaotalk, custom api ํธ์ถ ๋ฑ์ ์๋ ์๋น์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ด๊ฒ KEMI-STATS์ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์ฑ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์์ ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ ์๋ ์ธ์ ์์ง๋ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ ๋ฆฌ์์ค ํจ์จํ ์๋น์ค๋ ์ ๊ณตํ๊ณ ์๊ณ ๊ทธ ์์๋ ์๋์ ๊ฐ์ต๋๋ค.
- Cuota Collect๋ฅผ ์ด์ฉํด์ ์ฃผ๊ธฐ์ ์ผ๋ก ํน์ ์๊ฐ ๊ฐ๊ฒฉ์ ๋ฐ์ดํฐ๋ฅผ ์ํ๋งํ์ฌ(์๊ฐ๋น max/min ๊ฐ) MySQL์ ์ ์ฅํฉ๋๋ค.
- MySQL์ ์ํ๋ง ๋ฐ์ดํฐ๋ฅผ Cuota Report๊ฐ ํ์ธํด์ ์ค์ ์๋ฒ์ ์ฌ์ฉ๋์ ํ์ธํ๊ณ ์ด ์ค ์ฌ์ฉ๋์ด ์์ VM(Virtual Machine)์ ์ฃผ๊ธฐ์ ์ผ๋ก ํ์ ํด์ ๋ด๋น์์๊ฒ ์๋ฆผ์ ์ฃผ์ด์, ํด๋น VM์ ์ญ์ ํ๊ฑฐ๋ ๋ค๋ฅธ VM๋ค๊ณผ ํตํฉํ๊ฒ ํจ์ผ๋ก์จ ์์คํ ์ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋๋ฐ ์ด์ฉํ๊ณ ์์ต๋๋ค.
์ด ์ธ์๋ SNMP์ oid๋ฅผ ํ์ฅํ์ฌ SNMP์์ ์ ๊ณตํด์ฃผ๋ ๊ธฐ๋ณธ ๋ฉํธ๋ฆญ ์ธ์ ๋ค์ํ ์ปค์คํ ๋ฉํธ๋ฆญ์ ์์งํ ์ ์๊ณ , push๋ฐฉ์์ผ๋ก ๋ฉํธ๋ฆญ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ ๋ ์ฌ์ฉ์๊ฐ ๋ง๋ ๋ฉํธ๋ฆญ์ ๋ฃ์ ์ ์์ต๋๋ค.ํ์ฌ KEMI-STATS์ ์ด๋ฌํ ํ์ฅ์ฑ์ ์ด์ฉํด์ ์์คํ ์ ๋ณด๋์ ์จ๋, haproxy, nginx, memcached, redis ๋ฑ์ stats ์ ๋ณด, ์ปจํ ์ด๋ ๋ฑ์ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํ๊ธฐ ์ํด ํ์ํ ์ปค์คํ ๋ฉํธ๋ฆญ์ด ์์ง๋๊ณ ์์ต๋๋ค.
KEMI-LOG

KEMI-LOG๋ ๊ฐ ์๋น์ค์์ ๋ฐ์ํ ๋ก๊ทธ๋ฅผ ๋ชจ์์ ์ ์ฅํ๊ณ ๋ณด์ฌ์ฃผ๋ ๊ธฐ๋ฅ๊ณผ ๋ก๊ทธ ๋ณ๋ก ์ค์ ๋ ๋ฃฐ์ ๋ฐ๋ผ ์๋์ ๋ฐ์์์ผ ์ค๋๋ค.์ธํ๋ผ์ด์์ ํ์ํ ๊ธฐ๋ณธ์ ์ธ syslog๋ ๋คํธ์ํฌ ๊ด๋ จ ๋ก๊ทธ๋ค์ ๋ฐ๊ณ ์์ผ๋ฉฐ, ํ์์ ๋ฐ๋ผ ๊ฐ ์๋น์ค๋ค์์ KEMI-LOG์ชฝ์ผ๋ก ๋ก๊ทธ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด์ ์ด์ฉํ๊ณ ์์ผ๋ฉฐ ๊ทธ ๊ท๋ชจ๋ ํ๋ฃจ ์๋ฐฑ๊ธฐ๊ฐ ์ ๋์ ๋๋ค.KEMI-LOG์ ๋ฐ์ดํฐ ํ๋ฆ์ ์๋์ ๊ฐ์ต๋๋ค.
- ์๋น์ค ๋ณ ๋ก๊ทธ์ ๊ฒฝ์ฐ ๊ฐ ์๋ฒ์ ์ค์น๋ fluentd๋ฅผ ์ด์ฉํ๊ณ syslog๋ ๋คํธ์ํฌ ๊ด๋ จ ๋ก๊ทธ๋ syslog์ target ์ค์ ์ ํตํด consul domain ์ผ๋ก ์ฎ์ฌ์ง KEMI Aggregator๋ก ์ ๋ฌ๋ฉ๋๋ค.
- ์ด๋ ๊ฒ ๋ณด๋ด์ง ๋ฐ์ดํฐ๋ KEMI-LOG์ aggregator ์ญํ ์ ํด์ฃผ๋ fluentd ์๋ฒ๊ทธ๋ฃน๋ค์ด ๋ฐ์ ๋ค์์ ๊ทธ ๋ก๊ทธ๋ค์ ๊ฐ๊ฐ hadoop, kafka์ ๋ฃ์ด์ค๋๋ค.
- hadoop์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ hive batch job์ ํตํด ์ฃผ๊ธฐ์ ์ผ๋ก (5~15๋ถ) elasticsearch cluster๋ก indexing๋๋ฉฐ kibana๋ฅผ ํตํด ์ฌ์ฉ์๊ฐ ์กฐํํ ์ ์๊ฒ ๋ฉ๋๋ค.
- kafka์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ etcd์ ์๋ ๋ฃฐ๊ณผ STORM, redis๋ฅผ ํ์ฉํด ๊ฐ๋ฐ๋ KEMI Dike๋ฅผ ํตํด ์ค์๊ฐ์ผ๋ก ์๋ฆผ์ ๋ฐ์์ํต๋๋ค.
์ ๋ฐ์ดํฐ ํ๋ฆ์์ ์ ํํ๊ฑฐ๋ ๊ฐ๋ฐ๋ ๋ช๊ฐ์ง ๊ธฐ์ ๋ค๊ณผ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ์ ์ฅ์ ์ ๊ฐ์ง๋๋ค.
- fluentd๋ ๋ค์ํ ํ๋ฌ๊ทธ์ธ๋ค์ด ์กด์ฌํด์ ๊ฐ๋จํ ์ค์ ๋ง์ผ๋ก๋ ์์ฝ๊ฒ ์ํ๋ ํํ๋ก ๋ก๊ทธ ๋ฐ์ดํฐ๋ฅผ ๋ณํํด์ ์ฃผ๊ณ ๋ฐ์ ์ ์์ต๋๋ค.
- ์ ์ฒด aggregator ํธ์คํธ๋ฅผ service discovery ๋๊ตฌ์ธ consul๋ก ๊ด๋ฆฌ๋๋ ๋๋ฉ์ธ์ ๋ฐ๋ผ๋ณด๊ฒ ๋์ด ์์ด์, ๊ฐ ์๋ฒ์ ์๋ fluentd์ ์ค์ ์ ๋ณ๊ฒฝํ์ง ์์์ฑ๋ก KEMI Aggregator์ ์๋ฒ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ๋นผ๋ ์์ ์ ํ ์ ์์ด์ ์์ฌ์ด scale in/out์ด ๊ฐ๋ฅํฉ๋๋ค.
- hadoop์ ์์ ์ ์ธ ๋ฐ์ดํฐ ์ ์ฅ ์ ๊ณต์ผ๋ก elasticsearch๊ฐ ๋ฌธ์ ๊ฐ ์๊ฒผ๋๋ผ๋ ์ฌ์ฒ๋ฆฌ์ bulk insert๋ก ์ธํด ๋ณด๋ค ๋ง์ ์์ ๋ก๊ทธ๋ฅผ indexing ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- ๋ก๊ทธ ์๋ฆผ์ ์ฌ์ฉํ๋ rule์ ํ์ค SQL ํ์์ผ๋ก ์ฌ์ฉ์๊ฐ ์ง์ ํ ์ ์๊ณ , rule์ etcd์ ์ ์ฅํด๋๊ธฐ ๋๋ฌธ์ storm topology์ ์ฌ์์์์ด ๋ณ๊ฒฝ์ฌํญ์ด ๋์ ์ผ๋ก ์ ์ฉ๋ฉ๋๋ค.
- ๋ฐ์ํ ์๋ฆผ์ ์ปค์คํ ๋ฉํธ๋ฆญ์ ํํ๋ก KEMI-STATS์ชฝ์ ์ ์ฅํด์ ๋์๋ณด๋๋ฅผ ๊ตฌ์ฑํด์ ๋ณธ๋ค๊ฑฐ๋ KEMI-STATS๊ณผ KEMI-LOG์ ํตํฉ ์๋ฆผ์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
KEMI ๊ฐ๋ฐ์ issac.lim, hardy.jung, jenny.ssong, joanne.hwang, andrew.kong ์ดํจ๊ปํ๊ณ ์์ผ๋ฉฐ ์นด์นด์ค ์ธํ๋ผ&๋ฐ์ดํ๋ซํผํ์ ๋ง์ ์ง์์ ๋ฐ์ ์ด์๋๊ณ ์์ต๋๋ค.๋์ผ๋กโฆ์ ๋ด์ฉ์ด ๋ชจ๋ํฐ๋ง ์๋น์ค๋ฅผ ๊ฐ๋ฐํ๊ณ ๊ณ์ ๋ถ๋ค๊ป ์กฐ๊ธ์ด๋ผ๋ ๋์์ด ๋๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.