본문 바로가기
Data/ELK

[2021.07.22] 인턴 +143 Tips) How to save mysql data only once in logstash without duplicate data?

by injekim97 2021. 7. 23.
반응형

[2021.07.22] 인턴 +143   Tips) How to save mysql data only once in logstash without duplicate data?

 

 

해당 게시글은, logstash를 이용하여, mysql db에 접근하여, elasticsearch로 중복 데이터 없이 단 한번만 보내는 방법이다.

 

 

예를 들자면 db 데이터의 row 행 값이 960이라면, 960만 들어가게 한다.

 

why ?

-> 정확한 데이터로 분석을 해야 하기 때문에 중복 값이 필요가 없다.

 

 

 

그럴려면, conf 파일에 해당 기능을 추가 해줘야 한다.

 

 

 

 

test.conf

input {
    jdbc {
        jdbc_driver_library => "/usr/share/java/mysql-connector-java-8.0.25.jar"
        jdbc_driver_class => "com.mysql.jdbc.Driver"
        #jdbc_connection_string => "jdbc:mysql://localhost:3306/DATA?allowPublicKeyRetrieval=true&useSSL=false&user=root&password=root"
        jdbc_connection_string => "jdbc:mysql://localhost:3306/DATA?useSSL=false&user=root&password=root"
        jdbc_user => "root"
        jdbc_password => "root"
        schedule => "* * * * *"
        statement => "select * from waist"
        type => "waist"
        tracking_column => "table_1"
        use_column_value => true
        }
}

output {
    if[type] == "waist"  {
        elasticsearch {
            hosts => "localhost:9200"
            index => "final_waist"
            user => "elastic"
            password => "d2L79ArdVSJqbxqATuKj"
            document_id => "%{index}"           #★★★★★★★★ 이것은 중복데이터값 제거하는것, index는 해당 db테이블에 uniqe한 컬럼을 넣어줘야 함 ★★★★★★

            }
    }
    stdout {
        #codec => dots {}
        codec => rubydebug
    }
}

 

 

자, test.conf에 output -> elasticsearch에서

 

* document_id => "%{디비에서 존재하는 유니크한 컬럼 속성 이름}"           

 e.g :  document_id => "%{index}" 로, 번호를 매겨, 중복 데이터 값이 들어오지 않게 함.

* 즉, {index}는 해당 db테이블에 uniqe한 컬럼을 넣어줘야 함 ★★★★★★

반응형

댓글