ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Logstash 6.x Json 포맷 Log 파일 입력 받아 ElasticSearch6.x 에 Template 기반 출력 하는 법
    ELK/Logstash 2018. 11. 20. 15:40





    Logstash에서 json 포맷의 로그파일 input으로, Elasticsearch에 ouput 시키기


    0. log 파일 내용

    {"id":"1", "hashtag" : "해시테그1"}

    {"id":"2", "hashtag" : "해시테그2"}

    {"id":"3", "hashtag" : "해시테그3"}

    ,,,,,




    1. Logstash 설정 파일 (eg, logstash-backpack-hashtag.conf)


    input {
    file {
    path => "/usr/local/nodejs/backpack/logs/backpack-api-posting.log"    // 로그 파일 경오
    start_position => "beginning"    // 시작점 부터 읽어 드리는 옵션
    }
    }

    filter{
      json {
        source => "message"    // 해당 log 각각의 row
      }
    }

    output {
    elasticsearch {
    hosts => ["xxx.xxx.xxx.xxx:9200"]
    index => "backpack_postings"    // 엘라스틱 서치 인덱스 명
    document_type => "postings"    // 엘라스틱 서치 타입 명
    document_id => "%{id}"        // 엘라스틱 도큐먼트 id, 위에서는 json format의 id값
    template_name => "backpack_postings"    // 맵핑시킬 엘라스틱서치 탬플릿 명
    }
    }




    2. 엘라스틱서치 템플릿

    +nori 형태소 분석기, ngram, edge_ngram 적용 케이스


    #템플릿 등록
    PUT _template/backpack_hashtags
    {
    "template": "backpack_hashtags",
    "settings": {
    "analysis": {
    "analyzer": {    // 분석기 설정,,,
    "korean_analyzer" : {
    "type" : "custom",
    "tokenizer": "korean_tokenizer",
    "filter" : ["stop", "lowercase", "trim"]
    },
    "ngram_analyzer" : {
    "type" : "custom",
    "tokenizer" : "ngram_tokenizer",
    "filter" : ["lowercase", "trim"]
    },
    "edge_ngram_analyzer" : {
    "type" : "custom",
    "tokenizer" : "edge_ngram_tokenizer",
    "filter" : ["lowercase", "trim"]
    }
    },
    "tokenizer": {    // 토크나이저 설정,,,
    "korean_tokenizer": {
    "type": "nori_tokenizer",
    "decompound_mode": "mixed",
    "user_dictionary": "userdict_ko.txt"
    },
    "ngram_tokenizer" : {
    "type" : "ngram",
    "min_gram" : "1",
    "max_gram" : "5",
    "token_chars": [ "letter", "digit"]
    },
    "edge_ngram_tokenizer" : {
    "type" : "edge_ngram",
    "min_gram" : "1",
    "max_gram" : "5",
    "token_chars": [ "letter", "digit"]
    }
    }
    }
    },
    "mappings": {
    "hashtags" : {    // 타입 명
    "properties": {
    "hashtag" : {    
    "type": "text",
    "fields" : {    // 필드 정의
    "hashtag_ko" : {"type" : "text", "analyzer" : "korean_analyzer", "boost": 3},
    "hashtag_ng" : {"type" : "text", "analyzer" : "ngram_analyzer", "boost": 1},
    "hashtag_ed" : {"type" : "text", "analyzer" : "edge_ngram_analyzer", "boost": 2}
    }
    }
    }
    }
    }
    }



    3. 해당 템플릿으로 인덱스 생성


    backpack_hashtags


    PUT /backpack_hashtags

    인덱스 정보를 채우지 않아도, 해당 템플릿으로 지정한 이름으로 맵핑되어 인덱스가 생성 됩니다.


    4. logstash 실행


    ../bin/logstash -f ./logstash-backpack-hashtag.conf



    5. elasticsearch 데이터 확인


    #GET /backpack_hashtags/hashtags/_search?pretty




    'ELK > Logstash' 카테고리의 다른 글

    Logstash 6.x Multi instance 실행 설정 법  (0) 2018.11.20
Designed by Tistory.