- Elastic 공식 문서로 살펴보는 docker-compose 파일2024년 12월 18일
- 31514
- 작성자
- 2024.12.18.:02
아래 웹 페이지를 참고하여 문서를 작성했습니다.
https://www.elastic.co/blog/getting-started-with-the-elastic-stack-and-docker-compose
파일 구조
기본적인 파일 구조는 위와 같지만, filebeat는 사용할 계획이 없습니다.
.env 파일
# Project namespace (defaults to the current folder name if not set) #COMPOSE_PROJECT_NAME=myproject # Password for the 'elastic' user (at least 6 characters) ELASTIC_PASSWORD=changeme # Password for the 'kibana_system' user (at least 6 characters) KIBANA_PASSWORD=changeme # Version of Elastic products STACK_VERSION=8.7.1 # Set the cluster name CLUSTER_NAME=docker-cluster # Set to 'basic' or 'trial' to automatically start the 30-day trial LICENSE=basic #LICENSE=trial # Port to expose Elasticsearch HTTP API to the host ES_PORT=9200 # Port to expose Kibana to the host KIBANA_PORT=5601 # Increase or decrease based on the available host memory (in bytes) ES_MEM_LIMIT=1073741824 KB_MEM_LIMIT=1073741824 LS_MEM_LIMIT=1073741824 # SAMPLE Predefined Key only to be used in POC environments ENCRYPTION_KEY=c34d38b3a14956121ff2170e5030b471551370178f43e5626eec58b04a30fae2
.env 파일은 docker-compose에 전달할 변수를 정의합니다. 포트, 메모리 제한, 컴포넌트 버전 등을 설정할 수 있습니다. `changeme`라고 적혀있는 부분은 데모용이기 때문에 사용자가 원하는 값으로 변경해야 합니다. 여기서 `STACK_VERSION` 환경 변수를 사용하여 docker-compose.yml 파일에 있는 각 컨테이너에 전달하여 동적으로 이미지의 버전을 지정합니다. 하지만 Elastic Stack의 경우 latest를 공식적으로 지원하지 않으므로, 버전을 하드 코딩해야 합니다. `ENCRYPTION_KEY`는 Kibana에서 데이터를 보호하기 위해 사용하는 암호화 키입니다. 안전한 암호화 키를 생성하여 사용할 것을 권장합니다.
docker-compose.yml
개요
docker-compose.yml 파일 맨 위에는 compose의 버전을 설정하고, 여러 컨테이너에서 사용될 볼륨과 기본 네트워크를 설정합니다.
Setup Container
`STACK_VERSION`이 8.0 이상이면 보안이 기본적으로 활성화되어 있습니다. 따라서 setup 컨테이너를 사용하여 인증서를 설정하고, CA가 올바르게 설정되었는지 확인해야 합니다. setup 컨테이너는 인증서 및 비밀번호 생성을 완료한 후에 자동으로 종료됩니다.
쉽게 말하면 setup 컨테이너는 ELK Stack을 위한 SSL/TLS 인증서 생성 및 초기 설정을 수행한다고 보면 되고, 그 과정은 다음과 같습니다.
- `elasticsearch-certutil` 명령어를 사용하여 SSL 인증서 및 CA(Certificate Authority) 생성
- 보안 강화를 위한 인증서와 관련 파일의 권한 설정
- Elasticsearch가 준비될 때까지 반복적으로 `curl` 명령어로 상태 확인
- kibana_system 사용자의 비밀번호 설정
- healthcheck
만약에 2개 이상의 Elasticsearch 컨테이너를 사용하려면 instances.yml에 추가 인스턴스(es02)를 아래와 같이 정의해야 합니다.
" - name: es02\n"\ " dns:\n"\ " - es02\n"\ " - localhost\n"\ " ip:\n"\ " - 127.0.0.1\n"\
Elasticsearch Container
`esdata01:/usr/share/elasticsearch/data`를 지정하여 컨테이너 외부의 볼륨에 ES 데이터를 저장합니다. 이를 통해 ES 노드의 성능을 향상시키고, 컨테이너 변경 시 데이터 손실을 막을 수 있습니다. 만약 2개 이상의 노드를 사용한다면, `discovery.type=single-node`를 변경해줘야 합니다.
Kibana Container
Elasticsearch 컨테이너가 올바르게 실행되고 있는지 확인할 때까지 시작되지 않도록 지정합니다. `environment` 섹션에서 `ELASTICSEARCH_HOSTS`의 값이 https://es01:9200로 하나만 지정되어 있습니다. 만약 2개 이상의 ES 노드를 사용한다면 쉼표(,)를 구분자로 추가하면 됩니다.
ex) https://es01:9200,https://es02:9200Logstash Container & Metricbeat Container
docker-compose 파일과 독립형 파일(metricbeat.yml 또는 logstash.conf)를 사용하여 구성된다. 바인드 마운트를 사용하기 위해 docker-compose에서 독립형 파일을 읽을 수 있도록 권한 설정이 필요합니다.
logstash.conf
기본적으로 `input` 섹션에서는 CSV 파일을 읽어들이고, 파일을 처리한 다음 로그를 저장하는 것에 대한 설정 값이 포함되어 있습니다. `filter` 섹션은 데이터 변환이나 처리 규칙을 정의할 수 있고, `output` 섹션은 처리된 데이터를 Elasticsearch로 전송하는 설정 값이 있습니다.
metricbeat.yml
Metricbeat이 시스템과 서비스의 지표를 수집할 수 있도록 하는 설정 값들이 포함되어 있습니다.
Trouble Shooting
Virtual Memory Misconfigurations
만약 다음과 같은 오류가 발생하면 `vm.max_map_count` 값이 너무 낮아서 발생하는 것이므로, 호스트의 OS에 따라 적절한 해결 방법을 구글링하면 될 거 같습니다.
`vm.max_map_count` 는 프로세스가 매핑할 수 있는 가상 메모리 영역의 최대 개수를 설정하는 값을 말합니다.metricbeat.yml 파일 접근 권한 설정
docker-compose.yml 파일을 실행하면 metricbeat.yml 파일에 접근할 수 있도록 권한을 설정해줘야 합니다.
chmod 755 metricbeat.yml
etc
- logstash에서 로그를 받아서 정제하고 elasticsearch에 저장하는 구조, kibana에서는 시각화 및 분석
- curator를 사용하여 오래된 로그 관리?
- ES의 데이터를 S3에 백업하면 좋지만, 투아이시스는 클라우드 서비스를 사용할 수 없으므로 이 부분은 추후에 고려?
'ELK' 카테고리의 다른 글
새로운 로그를 위해 Filebeat 도입하기 (0) 2024.12.20 Elasticsearch에 저장된 데이터 확인하기 (1) 2024.12.19 샘플 로그 파일 업로드하기 (0) 2024.12.19 Elastic Stack 실행하고 확인하기 (0) 2024.12.19 다음글이전글이전 글이 없습니다.댓글