기존에 iLM 을 지정해뒀던 것 같은데 어느날 보니 모든 인덱스에 대해 풀려있었고.. 블로그엔 기록해둔 글이 없어서 작성한다.
logstash 설정
먼저 kibana 를 설정하지 않고 logstash 부터 설정한다.
input {
kafka {
consumer_threads => 8
max_poll_records => "5000"
decorate_events => true
auto_commit_interval_ms => 1000
partition_assignment_strategy => "round_robin"
bootstrap_servers => "{kafka ip 주소}:9091"
topics => [""dev-test-log", "prod-test-log"]
group_id => "test"
client_id => "logstash-prefix-test"
codec => plain { charset => "UTF-8" }
}
# filebeat 설정
# beats {
# port => 5044 (같은 서버 내 동일 포트 지정 불가능 하니 filebeat 2개를 연결할 땐 포트를 다르게 해줘야한다. 5045 같은.. 물론 filebeat 서버에서도 연결 시 해당 포트로 연결해야하며 inbound 포트도 추가로 개방해야한다)
# }
}
filter {
date {
match => ["timestamp", "YYYY-MM-dd HH:mm:ss"]
timezone => "Asia/Seoul"
target => "@timestamp"
}
mutate {
remove_field => ['@version', 'timestamp']
}
json {
source => "message"
}
}
output {
elasticsearch {
hosts => ["{es ip 주소}:9200"]
ilm_enabled => true
ilm_rollover_alias => "{alias 편하게 ilm policy 이름과 같이 지정해도 상관없다}"
ilm_policy => "{kibana 에서 생성한 ilm policy 이름}"
}
}
# 여러개 지정 시 아래 포멧
# output {
# # kafka
# if [@metadata][kafka][topic] == "" {}
#
# # filebeat
# if [fields][index_name] == "test-api-log" {
# elasticsearch {
# hosts => ["{es ip 주소}:9200"]
# ilm_enabled => true
# ilm_rollover_alias => "test-api-log"
# ilm_policy => "test"
# }
# } else if [fields][index_name] == "test-api-error-log" {
# elasticsearch {
# hosts => ["{es ip 주소}:9200"]
# ilm_enabled => true
# ilm_rollover_alias => "test-api-error-log"
# ilm_policy => "test"
# }
# }
# }
보통 위 같은 형식으로 conf 파일을 생성한다. logstash 를 재시작하지 않고 파일만 저장한다.
kibana 설정 (8.3.3 기준)
kibana 의 전체메뉴에서 Management
-> Index Lifecycle Management
로 진입하여 Create policy
를 클릭하고 logstash 에서 지정한 ilm_policy
이름으로 생성한다. 위에서는 test
로 지정했으니 test
로 생성한다고 보면된다.
생성 후 logstash 를 실행한다. 실행 후 kibana 의 Index Templates
탭을 가보면 자동으로 생성이 되어있을 것이다.
만약 생성 안된 템플릿이 있다면 수동으로 설정한다. 수동으로 설정할 때 Index patterns
에 꼭 OOO-*
형태로 아스테리크 표시로 설정하며
Settings 에서는 다음 처럼 지정한다.
{
"index": {
"lifecycle": {
"name": "{ilm_policy 이름}",
"rollover_alias": "{logstash 에서 지정한 ilm_rollover_alias 이름}"
},
"number_of_shards": "1",
"refresh_interval": "5s"
}
}
lifecycle policy
정책에 대해 간단히 살펴보면 Hot phase
의 경우 Advanced settings
에서 size 또는 age 를 지정할 수 있는데 여기서 빠르게 테스트를 해보기 위해서는 age 를 10초 정도로 지정하면 된다. rollover 정책으로 인해 logstash 에서 딱히 포멧을 지정하지 않았다면 {now/d}-000001 형태로 계속 생성이 될 것이다. 그리고 우측 위의 무한표시+쓰레기통 에서 쓰레기통을 클릭하면 맨 밑에 Delete phase
가 생성되며 snapshot policy
이 생성되어 있다면 해당 정책이 실행되고 나서 index 가 삭제된다.
프로세스 순서는 다음과 같다.
test-000001 : write (hot age: 10s)
... after 10s
test-000001 : read (delete age: 10s) -> 10s 가 지나면 상태값이 delete 로 변경되며 snapshot 이 지정된 경우 정책 실행 후 삭제됨
test-000002 : write (hot age: 10s)
snapshot policy
kibana 에서는 index 의 snapshot 기능을 제공하며 repository 종류 중에 aws s3 가 있다.Snapshot and Restore
메뉴로 진입하여 먼저 repository 를 생성한다.
간단하게 이름을 지정한다. 여기서는 test-repository
라고 지정하고 다음으로 넘어간다. (이미지 할 때랑 다르게함..)
위의 이미지처럼 AWS S3 Bucket 이름을 정확하게 써야한다. AWS S3 가서 Bucket 을 생성하고 같은 이름으로 넣자. (권한은 퍼블릭)
그리고 저장한다.
그 다음 옆의 탭인 Policies
에서 새로운 정책을 생성한다.
이름은 간단히 작성하고 형식은 날짜 형태를 그대로 맞췄다. (기본 제공해주는 포멧을 약간 수정)
아까 생성한 repository 를 연결하고 시간은 14:59 로 맞췄다. (GMT 기준 +09:00 이 부분이 여기서는 서버랑 상관없이 수정이 안되는 것 같아서..)
그러면 한국시간 기준으로 23:59 에 실행이 된다. 그리고 다음으로 간다.
여기서 All data streams and indices
부분을 off 하고 필요한 index 만 지정하고 최종 저장한다.
'DevOps > ELK' 카테고리의 다른 글
Kafka 실습 (4) - Logstash + Elasticsearch + Kibana 시각화 (0) | 2021.02.15 |
---|