Elastic 스택을 모두 받았으면 실제로 mysql과 데이터를 연동해보자
사전 점검
- Elasticsearch가 정상적으로 동작하는가?
curl -XGET ${hostIP}:9200/ or 주소창에 직접입력 http://${hostIP}:9200/
접속시 데이터가 나오면 정상 - Kibana가 정상적으로 동작하는가?
http://${hostIP}:5601
로그스태시 설정 및 시작
JAVA_HOME Path 설정
echo $JAVA_HOME
시 경로가 안나타나면 환경변수 설정 필요
경로확인
which java
/usr/bin/java
readlink -f /usr/bin/java
/usr/lib/jvm/java-11-openjdk-arm64
vi /etc/profile
가장 아래 줄에 추가 자바가 있는경로 추가. 경로는 다를 수 있으므로 확인 필요
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-arm64
저장후 환경변수 적용
source /etc/profile
echo $JAVA_HOME
Mysql JDBC 설치
- logstash는 자바 환경이라 자바 db connector가 필요합니다.
1. 루트경로 (어디든 상관은 없음.) 최신버전이 있기도하니 아래 경로 들어가서 더 최신껄 받아두 됩니다. sudo wget 'https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.18.tar.gz'
- 압축해제
sudo tar -xvf ./mysql-connector-java-8.0.18.tar.gz - jar 파일이동 (이동경로는 파악해두세요 !)
sudo mv ./mysql-connector-java-8.0.18/mysql-connector-java-8.0.18.jar ./lib/mysql-connector-java-8.0.18.jar - 남은 필요없는 파일 제거
sudo rm -rf ./mysql-connector-java-8.0.18*
logstash mysql용 conf 설정!
logstash에서 mysql을 인풋값으로 사용하기위한 logstash input plugin 설치
로그 스태시 경로에서 실행 (일반적으로 다음과 같음 '/usr/share/logstash')bin/logstash-plugin install logstash-input-jdbc
로그스태시에는 기본적으로 제공해주는 conf파일이 없어서 직접 만들어줘야 합니다.
일반적으로는 /etc/logstash/conf.d
폴더안에 만들어 줘서 사용합니다.
위 경로로 가서 sudo vi mysql.conf
로 mysql.conf를 만들어줍시다.
input {
jdbc {
// 방금 파악해둔 jdbc driver 경로
jdbc_driver_library => "/lib/mysql-connector-java-8.0.18.jar"
jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
//jdbc_driver_class 클래스 오류 나면 `com.mysql.jdbc.Driver' 요걸루 쓰세요
jdbc_connection_string => "jdbc:mysql://${HOST경로}/store10"
jdbc_user => "dbuser"
jdbc_password => "userpassword"
schedule => "*/10 * * * *" //크론탭과 동일 10초에 한번씩 실행
statement => "select p.id, p.title , p.price from product p" //쿼리문 설정
}
}
filter {
mutate {
remove_field => ["@version"]
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "product-elastic-data"
// <- select한 값의 pk id로 설정안해주면 데이터가 계속해서 입력됨
document_id => "{%id}"
//엘라스틱 유저와 패스워드가 지정되있으면 주석해제후 사용
#user => "elastic"
#password => "changeme"
}
stdout { } // 테스트를 위함.?? 궅이 없어도 됩니다.
}
/** 실행하면 엘라스틱서치의 인덱스가 자동생성되어 데이터가 입력됩니다. 쿼리문 또는 기타 오류가 있지 않는한.
* 실행하기 이전에 인덱스 매핑을 먼저 해줘야합니다.
* 엘라스틱 서치에서 인덱스 매핑은 추가는 되지만 수정 및 삭제가 불가능하기 때문에
* 재할당 하기 위해서는 reindex를 사용해야합니다. 그런 번거로움을 줄이기 위해 먼저 인덱스를 생성합니다.!
* mysql.conf 파일 안에서 설정해주는 방법이 있을 것 같은데 아직 못찾아서...
* cmd 로그스태시 설정한 conf 파일 실행문
**/
sudo /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/mysql.conf
인덱스 생성
여기서는 키바나를 이용해서 생성하겠습니다. kibana 경로 http://${host}:5601
.
메뉴 하단으로 내려가면 Dev Tools가 있는데 엘라스틱 서치 쿼리를 직접 입력할 수 있는 콘솔창이 나타납니다.
PUT /index_name (로그 스태시의 인덱스와 동일하게 설정)
{
"settings": { // 셋팅 설정
"analysis": { // 분석 설정
"analyzer": {
"autocomplete": { // autocomplete 라는 명칭 지정
"tokenizer": "autocomplete", // 데이터 토큰하는 방식 지정 tokenizer: autocomplete를 가져옴
"filter": [ // 필터 검색시 문자 소문자화
"lowercase"
]
},
"autocomplete_search": { //영어를 모두 소문자로 토큰화함.
"tokenizer": "lowercase"
}
},
"tokenizer": { // 데이터 토큰화 방식
"autocomplete": { // 방식에 대한 명칭
"type": "edge_ngram", // 토큰화 할 plugin 설정 edge_ngram은 기본 내장입니다
"min_gram": 1, // 최소 토큰값 길이 (1로 지정시 한글자 검색이 가능해짐. 정확도 낮음. 2로 지정시 한글자 검색 안됨.)
"max_gram": 20, // 최대 토큰값 길이
"token_chars": [
"letter",
"digit"
]
}
}
}
},
//데이터 인덱스 매핑하는 과정 (추가하는것은 가능하므로 토큰화할 방식이 필요한 컬럼만 직접 설정해줌)
"mappings": {
"properties": {
"title": { // 쿼리문에서 title 값만 설정
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
},
//위에서 지정한 analyzer 내용
"analyzer": "autocomplete",
"search_analyzer": "autocomplete_search"
}
}
}
}
후 실동작을 하면 생성완료 됨을 볼수 있음 !!
이제야말로 로그스태시를 킬 차례sudo /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/mysql.conf
잠시 기다리면 동작을하고 쿼리문이 실행되면서 데이터가 입력되는 것을 볼수 있다.
이러고 키바나에서
메뉴 -> 가장 하단의 Stack Management -> 왼쪽 사이드바 중상단의 index management를 확인하면 데이터와 인덱스 정보를 확인할 수 있다.
데이터 연동은 끝 !!
'BackEnd > Elastic' 카테고리의 다른 글
엘라스틱 서치 데이터 node.js 에서 사용하기 (0) | 2021.09.18 |
---|---|
AWS EC2에 엘라스틱 서치 설치하기 (apt) (3) | 2021.09.18 |
Comment