elk
다음으로는 elk 스택을 구성할 것이다. elk 스택의 경우 elasticsearch, logstash, kibana 각각 dockerFile을 작성하지 않고 docker-compose에서 바로 컨테이너로 올리고 이를 network로 연결하여 사용할 것이다. elk 기본 설정의 경우에는 전에 정리했던 글을 참고하길 바란다.
elk stack 설정 참고 : https://reo-l.tistory.com/126
ubuntu 18.04 에 ELK 설치하기
aws 인스턴스에서 ubuntu 18.04에 ELK를 설치하려고 한다. elk 스택은 java 기반으로 실행되기 때문에 먼저 java 8 버전을 설치하여 준다. $ sudo add-apt-repository ppa:webupd8team/java $ sudo apt-get updat..
reo-l.tistory.com
설정 시 주의할 점은 logstash나 kibana 설정에서 host를 작성할 때 localhost 나 ip 가 아닌 컨테이너 명을 적어주어야 한다는 점이다.
elasticsearch.hosts: ["http://elasticsearch:9200"]
elk 설정을 완료했다면 docker-compose.yml 파일을 작성해준다.
version: '3.3'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.8.1
command: elasticsearch-plugin install analysis-nori
volumes:
- ./ELK/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- ./ELK/elasticsearch/config/pipelines.yml:/usr/share/elasticsearch/config/pipelines.yml
- ./ELK/elasticsearch/data:/usr/share/elasticsearch/data
- ./ELK/elasticsearch/logs:/var/log/elasticsearch
ports:
- "9200:9200"
- "9300:9300"
environment:
ES_JAVA_OPTS: "-Xmx256m -Xms256m"
ELASTIC_PASSWORD: 'bolt'
networks:
- elk
logstash:
image: docker.elastic.co/logstash/logstash:7.8.1
volumes:
- ./ELK/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml
- ./ELK/logstash/config/pipelines.yml:/usr/share/logstash/config/pipelines.yml
- ./ELK/logstash/pipeline:/usr/share/logstash/pipeline
- ./ELK/logstash/postgresql-42.2.23.jar:/usr/share/logstash/postgresql-42.2.23.jar
- ./ELK/logstash/lib:/var/lib/logstash
- ./ELK/logstash/log:/var/log/logstash
ports:
- "5001:5001/tcp"
- "5001:5001/udp"
- "9600:9600"
environment:
LS_JAVA_OPTS: "-Xmx256m -Xms256m"
networks:
- elk
depends_on:
- elasticsearch
kibana:
image: docker.elastic.co/kibana/kibana:7.8.1
volumes:
- ./ELK/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml
ports:
- "5601:5601"
networks:
- elk
depends_on:
- elasticsearch
networks:
elk:
driver: bridge
ELK/elasticsearch, ELK/logstash, ELK/kibana 에 각각 설정 파일들을 넣어주고 volumes로 연결하면 컨테이너에 설정 파일이 적용된다. elasticsearch 설정을 보면 nori 필터를 사용할 예정이기에 command로 설치해주었고 environment의 경우 ES_JAVA_OPTS 설정에 heap 사이즈를 정해주는데 이때 최솟값과 최댓값을 같게 설정하기를 권장한다고 하여 256m으로 설정하였다. 필요한 경우 더 늘려도 된다. logstash와 kibana의 경우 elasticsearch가 up 한 후에 실행되어야 하기 때문에 depends_on: elasticsearch를 설정하여 준다. 마지막으로 bridge network를 설정하였는데 컨테이너 애플리케이션 통신이 필요하기에 설정하였다(networks로 연결된 elk 스택은 각 port로 열려 서로 연결되어 실행되게 된다).
이렇게 하면 elk docker-compose 설정은 끝이 났다. 이제 전에 만든 nginx + django와 elk를 연결하기만 해 주면 끝이 난다.
nginx + django + elk
version: '3.4'
services:
web:
image: nginx:latest
volumes:
- ./boltnnut_platform:/srv/docker-server
- ./conf.d:/etc/nginx/conf.d
- ./certbot/conf:/etc/nginx/ssl
- ./certbot/data:/var/www/certbot
ports:
- 80:80
- 443:443
networks:
- elk
depends_on:
- django
django:
container_name: django
build: .
image: test/django
restart: always
command: uwsgi --ini .config/uwsgi/uwsgi.ini
volumes:
- ./boltnnut_platform:/srv/docker-server
- ./log:/var/log/uwsgi
certbot:
image: certbot/certbot:latest
command: certonly --webroot --webroot-path=/var/www/certbot --email test@gmail.com --agree-tos --no-eff-email -d test.platform.com
volumes:
- ./certbot/conf:/etc/letsencrypt
- ./certbot/logs:/var/log/letsencrypt
- ./certbot/data:/var/www/certbot
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.8.1
command: elasticsearch-plugin install analysis-nori
volumes:
- ./ELK/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- ./ELK/elasticsearch/config/pipelines.yml:/usr/share/elasticsearch/config/pipelines.yml
- ./ELK/elasticsearch/data:/usr/share/elasticsearch/data
- ./ELK/elasticsearch/logs:/var/log/elasticsearch
ports:
- "9200:9200"
- "9300:9300"
environment:
ES_JAVA_OPTS: "-Xmx256m -Xms256m"
ELASTIC_PASSWORD: 'bolt'
networks:
- elk
logstash:
image: docker.elastic.co/logstash/logstash:7.8.1
volumes:
- ./ELK/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml
- ./ELK/logstash/config/pipelines.yml:/usr/share/logstash/config/pipelines.yml
- ./ELK/logstash/pipeline:/usr/share/logstash/pipeline
- ./ELK/logstash/postgresql-42.2.23.jar:/usr/share/logstash/postgresql-42.2.23.jar
- ./ELK/logstash/lib:/var/lib/logstash
- ./ELK/logstash/log:/var/log/logstash
ports:
- "5001:5001/tcp"
- "5001:5001/udp"
- "9600:9600"
environment:
LS_JAVA_OPTS: "-Xmx256m -Xms256m"
networks:
- elk
depends_on:
- elasticsearch
kibana:
image: docker.elastic.co/kibana/kibana:7.8.1
volumes:
- ./ELK/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml
ports:
- "5601:5601"
networks:
- elk
depends_on:
- elasticsearch
networks:
elk:
driver: bridge
여기서 전에 만들었던 elk의 networks를 nginx에도 연결하여 실행되도록 nginx에 networks: elk를 설정해 주고 실행해주면 이미지가 생성되고 컨테이너가 실행된다.
docker-compose up --build
'Docker' 카테고리의 다른 글
nginx(ssl) + django + elk 컨테이너(docker) 기반 서버 배포하기 -1 (0) | 2021.10.01 |
---|---|
[Docker] run시에 자주 사용하는 options (0) | 2021.05.11 |
댓글