코딩마을방범대
[ELK] 탬플릿 생성하기 (message.keyword 필드가 비어있다면?) 본문
message는 text 타입이라서 별도 설정 없이는 사용이 불가하고, message.keyword를 추출하여 사용하게 된다.
가끔 message.keyword가 비어있는 경우가 있는데, 이럴 땐 혹시 데이터의 길이가 너무 긴지 확인할 필요가 있다.
콘솔에서 아래 API를 실행하면 필드별 최대 글자수가 출력된다.
GET 인덱스명/_mapping
message.keyword 로 추출하려고 했는데 아무 데이터가 없는 경우는 최대로 설정되어 있는 256자를 넘었기 때문이다.
해결 방안으론 필드를 수정해주는 방법이 있는데, 기존 인덱스를 사용하진 못하고 새로 생성해줘야한다.
1. 새로운 탬플릿 생성하기
최대 글자수를 늘리는 방법은 탬플릿을 생성하는 것이다.
kibana 사이트의 Index Management - Index Template 메뉴에서 직접 탬플릿 추가가 가능하다.
① 데이터 스트림 off, 인덱스 패턴에 정확한 패턴을 입력해준다.
여기서 Index pattern을 정확히 지정해줘야 이후에 생성되는 인덱스들에도 적용된다.
Kibana UI에서 직접 탬플릿을 추가하려는 경우 아래와 같이 Meta 필드를 넣을 수 있는 옵션이 있다.
_meta 필드의 용도
- 문서 설명: 인덱스나 템플릿의 목적에 대한 정보를 설명하는 데 사용
- 버전 관리: 인덱스 템플릿의 버전을 관리하거나, 변경 사항을 추적하는 데 유용함
- 작성자 정보: 템플릿이나 매핑을 작성한 사람에 대한 정보를 저장
예시
"_meta": {
"version": "1.0",
"description": "This template is for logging messages.",
"author": "Your Name"
}
② 생성 단계 중 Mappings 단계에서 Add field 선택해준다.
여기에 logstash.conf 파일에서 add_field로 추가해줬던 필드명들을 전부 입력해주어야 한다.
설정해주지 않으면 불러올 때 탬플릿의 필드들만 남기 때문에, conf파일에서 설정한 필드들이 다 날아간다.
이렇게만 설정하고 저장해주면 된다.
③ API를 통해 message.keyword 추가 및 최대 글자수 늘리기
이 작업은 Dev Console에서 진행하면 된다.
아래 api를 통해 탬플릿의 상세 정보를 가져온다.
GET /_index_template/탬플릿명
위와 같이 정보가 쫘르륵 나오는데, 우리가 복사해야할 부분은 index_template 블록 안의 내용들이다.
(index_patterns, template 블록 등을 복사하면 됨)
이후에 PUT api를 통해 기존 탬플릿을 수정해줄 것이다.
message.keyword는 꼭 message 블록 내에 위치해야 한다.
PUT /_index_template/탬플릿명
{
"index_patterns": ["인덱스 패턴"],
"template": {
"mappings": {
"dynamic": true,
"properties": {
...
"message": {
"type": "text",
"fields": {
"keyword": {
"ignore_above": 10000,
"type": "keyword"
}
}
}
}
}
}
}
④ 탬플릿 수정을 완료하였다면, ELK를 재시작 해준다.
docker-compose down
docker-compose build --no-cache && docker-compose up -d
필자의 경우 아예 인덱스를 전체 삭제한 후 탬플릿을 생성하여 재시작해주었다.
이럴 경우 2,3번은 진행하지 않아도 되며, 인덱스에 탬플릿이 제대로 적용됐는지 확인하는 방법은 아래 API를 호출해보면 된다.
호출했을 때 본인이 설정한 값이 제대로 적용되어 있다면 완료!
GET /인덱스명/_mapping
2. 기존 인덱스의 설정과 동일하게 새로운 인덱스 추가
아래 api를 통해 기존 인덱스의 설정을 확인한다.
GET /기존인덱스명/_mapping
기존 인덱스의 설정을 동일하게 하되, 수정하고 싶은 부분은 수정하여 추가한다.
인덱스명은 탬플릿 생성 시 설정한 인덱스 패턴과 일치해야 탬플릿이 자동 설정된다.
PUT /new_index_name
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1
},
"mappings": {
"properties": {
// 필요한 다른 필드 설정...
}
}
}
cannot create index with name [인덱스명], because it matches with template [탬플릿명] that creates data streams only, use create data stream api instead
만약 위 오류가 발생했다면, 이 오류는 탬플릿 생성할 때 Data stream 옵션을 on 해놨기 때문이다.
아래와 같이 off로 바꿔주면 오류 없이 인덱스 생성이 가능하다.
만약 위와 같이 바꿨는데도 아래 오류가 발생한다면, 데이터 스트림을 삭제해주어야 한다.
composable template [탬플릿명] with index patterns [인덱스 패턴], priority [null] and no data stream configuration would cause data streams [데이터스트림명] to no longer match a data stream template
데이터 스트림 삭제 시 관련된 인덱스도 삭제되니 꼭 데이터스트림 정보를 확인해야한다.
GET _data_stream
DELETE /_data_stream/데이터스트림명
데이터스트림의 장점
데이터 스트림을 사용하지 않아도 자동으로 인덱싱이 가능하지만, 데이터 스트림은 대량의 로그 데이터나 이벤트 데이터를 처리할 때 유용하다.
3. 기존 인덱스 삭제 후 데이터 옮기기
POST _reindex
{
"source": {
"index": "old_index_name"
},
"dest": {
"index": "new_index_name"
}
}
DELETE /old_index_name
'💡 백엔드 > ELK' 카테고리의 다른 글
[ELK] 일정 기간이 지난 인덱스 자동 삭제하기 (0) | 2024.11.20 |
---|---|
[ELK] Kafka와 ELK 연동하기 (0) | 2024.11.19 |
[ELK] Log를 불러올 때 타임스탬프를 커스텀 필드로 정의하기 (0) | 2024.11.13 |
[ELK] 데이터뷰 및 필드 생성하기 (0) | 2024.11.13 |
[ELK] 다른 서버에 구축되어 있는 ELK와 연결하기 (0) | 2024.11.12 |