본문 바로가기

DevOps/Elastic Stack

Logstash로 MySQL과 AWS ElasticSearch 연동 + Kibana 사용 :: DANIDANI

지난 포스팅에서는 AWS ElasticSearch 구축과 기본 세팅을 하였습니다.

2021.04.11 - [DevOps/Elastic Stack] - AWS ElasticSearch 구축 및 기초 세팅 :: DANIDANI

이번에는 MySQL에 있는 데이터를 준실시간으로 Logstash를 사용하여 AWS ElasticSearch와 연동해보겠습니다!


1. Logstash 설치 on linux

sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

 

cd /etc/yum.repos.d
sudo vi logstash.repo

logstash.repo에 아래 내용 작성(new file)

[logstash-7.x]
name=Elastic repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

 

sudo yum install logstash

 

다른 os는 아래 사이트 참고

Installing Logstash | Logstash Reference [7.10] | Elastic

 

Installing Logstash | Logstash Reference [7.10] | Elastic

Use the echo method described above to add the Logstash repository. Do not use add-apt-repository as it will add a deb-src entry as well, but we do not provide a source package. If you have added the deb-src entry, you will see an error like the following:

www.elastic.co

 

2. mysql-connector-jdbc 설치

sudo yum install mysql-connector-java mysql-connector-jdbc

3. mysql-connector-jdbc 설치

sudo /usr/share/logstash/bin/logstash-plugin install logstash-output-amazon_es

4. conf파일 작성 및 실행

작성

input{
    beats{port => 5044}
    jdbc{
        jdbc_validate_connection => true
        jdbc_driver_class => "com.mysql.jdbc.Driver"
        jdbc_driver_library => "/usr/share/java/mysql-connector-java-5.1.12.jar"
        jdbc_connection_string => "jdbc:mysql://(데이터베이스 접속 주소):3306/(데이터베이스명)?characterEncoding=utf8"
        jdbc_user => "(데이터베이스 계정 이름)"
        jdbc_password => "(데이터베이스 계정 비밀번호)"
        statement => "SELECT * FROM SUPPORT_TB"
    }
}
output{
    elasticsearch {
        hosts => ["(AWS ES 엔드포인트 주소):443"]
        ssl => true
        index => "test-%{+YYYY.MM.dd}"
        user => "(AWS ES 마스터 아이디)"
        password => "(AWS ES 마스터 비밀번호)"
        ilm_enabled => false
    }
    stdout{}
}

실행

sudo /usr/share/logstash/bin/logstash -f (config파일명)

 

참고‼️yum으로 설치한 패키지 설치 경로 알아내는 방법 !!

rpm -ql (패키지명)

 

5. Kibana 사용하기

Kibana에서 index pattern 만들기

서버에서 bulk로 post한 경우 _index에 명시한 이름을 확인하고, (이 예제에서는 movies)

logstash로 post 경우 conf에서 output>elasticsearch>index에 명시한 이름을 확인 한 후

같은 이름으로 index pattern을 생성합니다. create 버튼을 누르면 끝!

 

Kibana 내의 SQL Workbench에서 데이터 확인 가능!

select * from (index pattern 이름)

 

Console 사용

여기서 데이터 조회, 삭제, 수정 가능

 

Discover

인덱스 데이터들의 검색과 필터링이 가능하다.

 

Visualize

데이터의 통계를 다양한 차트로 표현할 수 있는 영역이다.

 

Dashboard

visualize에서 만들어진 시각화 도구들을 조합해서 화면을 구성한다.

마찬가지로 검색어 조회와 필터링이 가능하고 다른 사람들과 공유나 json 형식의 import, export가 가능하다.

 

 

6. MySQL과 ElasticSearch Sync(싱크) 맞추기

Mysql와 elasticsearch sync

  • 기본적으로 SQL에서 변경 사항 반영은 schedule을 통해서 반영된다.
    • → 항상 logstash를 켜 놔야 한다.
  • insert나 update시 반영이 가능하지만, delete시 반영이 안된다.
    • → 새로운 column(ex. isDelete)을 추가하고 delete시 true로 표시 후, 나중에 삭제한다.
  • 또, column 추가나 삭제하면 중복 데이터가 생긴다.
    • → 새로운 인덱스를 만들어 교체? 매우 비효율적이다.
input{
    beats{port => 5044}
    jdbc{
        jdbc_validate_connection => true
        jdbc_driver_class => "com.mysql.jdbc.Driver"
        jdbc_driver_library => "/usr/share/java/mysql-connector-java-5.1.12.jar"
        jdbc_connection_string => "jdbc:mysql://{db ip}?characterEncoding=utf8"
        jdbc_user => "{유저명}"
        jdbc_password => "{비밀번호}"
        jdbc_paging_enabled => true
        tracking_column => "sync_time"
        use_column_value => true
        tracking_column_type => "numeric"
        schedule => "*/5 * * * * *"
        statement => "SELECT idx AS id, client_name, insertion_time, UNIX_TIMESTAMP(modification_time) AS sync_time FROM es_table WHERE (UNIX_TIMESTAMP(modification_time) > :sql_last_value AND modification_time < NOW()) ORDER BY modification_time ASC"
    }
}
filter{
    mutate{
        copy => { "id" => "[@metadata][_id]"}
    }
}
output{
    elasticsearch {
        hosts => ["{es 엔드포인트}"]
        ssl => true
        index => "mariadb-5"
        document_id => "%{[@metadata][_id]}"
        user => "{마스터 아이디}"
        password => "{비밀번호}"
        ilm_enabled => false
    }
    stdout{}
}

 

다음 글에서는 elastic search 기본 문법과 postman으로 테스트 하는 방법에 대해 포스팅하겠습니다🙂


참고

MySQL의 데이터를 엘라스틱서치와 싱크(sync)해서 빠른 검색과 분석을 하는 방법 > #elasticsearch #logstash

1단계: Amazon ES 도메인 생성

 

1단계: Amazon ES 도메인 생성 - Amazon Elasticsearch Service

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다. 1단계: Amazon ES 도메인 생성 테스트 Amazon Elasticsearch Service (Amazon ES) 도메인을

docs.aws.amazon.com