# 대화세션 로그 설명 및 Elastic Search 인덱스 삭제 가이드 - 최초 작성일: 2021년 8월 24일(화) - 작성자: kt 오준오 ## 목차 [TOC] ## 대화세션 로그 설명 및 삭제 필요 이유 - 대화세션 로그란? - 융기원에서 대화엔진이 세션 단위로 분석한 로그 - 융기원에서 대화엔진 로그를 세션 단위로 분석이 완료되면, IT의 보이스봇 Elastic Search Cluster로 로그를 색인한다. - 대화세션 로그 색인 주기 - 융기원에서 logstash를 활용하여 분석이 완료된 세션 로그를 하루에 2번 Elastic Search Cluster로 전달한다. - 대화세션 로그 색인 담당자 - kt 신동훈 전임 - kt 이원석 팀장 - 대화세션 로그 삭제 이유 - 대화세션 로그가 잘못 색인되었으면, 융기원에서 로그를 삭제 후 해당 로그를 재색인하겠다고 연락한다. - IT에서는 융기원이 삭제 요청한 인덱스를 찾아 삭제 후 융기원으로부터 로그를 재색인 받는다. ## 상용 ELK 및 대화세션 로그 인덱스 정보 - 보이스봇 상용 ELK 정보 |서버|설명| |---|---| |10.220.202.203:9200|elastic search node 1| |10.220.202.113:9200|elastic search node 2| |10.220.202.162:9200|elastic search node 3| |10.220.202.113:5601|kibana| - 대화세션 로그 인덱스 명칭 - dialog_session_log_{YYYY}.{MM}.{DD} - 예시: dialog_session_log_2021.08.10 ## 대화세션 로그 삭제 후 재색인 프로세스 1. 융기원에서 삭제 요청한 인덱스를 임시 인덱스에 복사하여 보관 - 작업 중 예기치 못한 에러로 원본 데이터가 유실 될 수 있으므로, 임시 인덱스에 원본 데이터를 복사해두는 것임 2. 해당 인덱스 내에 특정 로그 삭제 or 전체 인덱스 삭제 3. 융기원에 로그 재색인 요청 및 융기원 담당자와 색인된 로그 개수 확인 4. 임시 복관한 인덱스 삭제 - 예시 - 융기원에서 8월 20일 18시 ~ 8월 21일 09시 31분 까지의 데이터를 다시 전달한다고 요청 - 8월 20일 18시 ~ 8월 21일 09시 31분 까지의 데이터가 위치하고 있는 인덱스를 찾음 - dialog_session_log_2021.08.21 인덱스 - 해당 인덱스를 임시 인덱스에 복사 - dialog_session_log_2021.08.21 인덱스를 temp_dialog_session_log_2021.08.21 - 해당 인덱스 내에 특정 로그 삭제 - dialog_session_log_2021.08.21 인덱스의 @timestamp를 이용하여 18시 ~ 8월 21일 09시 31분 까지의 데이터 삭제 - 융기원측에 로그 재색인 요청, 색인이 완료되면 로그 색인 개수 확인 - 로그 개수에 문제가 없으면 임시로 생성한 인덱스 삭제 - temp_dialog_session_log_2021.08.21 삭제 ## 인덱스 조작 방법 - 아래 명령어를 수행하려면 상용 보이스봇 Elastic Search와 방화벽 해제가 되어 있어야한다. - local pc가 보이스봇 Elastic Search을 대상으로 방화벽 해제가 되어 있다면, 아래 curl 명령어를 참조하여 postman과 같은 툴을 사용하여 Elastic Search API를 호출해도 된다. - local pc가 방화벽이 해제되어 있지 않다면, 보이스봇 Elastic Search 서버로 접근하여 아래 명령어를 수행해도 된다. - 아래 curl 명령어를 참조하여 customizing 필요한 부분은 수정하여 사용하면 된다. - 년.월.일 => 이부분은 상황에 맞게 수정 ### 특정 시간대 로그가 위치하는 인덱스 확인 ```bash curl --location --request GET 'http://10.220.202.113:9200/dialog_session_log_년.월.*/_search' \ --header 'Authorization: Basic ZWxhc3RpYzpuZXcxMjM0IQ==' \ --header 'Content-Type: application/json' \ --data-raw '{ "track_total_hits": true, "query": { "bool": { "filter": { "range": { "@timestamp": { "gte": "2021-08-20 09:00:00.000", "lte": "2021-08-21 00:31:00.000", "format": "yyyy-MM-dd HH:mm:ss.SSS" } } } } } }' ``` - 응답 중 hits._index = 특정 로그가 위치하는 인덱스 ```bash "hits": [ { "_index": "dialog_session_log_2021.08.21", ...(생략)... }, ...(생략)... ``` ### 인덱스 복사 ```bash curl --location --request POST 'http://10.220.202.113:9200/_reindex' \ --header 'Authorization: Basic ZWxhc3RpYzpuZXcxMjM0IQ==' \ --header 'Content-Type: application/json' \ -d '{ "source": { "index": "dialog_session_log_년.월.일" }, "dest": { "index": "temp_dialog_session_log_년.월.일" } } ' ``` ### 인덱스 내에 특정 시간대 로그만 삭제 - @timestamp는 표준시간이므로 +9시간을 해야 한국 local 시간이 된다. - 아래는 8월 21일 18시이후부터 9시31분까지 데이터 삭제 ```bash curl --location --request POST 'http://10.220.202.113:9200/dialog_session_log_년.월.일/_delete_by_query' \ --header 'Authorization: Basic ZWxhc3RpYzpuZXcxMjM0IQ==' \ --header 'Content-Type: application/json' \ --data-raw '{ "query": { "bool": { "filter": { "range": { "@timestamp": { "gte": "2021-08-20 09:00:00.000", "lte": "2021-08-21 00:31:00.000", "format": "yyyy-MM-dd HH:mm:ss.SSS" } } } } } }' ``` ### 인덱스 전체 삭제 ```bash curl --location --request DELETE 'http://10.220.202.113:9200/dialog_session_log_년.월.일' \ --header 'Authorization: Basic ZWxhc3RpYzpuZXcxMjM0IQ==' ``` ### 인덱스 내 특정 시간대 로그 개수 확인 ```bash curl --location --request GET 'http://10.220.202.113:9200/dialog_session_log_년.월.일/_search' \ --header 'Authorization: Basic ZWxhc3RpYzpuZXcxMjM0IQ==' \ --header 'Content-Type: application/json' \ --data-raw '{ "track_total_hits": true, "query": { "bool": { "filter": { "range": { "@timestamp": { "gte": "2021-08-20 09:00:00.000", "lte": "2021-08-21 00:31:00.000", "format": "yyyy-MM-dd HH:mm:ss.SSS" } } } } } }' ``` - 응답 중에 hits.total.value = 로그 개수 ```bash ...(생략)... "hits": { "total": { "value": 3507, "relation": "eq" }, ...(생략)... ``` ### 복사한 인덱스 삭제 ```bash curl --location --request DELETE 'http://10.220.202.113:9200/temp_dialog_session_log_년.월.일' \ --header 'Authorization: Basic ZWxhc3RpYzpuZXcxMjM0IQ==' ```