인덱스 템플릿
아파치 로그 형태의 데이터를 같은 매핑 형태로 넣어주기 위해서 _index_template 활용합니다.
PUT /_index_template/mylogs
{
"index_patterns" : [
"mylogs*"
],
"priority" : 10,
"template": {
"mappings": {
"properties" : {
{재설정한 필드 매핑}
}
}
}
}
mylogs라는 인덱스 템플릿 확인 - 지우는 건 DELETE
GET _index_template/mylogs
DELETE _index_template/mylogs
인덱스 재색인
인덱스 재색인을 위해 source에 apachelog-*의 이름의 파일들을 전체 적용합니다.
주의할 점은 dest에 mylogs-*로 하면 되지 않을까? 인데 아래와 같이 하면 오류가 납니다.
POST _reindex
{
"source": {
"index": "apachelog-*"
},
"dest": {
"index": "mylogs"
}
}
dest에는 mylogs에 하나로 모으지 않고 apachelog의 날짜에 맞게 따로 저장하기 위해서 mylogs-{각 데이터 날짜}가 필요합니다. 즉, 스크립트가 필요합니다.
스크립트(painless script) 인덱스 재색인을 해보겠습니다.
POST _reindex
{
"source": {
"index": "apachelog-*"
},
"dest": {
"index": "mylogs",
},
"script": {
"lang": "painless",
"source": "ctx._index = 'mylogs-' + (ctx._index.substring('apachelog-'.length(), ctx._index.length()))"
}
}
필요 없는 필드 삭제
방법 1 : 소스에서 제거해서 나머지 필드만 가져오기
방법 2 : source->dest로 넘어갈 때 스크립트로 삭제하는 방법(_ingest/pipeline 사용)
PUT _ingest/pipeline/mylogs_delete_fields
{
"processors": [
{
"remove": {
"field": ["clientip", "ecs", "input", "tags", "log"]
}
}
]
}
# 스크립트(painless script) 인덱스 재색인 + _ingest/pipeline(remove)
POST _reindex
{
"source": {
"index": "apachelog-*"
},
"dest": {
"index": "mylogs",
"pipeline": "mylogs_delete_fields"
},
"script": {
"lang": "painless",
"source": "ctx._index = 'mylogs-' + (ctx._index.substring('apachelog-'.length(), ctx._index.length()))"
}
}
전체 아파치 로그 데이터 재색인(새로 적용한 템플릿 적용) 한 후 확인해보면 아래와 같이 나타납니다.
GET _cat/indices/mylogs*
# 하나의 데이터 mapping 확인
GET mylogs-2020.08.08/_mapping
tips
1. elasticsearch에서 데이터를 한번 색인을 할 때 mapping 정보가 잘못 들어가면 재색인을 해야 합니다.
2. 다음 예제는 데이터가 30만 건 밖에 되지 않지만 실제 현업에서 이렇게 재색인하면 비효율적입니다.
3. mappings이나 settings 정보들은 데이터 전체를 색인하기 전에 실제 데이터 일부만 넣어서 생성된 mappings을 보고 오류/최적화 진행 후 template을 만들고 난 뒤 실제 데이터를 색인하면 더 효율적입니다.
마무리
이번 포스팅은 elasticsearch의 필드 매핑과 그것을 효율적으로 하는 인덱스 템플릿과 스크립트에 대해 알아보았습니다.
다음 포스팅은 중요한 개념인 샤드와 역 인덱스에 대해 알아보겠습니다. 감사합니다.
'ELK stack' 카테고리의 다른 글
[ELK] 13. kibana 살펴보기 (0) | 2022.07.05 |
---|---|
[ELK] 12. elasticsearch 샤드 (0) | 2022.07.04 |
[ELK] 10. elasticsearch 인덱스 재색인 (1) - 필드 매핑 개선 (0) | 2022.07.01 |
[ELK] 9. filebeat - logstash - elasticsearch (0) | 2022.06.30 |
[ELK] 8. Logstash 실행 및 filter 설정 (0) | 2022.06.29 |
댓글