데이터 시각화를 위해 자료를 찾다보면 꼭 등장하는 것이 두 프레임워크 Kibana(이하 키바나)와 Grafana(이하 그라파나)다. 다른 분야의 개발자들과 얘기하다보면 가끔 등장하는 놈들이라 낯설지 않았는데, 드디어 내 앞에 나타났다. 쓸일 없을 때는 몇 번 읽어봐도 잘 몰랐는데 써야할 일이 생기니까 알게되더라. 어떤놈을 쓰는 것이 내 시각화 작업(주식가격 정보 분석)에 도움이 될지 고려하며 연구해봤다. 역시 백문이 불여일코.
Kibana Grafana 쓰면 이런걸 할 수 있다더라. 와우
출처: 파인리포트
출처: https://engineering.linecorp.com/ko/blog/excel-to-elastic/
# Kibana
키바나는 elasticsearch(이하 엘라스틱서치)에 붙어있는 시각화 프로그램이다. 독립적인 프로그램이 아니고 엘라스틱서치로부터 데이터를 받아 그래프로 표현하는 기능을 한다. ELK-stack으로 묶어서 언급되고, 키바나가 메인이 아니고 엘라스틱서치가 메인이다.
그림으로 설명하는게 최고다.
- logstash(이하 로그스태시)가 MySQL, PostgreSQL 같은 데이터베이스에서 데이터를 긁어온다.
- 로그스태시가 긁어온 데이터를 바로 엘라스틱서치에 전달한다.
- 키바나는 시각화를 할 때마다 엘라스틱서치에 데이터를 받아 사용하게 된다.
엘라스틱서치
엘라스틱서치는 term 단위 검색에 특화된 일종의 데이터베이스라 생각해도 무리가 없다. 관계형 데이터베이스(RDBMS)나 객체형 데이터베이스(NoSQL, …)를 놔두고 왜 쓸까?
- full-text 검색. 단어(term) 단위로 빠르게 검색할 수 있다.
SQL, NOSQL도 단어 검색을 할 수 있다. ... WHERE text LIKE 'word' and ...
이런식으로. 하지만 엘라스틱서치는 설계부터 비정형 데이터(자연어)를 다루기 위해 데이터를 term 단위로 나누어 적재한다. SQL 쿼리 보다 훨씬 빠르다. 그래서 데이터베이스라로 부르지 않고 검색엔진이라 표방을 표방하고 있다.
# Grafana
그라파나는 데이터 소스에서 데이터를 받아와 시각화하는 프로그램이다. 시스템 메트릭을 모니터링하는데 쓰는 프로그램으로 자주 언급된다. 얘도 키바나처럼 혼자 동작하는 것이 아니라, data source(이하 데이터 소스)라 불리는 데이터베이스나 어떤 프로그램으로부터 데이터를 불러와 그래프로 표현한다. 어떤 데이터 소스를 사용할지 선택지 몇가지 있는데, 대중적으로 쓰이는 데이터 소스로 mysql, postresql, mssql 정도 다. 보통 prometheus(프로메테우스)를 사용하는데 이유는 다음 절에서 설명한다.
- exporter(이하 익스포터)라 불리는 데이터 수집 프로그램이 동작하며 데이터를 모은다.
- 프로메테우스가 익스포터에 데이터를 요청해(http request) 데이터를 긁어온다.
- 그라파나가 프로메테우스에게 데이터를 요청하고 받아 시각화한다.
## 프로메테우스
익스포터의 데이터를 얻어오는 익스포터 전용 데이터 크롤러라 생각하면 된다. 익스포터는 자신이 수집한 데이터를 http host를 통해 제공해주는 응용 프로그램이다. 로그스태시와 달리 직접 데이터를 전달하지 않는다. 요청이 있을때만 제공한다.
# 키바나 vs 그라파나 vs 둘 다 안 쓰기
그라파나는 데이터를 익스포터라는 응용 프로그램으로부터 얻는다. 익스포터는 대부분 시스템 자원 사용 현황과 같은 모니터링 정보를 수집할 목적으로 만들어졌고, 수집한 데이터를 http 프로토콜로 호스팅하는 역할을 한다. 리눅스 익스포터, nginx 익스포터, 데이터베이스 익스포터 등이 많이 있지만 원하는 익스포터가 없으면 직접 만들어야하는 수고스러움이 있다.
키바나는 로그스태시로 데이터베이스에서 바로 데이터를 얻어 엘라스틱서치에 전달한다.
그래서 뭘 쓰는게 좋은가? 에 대한 해답은 어떤 데이터를 시각화하는가에 따라 결정된다. 데이터가 생성된 시간이 중요한 정보라면 그라파나, 연관 규칙이나 분류 등의 정보가 중요하다면 키바나를 쓰는 것이 좋다. 세부적인 디자인까지 고려한다면 둘 다 좋은 선택지가 아니다.
몇 가지 예를 들어보았다.
- IoT 장비의 센서 데이터 시각화 : 그라파나
- 네트워크 트래픽 분석 : 그라파나
- SSH 접속 로그 분석 : 그라파나
- 시스템 자원 가용률 분석 : 그라파나
- Transaction 분석 : 그라파나
- 쇼핑몰 매출 분석 : 키바나
- 상권 분석 : 키바나
- 자연어 분석 : 키바나
- 주식 종목 분석 : 키바나(종목별 연관 관계를 찾을 경우)
- 시간대별 매출 분석 : 키바나(시간 정보가 있지만 항목이나 가격이 관심사일 경우)
- 어떤 분석을 이쁘게 리포팅해야 한다 : 둘 다 아님
- 디자인도 중요하다 : 둘 다 아님
키바나 그라파나에서 제공하는 대쉬보드는 당연히 세부적인 디자인 요소 변경 못한다. 백이면 백 고객의 디자인 요구사항을 반영하기 힘들다. 둘 다 폰트 크기를 바꾸는 기능을 공식적으로 제공하지 않는다. 내부적으로 사용하는 용도로는 적합하나, 일반 사용자에게 제공할 목적이라면 입맛을 맞추기 어렵다.
나는 인트라넷 구성을 시각화하고 네트워크 노드의 트래픽에 따라 색과 크기를 달리하는 기능이 필요했다. 그리고 노드의 아이콘도 특정 이미지를 사용해달라는 요청이 있어… 결국 한 땀 한 땀 만들기로 했다.