본문 바로가기
개발일기/DB

(수정) elasticsearch + logstash 설치 2탄, AWS와 연결 성공!

by 프로그래머콩 2022. 8. 11.

 

 

 

 


환경 및 버전

 

OS / Window10, 11

Elasticsearch / 7.10.1

Kibana / 7.10.1

logstash / 7.10.1

maria db / 10.6.1 , 커넥터는 1.8.0

(JDBC 8.x)

 


순서

1. jdbc 설치 - mysql 커넥터

2. logstash 설치

3. elasticsearch 엔트 포인트 및 rds 엔드 포인트 연결해서 로컬에서 테스트

4. endpoint와 연결하기 위해 필요한 amazon_es 설치

5. config  작성 후 실행

 


1. jdbc 설치

 

mysql 사이트가서 링크 주소 복사 한다음

wget으로 다운 받고 dpkg로 설치하면 '/usr/shere/java/'위치에 설치되어있는 jar파일 확인할 수 있음

wget으로 다운 받고 dpkg로 설치하면 '/usr/shere/java/'위치에 설치되어있는 jar파일 확인할 수 있음

   

wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java_8.0.29-1ubuntu20.04_all.deb
sudo dpkg -i mysql-connector-java_8.0.29-1ubuntu20.04_all.deb

    * path
        - usr/share/java/mysql-connector-java-8.0.29.jar

 


2. logstash 설치  & lostash config 파일 작성

그리고 필요한 툴도 함께 설치 + 테스트 할 DB도 마련

 

실행을 위한 설정파일을 작성할 차례

 

실행파일에 들어가는 내용

- mysql을 작동시키기위해 필요한 jdbc(java 라이브러리)경로

- input 1: mysql connect 정보 

- input 1: mysql 쿼리

-  output2 : elasticsearch connect 정보

- output2 : elasticsearch에 생성될 index 및 document 이름

실행파일 예시 - (수정됨)





input {
   jdbc { 

        jdbc_driver_library=>"C:\Users\econo\logstash-7.10.1\lib\jar_files\mysql-connector-java-8.0.19.jar"
        jdbc_driver_class => "com.mysql.jdbc.Driver"
        jdbc_connection_string => "jdbc:mysql이건 maria건 쓰는 라이브러리에 맞추어 작성://주소:포트번호/db이름"
        jdbc_user => "아이디"
        jdbc_password => "비밀번호"
        #jdbc_paging_enabled => true
        #tracking_column => "id"
        #use_column_value => true
        #tracking_column_type => "numeric"
        statement => "SELECT * FROM es_table"
  }
}
output {
  elasticsearch {
    hosts => ["localhost:9200"]
    manage_template => false
    index => "filebeat-%{+YYYY.MM.dd}"
  }
}

항목 설명
input 말 그대로 입력 데이터, 
logstash 알아본 결과 input으로 들어갈 수 있는 것 :
mysql 뿐만아니라 트위터 api, 서버 로그. nginx 로그 등
logstash에서 지원하는 플러그인 범주에 속한다면 input데이터로 활용 가능



output 출력 데이터
elasticsearch는 output 형태 중의 하나 일 뿐 elasticsearch 종류가 아님
원래는 json형 파일 로그로 출력하는것이 기본 바탕이었다고 함
이 형태가 el과 잘 맞아 elasticsearch에서 효율적으로 사용해 
elasticsearch에서 logstash를 효율적으로 사용하게 된것 같다는것이 내 피셜
아무튼 amazon_es, s3, json 기본 파일 형 부터 elasticsearch -> 가공된 자료형까지 다양한 형태의 아웃풋까지 여러 플러그인을 통해 요즘 제공한다고 함.

jdbc_driver_library =>"C:\logstash-7.10.1\jdk\lib\jrt-fs.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"


el로 옮기기 위해
연결할 때 어떤 드라이브 사용할건지
(input에 사용할 드라이브) 
jdbc_connection_string => "jdbc:mysql://localhost:3306/metadata?serverTimezone=Asia/Seoul"
jdbc_pool_timeout => 120

jdbc_paging_enabled => true

jdbc_page_size => 10000

jdbc_user => "root"

jdbc_password => "root" 

연결할 mysql 주소 및 connect 정보

statement => "select * from data"


쿼리


output {

elasticsearch {

hosts => ["localhost:9200"]

index => "meta_jumin"

document_type => "doc_"

}


elasticsearch에 넣을때
어떤index 및 document로 넣을건지 

stdout {
codec => rubydebug
}
어떤 코덱 연동 및 사용할건지(자동으로 포맷 맞춰주는 라이브러리같은건데 기본으로 ruby를 사용하는듯, 추가 라이브러리 은전한닢등도 포맷가능하다고 들음)

 

 

 

3. (로컬) 엔드포인트 연결 및 실행 - 1차 테스트

logstash 실행파일 있는 위치로 가 conf파일을 실행 

 

C:\Users\econo\logstash-7.10.1\bin\logstash -f ./log.conf

 

실행 결과 - 전체 index 조회 및 해당 index 조회

GET _cat/indices

GET filebeat-2022.08.10/_search


(여기부턴 이론만 적어놨었는데 실습 완료)

 

4. elasticsearch 연동을 위한 갖가지 모듈 설치

 

bin/logstash-plugin install --version 6.4.0 logstash-output-amazon_es

라는 명령어를 통해 아마존과 연결하는 플러그인을 설치할 수 있음

사실 logstash 설치한 폴더 들어가 위 명령어 치면 바로 설치되야되는게 정석

이렇게

 

근데 안되는 경우가 간혹 있음

예를들면

1. 사양이 너무 낮다(migro, 프리티어로 진행했다)

2. window다 -> window에는 amazon_esㅍㄹ러그인 설치 바로 안된다 

이걸 사용하려면 gem과 ruby가 있어야하는데 그거부터 난제

 

선행 조건이 필요

- jdk 설치 후 java_home(환경변수) 설정 필요

- jruby 설치환경변수 설정 필요 (별도로 설치 해야함)

- gem 설치 필요  (위해 ruby 설치 필요) (별도로 설치 해야함)

..

.

.

등등

 

그냥 다 필요없고 ec2 지우고 다시 설치 하였음

 

 

 

 

....

 

5. aws에 맞는 logstash config 문서 작성 후 실행

내가 생각하는 그림은 docker부분 빼고 위와 같은 그림이므로 

amazon_es를 사용해서 output을 출력할 수 있도록

다시 logstash config를 작성했다

input {
    jdbc { 

        jdbc_driver_library=>"/usr/share/java/mysql-connector-java-8.0.26.jar"
        jdbc_driver_class => "com.mysql.jdbc.Driver"
        jdbc_connection_string => "jdbc:mysql://dbdb:3306/db"
        jdbc_user => "root1"
        jdbc_password => "root2"
        statement => "SELECT * FROM 테이블"
  }
}

output {
   amazon_es {
        hosts => ["엔드포인트,포트따윈 필요없어"]
        index => "es-test1"
	region => "ap-northeast-2"
    aws_access_key_id => '키'
    aws_secret_access_key => '시크륏'
    
   }


}

 

결과는 성공