0. 개요
ELK란 Elsaticsearch + Logstash + Kibana를 통합해서 부르는 말입니다.
이 글에서는 ELK, Mysql, Kafka를 구축해서 연동할 것입니다.
프로젝트 구조도는 아래와 같습니다.
아래는 ELK를 구축하기 위한 프로젝트 구조입니다.
ES-springBoot:.
└─es
├─docker-compose.yml
│
├─elasticsearch
│ │ Dockerfile
│ │
│ ├─config
│ │ elasticsearch.yml
│ │
│ └─settings
│ ├─stop
│ │ english.txt
│ │
│ └─synonym
│ english.txt
│
├─kibana
│ │ Dockerfile
│ │
│ └─config
│ kibana.yml
│
└─logstash
│ Dockerfile
│ mysql-connector-j-8.0.33.jar
│
├─config
│ logstash.yml
│ pipelines.yml
│
└─pipeline
logstash.conf
1. Elasticsearch
ES-springBoot:.
└─es
...
└─elasticsearch
│ Dockerfile
│
├─config
│ elasticsearch.yml
│
└─settings
├─stop
│ english.txt
│
└─synonym
english.txt
1.1 Dockerfile
ARG ELK_VERSION
FROM docker.elastic.co/elasticsearch/elasticsearch:${ELK_VERSION}
COPY ./settings ./config/settings
RUN elasticsearch-plugin install analysis-nori
1.2 elasticsearch.yml
cluster.name: "ksb-cluster"
network.host: 0.0.0.0
1.3 stop/english.txt
the, a
1.4 synonym/english.txt
good, well
hello, hi
2. Logstash
ES-springBoot:.
└─es
...
└─logstash
│ Dockerfile
│ mysql-connector-j-8.0.33.jar
│
├─config
│ logstash.yml
│ pipelines.yml
│
└─pipeline
logstash.conf
2.1 Dockerfile
ARG ELK_VERSION
FROM docker.elastic.co/logstash/logstash:${ELK_VERSION}
2.2 config/logstash.yml
http.host: "0.0.0.0"
2.3 config/piplines.yml
- pipeline.id: ksb_logstash
path.config: "/usr/share/logstash/pipeline/logstash.conf"
2.4 pipeline/logstash.conf
input {
http {
port => 9900
tags => [ "web" ]
}
jdbc {
jdbc_validate_connection => true
jdbc_driver_library => "/usr/share/logstash/logstash-core/lib/jars/mysql-connector-j-8.0.33.jar"
jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://host.docker.internal:3306/es_connect_db?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true"
jdbc_user => "root"
jdbc_password => "1234"
schedule => "*/5 * * * *"
statement => "select * from loging" # loging이라는 테이블이 만들어져있어야 함
tags => [ "mysql" ]
}
kafka {
bootstrap_servers => "host.docker.internal:29092, host.docker.internal:29093, host.docker.internal:29094"
topics => [ "ksb-es-kafka" ] # 카프카는 점(.)과 언더바(_) 불가능
group_id => "ksb-group"
tags => [ "kafka" ]
# consumer_threads => 3
# auto_offset_reset => "latest"
}
}
filter {
if "mysql" in [tags]{
mutate {
add_field => {
"doc_id" => "%{id}%{name}"
}
}
}
}
output {
if "mysql" in [tags]{
elasticsearch {
index => "ksb-mysql-logs-%{+yyyy.MM.dd}"
document_id => "%{doc_id}" # 데이터 중복 제거를 위함
hosts => [ "host.docker.internal:9200" ]
}
}
if "kafka" in [tags]{
elasticsearch {
index => "ksb-kafka-logs-%{+yyyy.MM.dd}"
hosts => [ "host.docker.internal:9200" ]
}
}
}
💡 Mysql 사용자의 정보를 jdbc_user와 jdbc_password에 넣어야 합니다.
3. Kibana
ES-springBoot:.
└─es
...
└─kibana
│ Dockerfile
│
└─config
kibana.yml
3.1 Dockerfile
ARG ELK_VERSION
FROM docker.elastic.co/kibana/kibana:${ELK_VERSION}
3.2 config/kibana.yml
server.name: ksb_kibana
server.host: 0.0.0.0
elasticsearch.hosts: ["<http://host.docker.internal:9200>"]
monitoring.ui.container.elasticsearch.enabled: true
4. Mysql
아래 링크로Mysql 버전 8.0.33을 로컬에 다운받습니다.
MySQL :: Download MySQL Installer
MySQL :: Download MySQL Installer
Select Operating System: Select Operating System… Microsoft Windows Select OS Version: All Windows (x86, 32-bit) Windows (x86, 32-bit), MSI Installer 8.0.33 2.4M (mysql-installer-web-community-8.0.33.0.msi) MD5: 2a330cf24915964cca87e04dbb34e5d3 | Signatu
dev.mysql.com
위의 엘라스틱과 Docker-Compose로 묶어서 실행하지 않은 이유는,
보통 DB의 서버와 엘라스틱 서버와 다른 위치에 있기 때문입니다.
Mysql을 설치하고 아래의 명령어로 DB, Table을 만들고 데이터를 삽입합니다.
create database es_connect_db default CHARACTER SET UTF8;
use es_connect_db;
CREATE TABLE loging (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(20),
log VARCHAR(20),
PRIMARY KEY(id)
);
insert into loging(name, log) values ('ksb', '1번 데이터');
insert into loging(name, log) values ('kkk', '2번 데이터');
insert into loging(name, log) values ('ksb', '3번 데이터');
-- 원하는 데이터를 추가하면 됩니다.
use es_connect_db;
select * from loging;
💡 저의 경우 Id는 root, Password는 1234의 사용자가 이미 생성되어 있습니다. [2.4 참고]
5. Kafka
카프카에 관련된 설명은 이미 제 블로그에 정리해 놨으니 필요하신 분은 아래 링크를 통해 봐주시면 감사하겠습니다.
'카프카' 카테고리의 글 목록
ksb-dev.tistory.com
카프카를 실행하는 Docker-Compose 파일은 아래 있으니 아래 링크에 들어가셔서 확인하시기 바랍니다.
카프카 클러스터 docker compose로 구축하기
1. 왜 docker compose를 사용하는가? docker compose는 여러 개의 컨테이너가 동시에 동작할 때 필요합니다. 위 그림과 같이 카프카 클러스터를 구축할 때 보통 한 개의 주키퍼, 세 개의 카프카 브로커가
ksb-dev.tistory.com
6. 영상
위의 연동이 끝나고 동작 과정을 영상으로 만들었습니다.
관심있는 분은 영상을 봐보시길 바랍니다.
Elasticsearch, Mysql, Kafka 연동
7. 프로젝트 주소
https://github.com/kang-seongbeom/ES-SpringBoot
GitHub - kang-seongbeom/ES-SpringBoot
Contribute to kang-seongbeom/ES-SpringBoot development by creating an account on GitHub.
github.com
'엘라스틱 서치' 카테고리의 다른 글
뉴스 데이터를 위한 엘라스틱 서치 쿼리 모음 (0) | 2024.05.26 |
---|---|
스프링부트로 엘라스틱서치 쿼리 날리기 (0) | 2023.06.09 |
스프링부트 테스트와 엘라스틱서치 테스트 컨테이너 (0) | 2023.05.27 |
엘라스틱서치 검색 Query DSL (0) | 2023.05.18 |
엘라스틱서치 데이터 삽입, 조회, 수정, 삭제, _bulk API (0) | 2023.05.03 |