반응형
[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한 컬럼을 넣어줘야 함 ★★★★★★
반응형
댓글