본문 바로가기
👩‍💻TIL/엘라스틱서치

[elasticsearch] 로그스태시로 엘라스틱서치에 Oracle 데이터 동기화하기

by devuna 2021. 2. 3.
728x90

이전 글로 Logstash를 이용하여 MySQL에 있는 데이터를 엘라스틱서치로 동기화하는 것을 알아보았습니다.

👉로그스태시로 엘라스틱서치 MySQL 동기화하기

 

오늘은 MySQL이 아닌 오라클에 있는 데이터를 엘라스틱서치로 동기화하는 것을 정리해보려고 합니다.

 

먼저 큰 흐름은 MySQL이나 Oracle이나 거의 유사합니다.

다른 점이 있다면, 각각의 jdbc에 맞는 라이브러리를 사용한다는 것? 정도가 차이라고 할 수 있습니다.

 

 

1️⃣  먼저 엘라스틱서치와 같은 버전의 Logstash를 다운받습니다. (👉 다운로드 링크) 

 

 

2️⃣  jdbc 플러그인을 설치합니다.

 

./bin/logstash-plugin install logstash-input-jdbc

 

3️⃣  jdbc 플러그인이 설치되면 자신이 사용하는 RDBMS의 connector 라이브러리를 설치합니다.

Oracle의 경우 ojdbc를 다운 받아서 logstash의 lib 폴더에 넣어줍니다.

기존에 가지고 있는 ojdbc가 없는 경우에는 아래 링크로 들어가 자신의 버전에 맞는 jar 파일을 다운로드 받습니다.

👉 다운로드 링크 : www.oracle.com/database/technologies/jdbc-upc-downloads.html

 

저는 ojdbc6.jar 를 사용하였습니다. 

4️⃣  다운받은 로그스태시에서 원하는 경로에 config 파일을 작성한다.(config안의 logstash-sample.conf 파일 참고)

 

input {
  jdbc {
    jdbc_driver_library => "C:/logstash-7.10.0/lib/ojdbc6.jar"
    jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
    jdbc_connection_string => jdbc:oracle:thin:@localhost:1521:xe"; //localhost대신 ip주소를 사용해주셔도 됩니다.
    jdbc_user => "username"
    jdbc_password =>"password"
    schedule => "* * * * *"
    statement => "SELECT id, name, age FROM STUDENT"
  }
}
filter {
  mutate {
    remove_field => ["id", "@version"]
  }
}

output {
  elasticsearch {
      hosts => ["localhost:9200"]
      index => "index-name"
      document_id =>"%{id}"
  } stdout { 
	  codec => rubydebug 
  }
}

[input]  :오라클로 부터 가져올 부분에 대한 설정

- jdbc_driver_library : ojdbc6.jar를 다운받아 저장한 경로

- schedule : 스케쥴링 시간 (cron 표현식)

- statement : 실행할 쿼리문

 

[filter]: 데이터를 넣으면서 처리해줄 필터에 대한 설정

- remove_field : elasticsearch에 들어가지 않길 바라는 필드 처리

 

[output] : output을 elasticsearch로 보내는 설정

- hosts : elasticsearch 호스트 주소 설정

- index : elasticsearch 인덱스명

-document_id : elasticsearch로 보낼 document id를 지정


5️⃣ 로그스태시 실행

 

$sudo /logstash-7.10.0/bin/logstash -f /config/db.conf

 

이렇게 해주면, 스케쥴러가 돌아가며 원하는 시간마다 반복하여 오라클에 저장된 데이터를

엘라스틱서치로 넣어주게 됩니다.

 

728x90

댓글