Tech 기록지/Elastic Stack
[ElasticStack-31] Logstash - JDBC input
Lio Grande
2021. 3. 3. 14:29
SQL DB의 데이터를 Elasticsearch로 인덱싱하려고 할때 logstash conf 파일을 어떻게 설정하는지에 대한 내용을 작성합니다.
== SQL DB (MariaDB) 예시 == | == 테이블 (TEST_TABLE) 예시 ==
PORT : 1234 | NO | ID | CODE_NAME
DB Name : test
User : test_user
PWD : 1234
Table명 : TEST_TABLE
============
Logstash conf 파일 작성내용입니다.
input {
jdbc {
jdbc_connection_string => "jdbc:mysql://localhost:1234/test?characterEncoding=UTF-8&serverTimezone=UTC"
jdbc_driver_library => "D:/logstash-7.10.1/mysql-connector-java-8.0.22.jar"
jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
lowercase_column_names => false
jdbc_user => 'test_user'
jdbc_password => '1234'
statement => "SELECT * from TEST_TABLE"
}
}
filter {
mutate {
remove_field => ["@version", "host", "message", "tags", "path"]
}
}
output {
elasticsearch {
hosts => "localhost:9200"
index => "test_table_data"
document_id => "%{[NO]}_%{[ID]}_%{[CODE_NAME]}"
}
}
특이사항으로, 로그스태시는 DB의 컬럼명을 무조건 소문자로 변환하여 엘라스틱서치에 저장합니다.
(예시 기준으로 생성되는 필드명은 no, id, code_name)
해당 사항을 피하면서 기존 DB의 컬럼명을 그대로 사용하고 싶을때는 위와같이 옵션을 추가해줍니다.
(lowercase_column_names => false)
옵션을 선언하지 않는다면 기본값이 'true'이기에 DB의 컬럼명이 엘라스틱서치에서 소문자로 저장됩니다.
관련 링크 : LINK