> ## 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.

# 데이터 후처리(?)를 위한 scripted field
- URL: https://www.popit.kr/scripted-field-for-data-postprocessing/
- Published: 2018-07-29T13:28:34.000Z
- Updated: 2018-07-30T13:07:11.000Z
- Author: 강 명훈
- Tags: #데이터분석, 키바나, scripted field

키바나 기능 중에 'scripted field'라는 게 있다. 무엇에 쓰는 물건인가 싶어 찾아보니 '[중요한 값을 스키마에서 별도 필드로 정의하지 못하였거나 또는 두 개 필드를 결합하여 단일 필드로 처리하고자 하는 경우](https://www.elastic.co/kr/blog/using-painless-kibana-scripted-fields?ref=popit.kr)'에 유용한 기능이라고.

![1](https://www.popit.kr/content/images/wp/2018/07/1-1-600x295.png)

Management > Index Patterns > scripted filelds

로그스태시 연동할 때 깜박하고 로그 필드 정의 빼먹었다가 처음부터 다시 하는 불상사를 막을 수 있다는 얘기. 로그스태시 연동 중 필터 과정이 데이터 전처리라면, scripted field는 데이터 후처리라고 할 수 있다 다음은 웹로그 중 요청 메소드와 응답코드 발생 현황. 두 필드를 합치고 싶다면?

![2](https://www.popit.kr/content/images/wp/2018/07/2-1-600x363.png)

다음은 scripted filed 생성 과정. 이름 주고, 데이터 타입 정하고, 스크립트 작성하면 끝.

![3](https://www.popit.kr/content/images/wp/2018/07/3-1-600x333.png)

지정된 필드값을 가져오는 'doc\['필드명'\].value'가 기본 구문인데, 사칙연산을 포함해서 다양한 데이터 가공이 가능하다.

![4](https://www.popit.kr/content/images/wp/2018/07/4-1-600x184.png)

참고로 scripted field를 만들 때 사용하는 스크립트 언어 이름이 'painless(고통 없음?)'. 그만큼 쉽다는 뜻이겠지. 백인들 작명 센스는 참 자유분방한 듯. 중딩 때 록 밴드 'Michael learns to rock'의 이름을 처음 듣고, 마이클이 록을 배워? 이놈들 이름 막 짓는구나 싶어 신기했었는데(..) 노래는 좋다. 한적한 도로 달릴 때 [frostbite](https://www.youtube.com/watch?time%5Fcontinue=2&v=96-8lbeZXuM&ref=popit.kr) 추천.

~~글이 산으로 가네~~ 다음은 scripted field 기능을 이용해서 요청 메소드와 응답코드 필드를 합친 'method - status' 필드 조회 결과.

![5](https://www.popit.kr/content/images/wp/2018/07/5-1-600x364.png)

다음처럼 통계 분석도 할 수 있고, 위에 링크 걸린 사이트 가보면 알 수 있지만 꽤 다양한 데이터 가공이 가능하다.

![6](https://www.popit.kr/content/images/wp/2018/07/6-1-600x333.png)

이번엔 검색 테스트. '메서드-응답코드'가 매칭된 scripted field에서 get 메소드와 매칭된 200 응답코드를 검색해봤다. 응? 못찾네?

![8](https://www.popit.kr/content/images/wp/2018/07/8-600x361.png)

scripted field는 불러오는 시점에 데이터를 가공해서 보여주는 형식. 엘라스틱서치에 저장된 데이터가 아니라는 얘기. 없는 데이터를 검색하니 못찾는 게 당연한 건가?

다른 scripted field를 만들어 보자. 다음은 URI 변수 데이터를 필드 추출에서 멈추지 않고, [Logstash 필터 ruby](http://kangmyounghun.blogspot.kr/2017/10/logstash-ruby.html?ref=popit.kr)를 이용해서 데이터 길이까지 측정한 결과. asp 파일별 변수 길이의 변화 추적이 가능해진다. (변수 길이가 급증한 이유는 무엇일까?)

![9](https://www.popit.kr/content/images/wp/2018/07/9-600x333.png)

그런데 데이터 전처리 과정에서 필터 사용을 깜박하거나, 처음엔 데이터 길이 측정의 필요성을 느끼지 못하다가, 분석 과정에서 필요해졌다면? 그럴 땐 별 수 없이 지겨운 데이터 전처리 과정을 다시 진행해야 한다. 이럴 때 scripted field가 도움이 될까?

![10](https://www.popit.kr/content/images/wp/2018/07/10-600x325.png)

다음은 'var.keyword' 필드에 저장된 문자열 데이터의 길이를 잰 후, 숫자로 저장한 scripted field 생성 결과. 전처리 과정에서 생성한 var\_len 필드와 후처리 과정에서 생성한 var\_len2 필드가 같은 값을 보여준다.

![11](https://www.popit.kr/content/images/wp/2018/07/11-600x299.png)

이제 var\_len2 필드로 asp 파일별 변수 길이의 변화 추이를 살펴볼 수 있는 시계열 그래프를 그려보자. 그런데 안 됨.

![12](https://www.popit.kr/content/images/wp/2018/07/12-600x331.png)

에러 메시지가 뜨지만 뭔소린지 모르겠다. 이것도 엘라스틱서치에 저장되지 않은 데이터라서 발생하는 문제인가? 'method-status' 필드의 시계열 그래프는 잘 그렸는데, 얘는 왜 못그리지? 차이가 있다면 'method-status' 필드는 문자형, 'var\_len2' 필드는 숫자형 데이터라는 건데, scripted field는 숫자형 데이터의 aggregation을 지원하지 않나? 날도 더운데 괜히 시작했다 싶다.-\_-

scripted field는 실시간으로 데이터를 가공해서 보여주는 기능이라 그런지, 활용에 제약이 좀 있는 듯하다. 데이터 후처리 가능한 기능이라고 좋아했는데(..) 흥, 그냥 데이터 전처리 잘 하면 되지 뭐. ~~말은 이렇게 했지만 아시는 분 조언 좀~~