brew tab elastic/tap
* tab : homebrew 외 서드파티 저장소
brew install elastic/tap/elasticsearch-full
brew install elastic/tap/logstash-full
brew install elastic/tap/kibana-full
brew services start elastic/tap/elasticsearch-full
http://localhost:9200 접속하여 실행 확인 ( 실행까지 일정 시간이 소요됩니다.)
{ "name" : "2017", "cluster_name" : "elasticsearch_we", "cluster_uuid" : "FQRq-LujReWJR4ajIo-Ajg", "version" : { "number" : "7.16.3", "build_flavor" : "default", "build_type" : "tar", "build_hash" : "4e6e4eab2297e949ec994e688dad46290d018022", "build_date" : "2022-01-06T23:43:02.825887787Z", "build_snapshot" : false, "lucene_version" : "8.10.1", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }
위와같은 화면이 나오면 성공
brew services start elastic/tap/kibana-full
http://localhost:5601/app/home#/ 접속하여 실행 확인
위와같이 들어가지면 성공
https://dev.mysql.com/downloads/connector/j/
다운 받은 tar 파일 압축을 풀어 안에 있는 connector jar 파일을 적당한 곳에 옮겨 줍니다.
여기서는 그냥 기본적으로 다운받은 후 압축푼 폴더로 설정하였습니다.
경로는 아래와 같습니다.
/User/사용자명/Downloads/mysql-connector-java-8.0.27/mysql-connector-java-8.0.27.jar
homebrew를 통해 설치한 logstash의 설정파일 기본 경로는 아래와 같습니다.
/usr/local/etc/logstash
저 경로 안에 db.config 라는 파일을 만들도록 하겠습니다. 파일명은 아무거나 하시면 됩니다.
cd /usr/local/etc/logstash vi db.config
db.config 내용
input{
jdbc{
jdbc_driver_library => "/Users/계정명/Downloads/mysql-connector-java-8.0.27/mysql-connector-java-8.0.27.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://URL:PORT/DB명?serverTimezone=UTC"
jdbc_user => "계정명"
jdbc_password => "비밀번호"
jdbc_paging_enabled => true
tracking_column => "seq"
use_column_value => true
tracking_column_type => "numeric"
schedule => "*/5 * * * * *"
statement => "SELECT * FROM board WHERE seq > :sql_last_value ORDER BY seq ASC"
type => "board"
last_run_metadata_path => "/Users/계정명/logstash/.jdbc_last_run1"
} jdbc{ jdbc_driver_library => .... . . . statement => "SELECT * FROM board_comment WHERE seq > :sql_last_value ORDER BY seq ASC" type => "board_comment" last_run_metadata_path => "/Users/계정명/logstash/.jdbc_last_run2" }
}
filter{
mutate{
}
}
output{
elasticsearch{
hosts=>["localhost:9200"]
index=>"trandent-%{type}"
}
}
- jdbc_driver_library의 경우 아까 다운받은 connector 경로 입력
- connection_string, user, password는 본인 db 정보 입력
-tracking_column 마지막으로 읽어온 기준으로 사용할 컬럼 ( 여기서는 테이블의 auto increament 컬럼명이 seq로 되어 있습니다.)
- tracking_column_type : seq 컬럼 타입이 int이기 때문에 numeric으로 설정
- schedule : 크론탭 설정과 비슷하며 여기서는 5초마다 조회
- statement : elasticsearch에 적재할 쿼리를 작성하면 됩니다. 예로 든 쿼리는 게시물을 넣는 쿼리이며 :sql_last_value에는 마지막에 읽은 seq값이 저장됩니다. 정렬은 ASC로 해줍니다.
- type과 last_run_metadata_path는 테이블 여러개를 사용할때 index와 최종 seq값을 구분하기 위한 설정
- last_run_metadata_path는 본인 환경에 맞게 설정하면 되며 .jdbc_last_run1 이라고 되어있는건 실제 파일은 만들지 않아도 됩니다.
이를 설정하지 않을 경우 마지막에 읽어온 seq값이 두 쿼리에 같이 들어갑니다. 각 테이블의 최종 seq를 구분하기 위해 사용
filter : filter는 조회한 결과를 가공할 수 있는데 여기서는 다루지 않겠습니다.
output : elasticsearch 설정
로컬에 띄운 상태이므로 localhost:9200으로 호스트 설정을 해주고, index는 두개의 쿼리 결과를 구분하기 위해서 prefix 뒤에 jdbc에서 설정한 type값을 넣어주었습니다.
/usr/local/etc/logstash
위 경로를 보시면 pipelines.yml 이라는 파일이 있습니다. 편집해 줍니다.
vi pipelines.yml
들어가보면 전부 주석이 걸려 있는데
9번째 줄과 15번째줄 주석을 풀어 줍니다.
path.config의 경우 위에서 만든 db.config 파일의 경로를 넣어 주고 저장합니다.
brew services start elastic/tap/logstash-full
* jdbc-connector의 경로 설정이 잘못 되었거나 기타 설정이 잘못된 경우 정상적으로 실행되지 않을 수 있습니다.
brew로 설치한 logstash의 로그는 아래 경로에 쌓입니다.
/usr/local/var/log/logstash.log
해당 로그파일을 확인하여 문제가 없는지 확인합니다.
jdbc-connector의 권한 때문에 로드를 못하는 경우도 있습니다.
정상적으로 실행되면 아래와 같은 로그를 확인 가능합니다.
[2022-01-18T15:54:45,185][INFO ][logstash.inputs.jdbc ][test][7dec98f1b44d59afbdd08546b6d0dfc4ec1768200a983a7b37c98e0c55ddc069] (0.002766s) SELECT version()
[2022-01-18T15:54:45,188][INFO ][logstash.inputs.jdbc ][test][7dec98f1b44d59afbdd08546b6d0dfc4ec1768200a983a7b37c98e0c55ddc069] (0.002675s) SELECT version()
[2022-01-18T15:54:45,192][INFO ][logstash.inputs.jdbc ][test][7dec98f1b44d59afbdd08546b6d0dfc4ec1768200a983a7b37c98e0c55ddc069] (0.003136s) SELECT count(*) AS `count` FROM (SELECT * FROM board WHERE seq > 323367 ORDER BY seq ASC) AS `t1` LIMIT 1
[2022-01-18T15:54:45,255][INFO ][logstash.inputs.jdbc ][test][0421e3371f94d83a717d0c62a6c4cfcaa7635c944d6d34e7cb414352b85fd1e0] (0.002655s) SELECT version()
[2022-01-18T15:54:45,257][INFO ][logstash.inputs.jdbc ][test][0421e3371f94d83a717d0c62a6c4cfcaa7635c944d6d34e7cb414352b85fd1e0] (0.002457s) SELECT version()
[2022-01-18T15:54:45,261][INFO ][logstash.inputs.jdbc ][test][0421e3371f94d83a717d0c62a6c4cfcaa7635c944d6d34e7cb414352b85fd1e0] (0.002909s) SELECT count(*) AS `count` FROM (SELECT * FROM board_comment WHERE seq > 4409 ORDER BY seq ASC) AS `t1` LIMIT 1
http://localhost:5601/app/management/kibana/indexPatterns
Create index pattern 클릭
데이터가 정상적으로 수집되고 있으면 오른쪽에 index가 나오고
해당 인덱스들을 통해 패턴을 만들수 있습니다.
생성한 index pattern으로 discover 메뉴에서 데이터 확인이 가능합니다.
http://localhost:9200/index명/_search?q=*&sort=seq:desc&pretty
위와같이 api를 통해서도 적재된 데이터 확인이 가능합니다.