지난번까지 가상 환경을 깔아서 elasticsearch를 실행해보았다!
이번 시간엔 가상 환경이 아닌 docker 환경에서 구동해보려고 한다!elasticsearch와 logstash 설치 및 설정과 mysql db의 데이터를 가져와보는 것까지의 과정을 정리해보았다 ㅎㅎ
sudo docker pull docker.elastic.co/elasticsearch/elasticsearch:7.12.1
sudo docker run -it -d --rm --network elastic -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" --name elasticsearch docker.elastic.co/elasticsearch/elasticsearch:7.12.1
curl http://{서버주소}:9200
# search
apt search openjdk-11
# install
sudo apt-get install openjdk-11-jdk
# 설치확인
java --version
# 설치된 자바 패키지 리스트 확인
update-java-alternatives -l
#/usr/lib/jvm/java-1.11.0-openjdk-amd64 이 리스트업됨.
# 환경설정하기
export JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
# 환경설정확인
echo $PATH
sudo docker pull docker.elastic.co/logstash/logstash:7.12.1
sudo docker volume create logstash
# 실행
# -d 는 컨테이너를 background에서 실행 시켜준다.
# -v 는 docker volume의 logstash를 /usr/share/logstash와 연결해준다.
sudo docker run -p 9600:9600 -d -v logstash:/usr/share/logstash --name logstash docker.elastic.co/logstash/logstash:7.12.1
/var/lib/docker/volumes/볼륨명/_data
## 위치로 이동
cd /var/lib/docker/volumes/logstash/_data
# 다운로드
sudo apt-get dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java_8.0.23-1ubuntu18.04_all.deb
# 파일 풀기
sudo dpkg -i mysql-connector-java_8.0.23-1ubuntu18.04_all.deb
# 경로 설정
usr/share/java/mysql-connector-java-8.0.23.jar
# root로 이동
sudo su
# jar 파일 복사
cv mysql-connector-java-8.0.23.jar /var/lib/docker/volumes/logstash/_data
exit
# logstash 컨테이너 접근
sudo docker exec -it logstash bash
# jar 이동
mv mysql-connector-java-8.0.23.jar ../logstash/logstash-core/lib/jars/
# 컨테이너 안으로 들어가기
# 이미 컨테이너 안이라면 할 필요 없음
sudo docker exec -it logstash bash
# 파일 생성 및 열기
vi config/logstash.yml
# 파일 작성
i
# 파일 내용 예시
http.host: "0.0.0.0"
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.hosts: [ "http://{서버 주소}:9200" ]
path.data: 'jdbc:mysql://{서버주소}:3306/churest''
# 작성 종료
Esc
# 저장하고 닫기
:wq
# 파일 열기
vi pipeline/logstash.conf
# 파일 작성
i
# 파일 내용 예시
input{
jdbc{
clean_run => true
jdbc_driver_library => "/usr/share/logstash/logstash-core/lib/jars/mysql-connector-java-8.0.23.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://k8a505.p.ssafy.io:3306/churest"
jdbc_user => "{DB id}"
jdbc_password => "{DB 비밀번호}"
jdbc_paging_enabled => true
tracking_column => "unix_ts_in_secs"
use_column_value => true
tracking_column_type => "numeric"
statement => "SELECT *, UNIX_TIMESTAMP(modified_time) AS unix_ts_in_secs FROM member WHERE (UNIX_TIMESTAMP(modified_time) > :sql_last_value AND modified_time < NOW()) ORDER BY modified_time ASC"
schedule => "/5 * * * * *"
last_run_metadata_path => "/usr/share/logstash/.logstash_jdbc_last_run"
}
}
filter {
mutate {
copy => {"member_id" => "[@metadata][member_id]"}
remove_field => ["member_id", "@version", "unix_ts_in_secs"]
}
}
output {
stdout {}
elasticsearch {
hosts => "http://{서버 주소}:9200"
index => "churest"
document_id => "%{[@metadata][member_id]}"
}
}
# 작성 종료
Esc
# 저장하고 닫기
:wq
bin/logstash -f pipeline/logstash.conf
드디어드디어디드어!!
명령어 하나하나 제대로 되는 게 없어서 애를 먹었는데 드디어 제대로 실행되기 시작한다 ㅜㅜ
너무 뿌듯함 그 잡채!!
다음엔 nori를 깔아서 reindex 해봐야겠다 ㅎㅎ
block in start_input
appears when trying to run logstash input using jdbc plugin