지난 포스팅에서는 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
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
'DevOps > Elastic Stack' 카테고리의 다른 글
ElasticSearch 기초 문법 사용법 + Postman에서 테스트 하는 방법 :: DANIDANI (2) | 2021.04.12 |
---|---|
AWS ElasticSearch 구축 및 기초 세팅 :: DANIDANI (0) | 2021.04.11 |
검색 엔진 원리 / Elastic Search vs Solr Search :: DANIDANI (2) | 2021.01.20 |