관리 메뉴

가끔 보자, 하늘.

logstash와 mysql 연동 본문

개발 이야기/인프라 구축 및 운영

logstash와 mysql 연동

가온아 2018. 7. 24. 13:53

ES에서 제공하는 결과물은 대부분 멋지지만 가끔 odbc의 기능들이 필요한 경우가 있다. (X-pack을 사용하면 sql like query가 가능하지만 비용이 ..)


kibana 등에서는 결과를 실시간 쿼리를 통해 보기 때문에 반응성이 항상 아쉽다.


이런 저런 이유로 리포트용 솔루션을 별도 구축하게 되었다. 


만드는 김에, 일부 sql query가 필요한 경우를 위해, 필요한 로그들을 ES로 보냈다가 가져오기는 추가적인 절차가 필요해서,


logstash에서 ES로 보내면서 필요한 일부분만 바로 mysql에 직접 보내기로 했다. 


플러그인을 만들어야 하나 찾아보니... 


https://www.elastic.co/guide/en/logstash/current/input-plugins.html  >> input에는 


https://www.elastic.co/guide/en/logstash/current/output-plugins.html >> output에는 없네??


구글링 해보니 git에 있다.


https://github.com/theangryangel/logstash-output-jdbc/tree/master


하지만 2018/07/23 기준으로 아직 6.x 버전 대에서는 문제가 있을 수 있다네.


"See master branch for logstash v5 & v6 warning This is untested under Logstash 6.3 at this time, and there has been 1 unverified report of an issue. Please use at your own risk until I can find the time to evaluate and test 6.3."


대량 삽입에 대한 이슈가 한 개 올라와 있는데, 회피하거나, 어차피 오픈소스니 문제 생기면 고쳐서 리포트도 해줄 겸 해보자고 시작함. 



[ 설  치 ]


일단 jdbc 다운로드 해서 vendor 폴더 안에 jar/jdbc 폴더 만들고 삽입.


http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.11.tar.gz  >> 오늘 기준 최신 파일. https://dev.mysql.com/downloads/connector/j/에서 최신 버전을 확인 후 버전 번호를 대체하면 다운 받을 수 있음.


압축 풀어서 vendor/jar/jdbc 폴더에 삽입. logstash가 설치된 곳마다 별도 설치해야 함.


이후 logstash 폴더에서 bin/logstash-plugin install logstash-output-jdbc를 실행. 


[ 설  정 ]


사용하는 config파일 열어서 아래 내용 추가.


output 내용 중 필요한 조건에 따라 아래 내용을 추가하면 됨.


if[조건]==값{ jdbc { driver_class => "com.mysql.cj.jdbc.Driver" connection_string => "jdbc:mysql://your_mysql_addr:port/your_db?characterEncoding=UTF-8&serverTimezone=UTC&user=input_your_id&password=input_your_pwd" statement => [ "INSERT INTO table_name (column1, column2) VALUES(?,?)", "raw_data_name1", "raw_data_name_2" ] } }


보다 상세한 옵션에 대해서는 https://github.com/theangryangel/logstash-output-jdbc/tree/master#configuration-options 를 참고할 것.


이상. 





반응형