(멋쟁이사자처럼_백엔드스쿨플러스) Day17 엘라스틱 서치
logstash
logstash 특징
- logstash는 데이터 수집, 변환, 저장, 전송을 위한 오픈소스 도구
- DB에서 주기적으로 최신화된 데이터를 받아 elsaticsearch로 전송한다.
logstash 구현하기
compose.yml 파일 수정
- docker에서 logstash image를 받아오기 위해 compose.yml 파일을 수정한다.
- docker에서 사용할 볼륨마운트를 로컬 디렉토리와 연결한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
logstash:
image: docker.elastic.co/logstash/logstash:8.3.3
container_name: logstash
environment:
- LS_JAVA_OPTS=-Xms512m -Xmx512m
volumes:
## "로컬:./logstash/pipeline, 컨테이너:/usr/share/logstash/pipeline:ro
- ./logstash/pipeline:/usr/share/logstash/pipeline:ro
## "로컬:./logstash/lib/mysql-connector-j-9.2.0.jar, 컨테이너:/usr/share/logstash/logstash-core/lib/jars/mysql-connector-j-9.2.0.jar:ro
- ./logstash/lib/mysql-connector-j-9.2.0.jar:/usr/share/logstash/logstash-core/lib/jars/mysql-connector-j-9.2.0.jar:ro
ports:
- "5001:5001"
- "5044:5044"
depends_on:
- elasticsearch
networks:
- elastic
pipeline.conf 파일 수정
- 도커 compose를 실행하면 pipeline.conf 파일을 읽어 logstash가 실행된다.
- pipeline.conf 파일을 수정하여 logstash가 실행될때 어떤 동작을 할지 설정한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
input {
jdbc {
jdbc_driver_library => "/usr/share/logstash/logstash-core/lib/jars/mysql-connector-j-9.2.0.jar"
jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://host.docker.internal:3306/es_dev" #배포환경 172.17.0.1
jdbc_user => "llddlocal"
jdbc_password => "1234"
# 실행할 SQL 쿼리
statement => "SELECT * FROM post"
# 30초 마다 실행
schedule => "*/30 * * * * *"
# SQL 로깅 관련 설정
sql_log_level => "debug" # SQL 쿼리 로깅 레벨
tracking_column => "id" # 추적할 컬럼
use_column_value => true # 컬럼 값 사용
record_last_run => true # 마지막 실행 기록
last_run_metadata_path => "/usr/share/logstash/last_run_metadata" # 메타데이터 저장 경로
}
}
filter {
mutate {
remove_field => ["@version", "jdbc_connection_string", "jdbc_user", "jdbc_password"]
}
}
output {
elasticsearch {
hosts => ["elasticsearch:9200"]
index => "app1_posts"
document_id => "%{id}" # 고유 ID 필드명을 지정
}
# 디버깅을 위한 콘솔 출력 (SQL 쿼리 포함)
stdout {
codec => rubydebug { metadata => true }
}
}
jdbc_driver_library => "/usr/share/logstash/logstash-core/lib/jars/mysql-connector-j-9.2.0.jar"
파일 경로에 JDBC 드라이버 탐색- 해당 경로는 로컬에서
./logstash/lib/mysql-connector-j-9.2.0.jar
으로 볼륨 마운트가 되어 있음 - ./logstash/lib/mysql-connector-j-9.2.0.jar 경로에 mysql-connector-j-9.2.0.jar 파일을 넣어두어야 한다.
1
curl -o ./logstash/lib/mysql-connector-j-9.2.0.jar https://repo1.maven.org/maven2/com/mysql/mysql-connector-j/9.2.0/mysql-connector-j-9.2.0.ja
참고 jar파일 인식 오류
- 파일 인식오류는 읽기/쓰기 권한으로 인해 발생한다.
- 파일을 읽을 수 없는 경우 권한을 변경해준다.
1
chmod 644 ./logstash/lib/mysql-connector-j-9.2.0.jar
logstash 구동 과정
- logstash가 실행되면 pipeline.conf 파일을 읽어 logstash가 실행된다.
- 설정된 경로에서 JDBC 드라이버를 탐색한다.
- 주어진 host.docker.internal(localhost)에 3306 포트로 user와 password를 입력하여 DB에 접속한다.
- 쿼리를 통해 데이터를 가져온다.
- 9200 포트로 elasticsearch에 접속한다.
- 가져온 데이터를 elasticsearch에 저장한다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.