> ## Content Index
> Fetch the complete content index at: https://www.popit.kr/llms.txt
> Use this file to discover other available public pages before exploring further.

# timelion 필드 집계 오류
- URL: https://www.popit.kr/timelion-field-aggregation-error/
- Published: 2017-12-17T08:26:45.000Z
- Updated: 2017-12-18T00:01:15.000Z
- Author: 강 명훈
- Tags: #데이터분석, elasticsearch, 키바나, timelion

ELK 스택 삼대장 중 키바나를 개발한 '라쉬드 칸(Rashid Khan)'이 비행기 타고 가다 뚝딱 만들었다는 timelion. 이름에서 알 수 있듯이 timelion은 시계열 데이터 분석에 특화되어 있으며, 함수 형식의 표현식을 사용한다. 자동완성을 지원하기 때문에, 학습도 그리 어렵지 않은 편.

![1](https://www.popit.kr/content/images/wp/2017/12/1-1-600x351.png)

웹서버 접속자의 국가별 발생 추이를 그려보자. 다음은 상위 5개의 접속국가 추이를 그려주는 표현식 '.es(split=geoip.country\_name:5)'의 사용 결과. 아무 것도 안 그려진다.

![2](https://www.popit.kr/content/images/wp/2017/12/2-1-600x351.png)

뭐지? 접속 기록이 없다는 건가? 그건 아닌 것 같고, timelion이 아예 동작을 안 한 것 같다. 표현식은 맞는데(..) 인덱스명을 추가해봤다.

![3](https://www.popit.kr/content/images/wp/2017/12/3-600x351.png)

뭔가 더 큰 일 난 듯. 에러 메시지를 대충 읽어보니 ~~뭔 소린지 모르겠다~~매핑에서 뭘 바꾸란다. 아니면 keyword 필드를 사용하든지. 그게 뭐지 싶어 해당 인덱스 필드를 뒤져보니 '.keyword'로 끝나는 이름을 가진 필드가 하나 더 있다.

![4](https://www.popit.kr/content/images/wp/2017/12/4-600x351.png)

엘라스틱서치는 분석기(analyzed)를 통해 단어 단위 검색(Full Text Search)이 가능한 풀 텍스트 인덱스를 생성하는데, 이렇게 분석기를 거친 필드는 집계 연산 과정에서 성능상 불리함을 갖는 듯하다. 그래서 집계나 정렬 등 작업 시 성능 향상을 위해 분석기를 거치지 않는 keyword 필드를 따로 두는 듯. 밑천이 딸려서 [송 준이님 글](https://www.popit.kr/look-at-new-features-elasticsearch-5/)로 보충 설명.

> **text & keyword 필드 타입** 기존에 string 타입에 대해 분석(analyze)이 필요한 경우는 2가지 유형이었다. - analyzed: 전문 검색(full-text)이 필요한 경우 - not\_analyzed: 키워드 검색, 정렬, 집계(aggregation)이 필요한 경우 5.0.0 버전부터는 각 유형을 목적에 맞게 text 타입, keyword 타입으로 분리했다.

 정말인가 싶어 'Visualize' 메뉴에서 통계 그래프 생성에 사용되는 필드를 살펴보니 실제로 문자열 필드는 전부 keyword 필드. (메타 필드 '\_type' 빼고)

![5](https://www.popit.kr/content/images/wp/2017/12/5-600x531.png)

다음은 해당 필드명을 이용한 표현식 '.es(split=geoip.country\_name.keyword:5)'의 사용 결과. 이제 발생 추이가 그려진다.

![6](https://www.popit.kr/content/images/wp/2017/12/6-600x351.png)

이제 그래프는 그려졌으니, 좀더 예쁘게 꾸며보자. 어쩌면 제일 중요할 수도 있는 과정. 조상님이 얘기하셨다. 보기 좋은 떡이 먹기도 좋고, 이왕이면 다홍치마라고. 'lines' 옵션을 이용하면 기본 선그래프에 변화를 줄 수 있다.

![7](https://www.popit.kr/content/images/wp/2017/12/7-600x351.png)

다음은 표현식 '.es(split=geoip.country\_name.keyword:5).label(regex='.+:(.+) >.+',label=$1).lines(0,5,stack=true)'의 사용 결과. 그래프의 윤곽선을 없애고(width=0), 색을 채운 후(fill=5), 누적 그래프(stack=true)로 바꿨다. 왠지 있어 보이는 효과 발생.

![8](https://www.popit.kr/content/images/wp/2017/12/8-600x351.png)

참고로 범례 표시에서 원하는 범례를 클릭하면 해당 그래프를 숨길 수 있다.

![9](https://www.popit.kr/content/images/wp/2017/12/9-1-600x351.png)

엘라스틱서치 전반적으로 그렇지만, timelion도 세부 기능 하나하나까지 참 신경 많이 썼다는 느낌을 받는다. 개발자가 분석 업무를 직접 해보면서 ~~빡치는~~사용자 경험을 충분히 쌓았거나, 분석가와 긍정적 피드백을 활발하게 주고 받는다는 얘기.

> 개발자는 종종 NSM(Network Security Monitor)에 있어 기술적으로 가장 뛰어나지만 분석가의 요구를 분석하기 위한 최적의 위치에 있는 것은 아니다. 분석가는 반드시 자신의 의견을 개발자에게 효과적으로 전달하는 통로를 가지고 있어야 한다. - 네트워크 보안 실무 (418 페이지)