Gibbs Kim's playground

[ElasticStack-31] Logstash - JDBC input 본문

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