# 대화세션 로그 설명 및 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=='
```