관리 메뉴

가끔 보자, 하늘.

logstash 인덱스 수정, 조건 설정하는 방법 본문

개발 이야기/인프라 구축 및 운영

logstash 인덱스 수정, 조건 설정하는 방법

가온아 2018. 7. 16. 11:41

'logstash-' 날짜 형태로 인덱스를 자동 생성하는데, 여러 타이틀 혹은 용도 별로 분리하려면 수정이 필수적임. 

 

 

만약 새롭게 생성하는 상황이라면, 원하는 곳에 pipelines에 적용할 config 파일을 하나 만들자. 

 

( https://www.elastic.co/guide/en/logstash/current/advanced-pipeline.html 참고)

 

 

만약 이미 만들어 두었다면 config/pipelines.yml을 열어 pipeline.id의 path.config를 확인해보자.

 

이제 기본적인 pipeline config를 구성했다면 원하는 조건과 이름을 활용해 인덱스를 수정해보자.

 

만약 logstash에서 elasticsearch로 바로 보낸다면 output 부분이 아래와 같을 것이다. 

 

output { elasticsearch { hosts => ["IP Address:port"] } }

 

 

hosts아래에 인덱스 이름 조건을 아래와 같이 삽입하면 elasticsearch에서 인덱스 명이 수정된 것을 확인할 수 있다.

 

 

output { elasticsearch { hosts => ["IP Address:port"]

index => 'test-%{+YYYY.MM.dd}' } }

 

 

만약 다중 pipelines을 사용한다면 input의 type별로 인덱스를 다르게 할 수 있다.

 

 

input {

redis {

.

.

type => "game_name"

}

.

.

}

.

.

 

 

output {

if[type]=="game_name"{ elasticsearch { hosts => ["IP Address:port"]

index => 'test-%{+YYYY.MM.dd}' }

}

.

.

}

 

 

* 조건은 아래와 같이 다중으로 처리 할 수 있다. 

 

if[type]=="game_name" and [playtime]>0{

 

 

 

보다 상세한 내용은 https://www.elastic.co/guide/en/logstash/current/configuration.html 문서에서 찾을 수 있다.

 

 

------------------------------------------------------------------------------------------------------------------------------

 

커스텀 인덱스 사용에 대한 주의 사항이 있어 내용을 추가한다.

 

유저 ip로 유저들의 위치 등을 찾아 낼 수 있는 플러그인을 기본적으로 제공하는데 한 가지 제약이 있다.

 

커스텀 인덱스를 사용하면 geoip의 정보를 찾아주지면 location이 아래처럼 일반 데이터 형태로 처리된다. 

 

 

그래서 Visualize/Map으로 가면 아래와 같은 에러를 볼 수 있다. 

 

 

 

원인은 logstash-로 시작되는 인덱스가 아닌 경우 geoip 를 제대로 처리하지 않기 때문이다. (https://www.elastic.co/blog/geoip-in-the-elastic-stack 참고)

 

elasticsearch로 output 하는 기본 Template 파일을 보면 "template":"logstash-*"로 시작되는걸 볼 수 있다. 

 

이를 해결하기 위한 방법은 두 가지가 있는데, 첫 번째는 별도의 template 파일을 만들어서 적용하는 것이다. 

 

elasticsearch {
      manage_template => true
      template => "/etc/logstash/templates/custom_template.json"
}

(https://stackoverflow.com/questions/29344547/kibana4-geo-map-error-not-showing-the-client-ip-field 참고)

하지만 이는 커스텀 인덱스 별로 모두 별도로 만들어야 하는 문제가 있다. 이를 해결하기 위한 두 번째 방법을 권고하는데, 그 방법은 커스텀 인덱스 이름 앞에 "logstash-"를 붙이는 방법이다. 개인적으로도 이 방법을 추천한다. 

index => 'logstash-test-%{+YYYY.MM.dd}'

잘 처리되면 아래와 같은 결과를 볼 수 있다. 

 

이런 pipeline을 여럿 실행할 경우 아래와 같이 별도 실행할 수 있다.

bin/logstash --pipeline.id path_to_data_folder -f config/your_pipeline_file.config &

 

이상. 또 다른 이슈 안생기길...

반응형