ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 &

     

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

    반응형

    댓글 0

Designed by Tistory.