2017년 12월 12일 화요일

timelion의 필드 집계 오류

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


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


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


엘라스틱서치는 분석기(analyzer)를 통해 단어 단위 검색(Full Text Search)이 가능한 인덱스를 생성하는데, 이렇게 분석기를 거친 필드는 집계 연산 과정에서 성능상 불리함을 갖는 듯하다.

그래서 집계나 정렬 등 작업 시 성능 향상을 위해 분석기를 거치지 않는 keyword 필드를 따로 두는 듯. timelion 처음 소개할 때 사용된 숫자형 필드는 그렇지 않은 걸로 봐서, 데이터 타입이 문자열일 때만 적용되는 듯하다.


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


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


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


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


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


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

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

댓글 없음:

댓글 쓰기

크리에이티브 커먼즈 라이선스