현재도 계속 공부중이라서 본인만을 위한 공부용으로 작성중인 글.
본인의 환경에서 설치 및 실행한 것이므로 파일 위치나 이름이 다를수 있습니다.
1. 설치 및 실행
1) 도커 및 도커 컴포즈 설치, 세팅
# 도커 설치
sudo yum install yum-utils device-mapper-persistent-data lvm2 -y
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo -y
sudo yum install docker-ce -y
sudo systemctl start docker
sudo systemctl enable docker
# 도커 컴포즈 설치
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# 도커를 sudo 없이 사용
sudo usermod -aG docker ${USER}
# 도커를 sudo 없이 사용하려면, putty 재시작 필수
2) 도커를 초기상태로 설정
# 컨테이너 삭제
docker rm -f $(docker ps -qa)
# 이미지 삭제
docker rmi -f $(docker images -qa)
# 안쓰는 네트워크 삭제
docker network prune -f
# 안쓰는 볼륨 삭제
docker volume prune -f
# 도커 프로젝트 삭제
sudo rm -rf /docker/projects
sudo rm -rf /docker_projects
3) 디렉토리 생성
# 디렉토리 생성
sudo mkdir -p /docker_projects/elk__1 \
/docker_projects/elk__1/elasticsearch \
/docker_projects/elk__1/elasticsearch/config \
/docker_projects/elk__1/logstash \
/docker_projects/elk__1/logstash/config \
/docker_projects/elk__1/logstash/pipeline \
/docker_projects/elk__1/logstash/drivers \
/docker_projects/elk__1/kibana \
/docker_projects/elk__1/kibana/config \
/docker_projects/elk__1/filebeat/config \
/docker_projects/elk__1/filebeat/data
# data 파일은 생성하는지 모르겠음.
4) docker-compose.yml 파일 생성
# docker-compose.yml 파일 생성
sudo vim /docker_projects/elk__1/docker-compose.yml
# docker-compose.yml 파일 내용
version: '3'
services:
elasticsearch:
restart: unless-stopped
build: ./elasticsearch
container_name: elasticsearch ## 실제로 컨테이너 이름은 elk__1_elasticsearch 로 생성된다.
volumes:
- ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro,z
- ./elasticsearch/config/dict.txt:/usr/share/elasticsearch/config/dict.txt
- ./elasticsearch/data:/usr/share/elasticsearch/data
environment:
- TZ=Asia/Seoul
- ELASTIC_PASSWORD=elasticpassword
- node.name=elasticsearch ## 이 이름에 큰 의미 없음, 왜냐하면 싱글노드로 운영할 계획이기 때문에
- bootstrap.memory_lock=true
- discovery.type=single-node ## 단일노드모드로 사용하겠다는 뜻, 엘라스틱서치는 실제로는 멀티노드로 많이 사용한다.
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
ports:
- 9200:9200 ## 엘라스틱 서치의 기본포트는 9200 이다.
kibana:
restart: unless-stopped
build: ./kibana
container_name: kibana
environment:
- TZ=Asia/Seoul
volumes:
- ./kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml:ro,z
ports:
- "5601:5601" ## 키바나의 기본포트는 5601 이다.
depends_on:
- elasticsearch
logstash:
restart: unless-stopped
build: ./logstash
container_name: logstash
volumes:
- ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml:ro,z
- ./logstash/pipeline:/usr/share/logstash/pipeline:ro,z
- ./logstash/drivers/:/opt/logstash/vendor/jar/jdbc/
environment:
- TZ=Asia/Seoul
- "LS_JAVA_OPTS=-Xmx256m -Xms256m"
depends_on:
- elasticsearch
filebeat:
restart: unless-stopped
build: ./filebeat
container_name: filebeat
volumes:
- ./filebeat/config/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro,z
- ./filebeat/data:/usr/share/filebeat/data
- /var/log:/logs/host/
depends_on:
- elasticsearch
5) 엘라스틱 환경설정파일 생성 (elasticsearch.yml)
# 엘라스틱 환경설정파일 생성
sudo vim /docker_projects/elk__1/elasticsearch/config/elasticsearch.yml
cluster.name: "docker-cluster" ## 이 이름에 큰 의미 없음, 왜냐하면 싱글클러스터로 운영할 계획이기 때문에
network.host: 0.0.0.0 ## 외부에서 접근가능
# X-Pack 세팅, 보안설정
## 자세한 내용은 https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-xpack.html
xpack.license.self_generated.type: trial
xpack.security.enabled: true
xpack.monitoring.collection.enabled: true
7) 엘라스틱 신조어 사전 등록
# 엘라스틱 신조어 사전 등록 (쇼핑몰 기준임)
sudo vim /docker_projects/elk__1/elasticsearch/config/dict.txt
# 내용
인스타여신 인스타 여신
인스타
여신
셀럽
아이돌
코트
블라우스
숏스커트 숏 스커트
숏
롱스커트 롱 스커트
스커트
청치마 청 치마
청자켓 청 자켓
백
소녀시대
태왕사신기
드라마
권유리
김세희
유리
니트
완판
레드벨벳 레드 벨벳
8) 엘라스틱서치 도커파일 생성
# 엘라스틱서치 도커파일
sudo vim /docker_projects/elk__1/elasticsearch/Dockerfile
FROM elasticsearch:7.16.3
RUN bin/elasticsearch-plugin install --batch analysis-nori ## 한글 형태소 분석기
9) 키바나 환경설정파일 생성 (kibana.yml)
# 키바나 환경설정파일 생성
sudo vim /docker_projects/elk__1/kibana/config/kibana.yml
server.name: kibana
server.host: 0.0.0.0
elasticsearch.hosts: ["http://elasticsearch:9200"]
monitoring.ui.container.elasticsearch.enabled: true
## 엘라스틱 아이디와 비번을 키바나에게 알려주기
elasticsearch.username: elastic
elasticsearch.password: elasticpassword
10) 키바나 도커파일 생성
# 키바나 도커파일
sudo vim /docker_projects/elk__1/kibana/Dockerfile
FROM kibana:7.16.3
11) 로그스태시 환경설정파일 생성 (logstash.yml)
# 로그스태시 환경설정파일 생성
sudo vim /docker_projects/elk__1/logstash/config/logstash.yml
# logstash.yml
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: ["http://elasticsearch:9200"]
## 엘라스틱 아이디와 비번을 로그스태시에게 알려주기
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.username: elastic
xpack.monitoring.elasticsearch.password: elasticpassword
## conf 변경시 재시작안해도 반영됨
config.reload.automatic: true
12) 로그스태시 도커파일 생성
# 로그스태시 도커파일 생성
sudo vim /docker_projects/elk__1/logstash/Dockerfile
FROM logstash:7.16.3
13) 로그스태시랑 연동할 DB 생성
# matiadb
docker run \
--name mariadb__1 \
-d \
--restart unless-stopped \
-e MARIADB_ROOT_PASSWORD=1234 \
-e TZ=Asia/Seoul \
-p 3306:3306 \
-v /docker_projects/mariadb__1/conf.d:/etc/mysql/conf.d \
-v /docker_projects/mariadb__1/mysql:/var/lib/mysql \
-v /docker_projects/mariadb__1/run/mysqld:/run/mysqld/ \
mariadb:latest
# mariadb__1 컨테이너 안에서 ls 명령을 실행
docker exec mariadb__1 ls
# mariadb__1 컨테이너 안에서 mysql -u root -p 명령을 실행
# 복잡한 명령언 -it 옵션을 붙어야 한다.
docker exec -it mariadb__1 mysql -u root -p
# postgresql
docker run --name postgres__1 -d --restart unless-stopped \
-p 5432:5432 -e POSTGRES_PASSWORD=1234 \
-v ${PWD}/data:/var/lib/postgresql/data postgres:latest
docker run -p 5432:5432 --name postgres -e POSTGRES_PASSWORD=password -d postgres
14) 로그스태시 환경설정파일 (DB와의 연동) 생성
# 로그스태시 환경설정파일(DB와의 연동) 생성
sudo vim /docker_projects/elk__1/logstash/pipeline/logstash.conf
# logstash.conf => postgresql version
input {
jdbc {
jdbc_driver_library => "/opt/logstash/vendor/jar/jdbc/postgresql-42.3.5.jar"
jdbc_driver_class => "org.postgresql.Driver"
jdbc_connection_string => "jdbc:postgresql://172.17.0.1:5432/post"
jdbc_validate_connection => true
jdbc_user => "postgres"
jdbc_password => "password"
jdbc_validate_connection => true
last_run_metadata_path => "/usr/share/logstash/.logstash_jdbc_last_run_1"
schedule => "* * * * *"
statement => "SELECT * from article"
type => "elk_test"
}
}
output {
elasticsearch {
hosts => [ "elasticsearch:9200" ]
user => "elastic"
password => "elasticpassword"
index => "elk"
document_id => "%{id}"
}
}
# mariaadb version
input {
jdbc {
jdbc_driver_library => "/opt/logstash/vendor/jar/jdbc/mysql-connector-java-5.1.48.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://34.64.142.109:3306/elk"
jdbc_user => "dltmdals1620"
jdbc_password => "1234"
jdbc_paging_enabled => true
tracking_column => "unix_ts_in_secs_1"
use_column_value => true
tracking_column_type => "numeric"
last_run_metadata_path => "/usr/share/logstash/.logstash_jdbc_last_run_1"
schedule => "* * * * *"
jdbc_validate_connection => true
statement => "SELECT P.*, UNIX_TIMESTAMP(P.update_date) AS unix_ts_in_secs_1 FROM products_product AS P WHERE P.update_date > FROM_UNIXTIME(:sql_last_value) ORDER BY P.update_date ASC"
type => "elk___products_product_type_1___v1"
}
output {
elasticsearch {
hosts => "elasticsearch:9200"
user => "elastic"
password => "elasticpassword"
index => "elk___products_product_type_1___v1"
document_id => "%{id}"
}
}
15) jdbc_driver 다운로드
# mariadb
# mysql-connector-java 파일 다운로드
sudo wget https://github.com/audgks5551/elk_2021_12_27/raw/master/drivers/mysql-connector-java-5.1.48.jar -O /docker_projects/elk__1/logstash/drivers/mysql-connector-java-5.1.48.jar
# postgresql
sudo wget https://github.com/SMin1620/jdbc_driver/blob/main/postgresql-42.2.12.jar -O /docker_projects/elk__1/logstash/drivers/postgresql-42.2.12.jar
# postgresql other version
sudo wget https://github.com/SMin1620/jdbc_driver/blob/main/postgresql-42.2.24.jar -O /docker_projects/elk__1/logstash/drivers/postgresql-42.2.24.jar
sudo wget https://github.com/SMin1620/jdbc_driver/blob/main/postgresql-9.4.1208.jre7.jar /docker_projects/elk__1/logstash/drivers/postgresql-9.4.1208.jre7.jar
16) 비츠 도커파일 생성
FROM docker.elastic.co/beats/filebeat:7.16.3
17) filebeat.yml 파일 생성
sudo vim /docker_projects/elk__1/filebeat/config/filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /logs/host/messages*
setup.kibana:
host: "34.64.223.224:5601"
protocol: "http"
setup.dashboards.enabled: true
output.elasticsearch:
hosts: ["http://elasticsearch:9200"]
username: "elastic"
password: "elasticpassword"
'데이터베이스 > ELK' 카테고리의 다른 글
[Elasticsearch] 다른 서버에서 클러스터 구성 (노드 연동) with. docker-compose (0) | 2022.08.18 |
---|---|
[ElasticSearch] 엘라스틱서치의 내부 구조 및 cluster, index, replica, shard (0) | 2022.08.12 |
[ElasticSearch] 인덱스 수명 주기 관리 (Hot, Warm, Cold) (0) | 2022.08.11 |
[ELK] ELK의 REST API이해 (0) | 2022.05.21 |
[ELK] ELK Stack 이해하기 (0) | 2022.05.12 |