#MySQL #Elasticsearch #Docker #DataTrans
목적은 심플함.
MySQL에 쌓은 또는 쌓이는 데이터를.
Elasticsearch에 주기적으로 옮기기.
왜 옮겨야 하는가?
이게 중요한데, 단순 Sync의 목적도 있지만!
Kibana 연동을 통해서 보고서를 대체(?)하기 위함이 큼.
Logstash 가 필요함.
다른 data shipper 가 있기는 하지만.
Elasticsearch와 연계가 되었다면 그냥.
Logstash를 사용하기를 권함.
우선.
Elasticsearch, Kibana 두 프로세스가 Docker로 실행되고 있다는 가정하에.
Logstash Docker --> pipeline --> logstash.conf 정보를 수정.
input {
jdbc {
jdbc_driver_library => "/usr/share/logstash/config/mysql-connector-java-5.1.39.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://DB_URI:3306/DB_NAME"
jdbc_user => "USER_NAME"
jdbc_password => "PASSWORD"
jdbc_paging_enabled => true
type => "stats_test"
tracking_column => "utime"
use_column_value => true
tracking_column_type => "numeric"
schedule => "0 * * * * *"
statement => "SELECT *, UNIX_TIMESTAMP(gen_time) as utime FROM table1 WHERE (UNIX_TIMESTAMP(gen_time) > :sql_last_value AND gen_time < NOW()) ORDER BY gen_time ASC"
}
}
output {
# stdout { codec => "rubydebug"}
if [type] == "10" or [type] == "20" {
elasticsearch {
hosts => ["IP_ADDR:9200"]
index => "my_real_idx"
}
} else {
elasticsearch {
hosts => ["IP_ADDR:9200"]
index => "my_exp_idx"
}
}
}
실행하면 알아서 데이터를 가져옴.
1시간에 1번씩!
너무 자주(예로 1초에 1번?) 실행하면.
DB가 힘들어함.
위의 statement의 SQL에 대한 설명은 인터넷에 많이 존재함.
간단히 설명하자면.
최신의 데이터 && 아직 한 번도 옮겨지지 않은 데이터 를 가져오겠다는 구문.
Docker 쓰시는게 맘이 편함.
Elasticsearch, Kibana, Logstash --> docker compose 로 묶어서 사용.
하기를 추천.
끝.