개인 블로그 이전하였습니다! https://mobilog.me 아무데나 클릭하면 닫힙니다.
엘라스틱 서치 mysql 테이블 연동하기

Elastic 스택을 모두 받았으면 실제로 mysql과 데이터를 연동해보자

사전 점검

  • Elasticsearch가 정상적으로 동작하는가?
    curl -XGET ${hostIP}:9200/ or 주소창에 직접입력 http://${hostIP}:9200/
    접속시 데이터가 나오면 정상
  • Kibana가 정상적으로 동작하는가?
    http://${hostIP}:5601

로그스태시 설정 및 시작

JAVA_HOME Path 설정

echo $JAVA_HOME시 경로가 안나타나면 환경변수 설정 필요

경로확인
which java
/usr/bin/java

readlink -f /usr/bin/java
/usr/lib/jvm/java-11-openjdk-arm64

vi /etc/profile
가장 아래 줄에 추가 자바가 있는경로 추가. 경로는 다를 수 있으므로 확인 필요
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-arm64

저장후 환경변수 적용
source /etc/profile
echo $JAVA_HOME

Mysql JDBC 설치

  • logstash는 자바 환경이라 자바 db connector가 필요합니다.
  • 1. 루트경로 (어디든 상관은 없음.) 최신버전이 있기도하니 아래 경로 들어가서 더 최신껄 받아두 됩니다. sudo wget 'https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.18.tar.gz'
  • 압축해제
    sudo tar -xvf ./mysql-connector-java-8.0.18.tar.gz
  • jar 파일이동 (이동경로는 파악해두세요 !)
    sudo mv ./mysql-connector-java-8.0.18/mysql-connector-java-8.0.18.jar ./lib/mysql-connector-java-8.0.18.jar
  • 남은 필요없는 파일 제거
    sudo rm -rf ./mysql-connector-java-8.0.18*

logstash mysql용 conf 설정!

logstash에서 mysql을 인풋값으로 사용하기위한 logstash input plugin 설치
로그 스태시 경로에서 실행 (일반적으로 다음과 같음 '/usr/share/logstash')
bin/logstash-plugin install logstash-input-jdbc

로그스태시에는 기본적으로 제공해주는 conf파일이 없어서 직접 만들어줘야 합니다.
일반적으로는 /etc/logstash/conf.d 폴더안에 만들어 줘서 사용합니다.
위 경로로 가서 sudo vi mysql.conf 로 mysql.conf를 만들어줍시다.

input {
  jdbc {
        // 방금 파악해둔 jdbc driver 경로
        jdbc_driver_library => "/lib/mysql-connector-java-8.0.18.jar" 
        jdbc_driver_class => "com.mysql.cj.jdbc.Driver"  
        //jdbc_driver_class 클래스 오류 나면 `com.mysql.jdbc.Driver' 요걸루 쓰세요
        jdbc_connection_string => "jdbc:mysql://${HOST경로}/store10"
        jdbc_user => "dbuser"
        jdbc_password => "userpassword"
        schedule => "*/10 * * * *" //크론탭과 동일 10초에 한번씩 실행
        statement => "select p.id, p.title , p.price from product p" //쿼리문 설정
  }
}
filter {
  mutate {
        remove_field => ["@version"]
  }
}
output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "product-elastic-data"
    // <- select한 값의 pk id로 설정안해주면 데이터가 계속해서 입력됨
    document_id => "{%id}" 

    //엘라스틱 유저와 패스워드가 지정되있으면 주석해제후 사용
    #user => "elastic"
    #password => "changeme"
  } 
  stdout { } // 테스트를 위함.?? 궅이 없어도 됩니다.
}

/** 실행하면 엘라스틱서치의 인덱스가 자동생성되어 데이터가 입력됩니다. 쿼리문 또는 기타 오류가 있지 않는한.   
* 실행하기 이전에 인덱스 매핑을 먼저 해줘야합니다.   
* 엘라스틱 서치에서 인덱스 매핑은 추가는 되지만 수정 및 삭제가 불가능하기 때문에   
* 재할당 하기 위해서는 reindex를 사용해야합니다. 그런 번거로움을 줄이기 위해 먼저 인덱스를 생성합니다.!
* mysql.conf 파일 안에서 설정해주는 방법이 있을 것 같은데 아직 못찾아서...
* cmd 로그스태시 설정한 conf 파일 실행문
**/ 
sudo /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/mysql.conf

인덱스 생성

여기서는 키바나를 이용해서 생성하겠습니다. kibana 경로 http://${host}:5601.
메뉴 하단으로 내려가면 Dev Tools가 있는데 엘라스틱 서치 쿼리를 직접 입력할 수 있는 콘솔창이 나타납니다.

스크린샷 2021-08-18 오후 8 42 21

PUT /index_name (로그 스태시의 인덱스와 동일하게 설정)
{
  "settings": { // 셋팅 설정
    "analysis": { // 분석 설정
      "analyzer": { 
        "autocomplete": { // autocomplete 라는 명칭 지정
          "tokenizer": "autocomplete", // 데이터 토큰하는 방식 지정 tokenizer: autocomplete를 가져옴
          "filter": [ // 필터 검색시 문자 소문자화
            "lowercase"
          ]
        },
        "autocomplete_search": { //영어를 모두 소문자로 토큰화함.
          "tokenizer": "lowercase"
        }
      },
      "tokenizer": { // 데이터 토큰화 방식
        "autocomplete": { // 방식에 대한 명칭
          "type": "edge_ngram", // 토큰화 할 plugin 설정 edge_ngram은 기본 내장입니다
          "min_gram": 1, // 최소 토큰값 길이 (1로 지정시 한글자 검색이 가능해짐. 정확도 낮음. 2로 지정시 한글자 검색 안됨.)
          "max_gram": 20, // 최대 토큰값 길이
          "token_chars": [
            "letter",
            "digit"
          ]
        }
      }
    }
  },
  //데이터 인덱스 매핑하는 과정 (추가하는것은 가능하므로 토큰화할 방식이 필요한 컬럼만 직접 설정해줌)
  "mappings": { 
    "properties": {
      "title": { // 쿼리문에서 title 값만 설정
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        },
        //위에서 지정한 analyzer 내용
        "analyzer": "autocomplete", 
        "search_analyzer": "autocomplete_search" 
      }
    }
  }
}

스크린샷 2021-08-18 오후 9 05 04

후 실동작을 하면 생성완료 됨을 볼수 있음 !!
이제야말로 로그스태시를 킬 차례
sudo /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/mysql.conf
잠시 기다리면 동작을하고 쿼리문이 실행되면서 데이터가 입력되는 것을 볼수 있다.

이러고 키바나에서
메뉴 -> 가장 하단의 Stack Management -> 왼쪽 사이드바 중상단의 index management를 확인하면 데이터와 인덱스 정보를 확인할 수 있다.

데이터 연동은 끝 !!