🐳
Engineering Wiki
  • 🖐️Welcome
  • 📚백엔드 로드맵
    • 메인페이지
  • Spring
    • spring boot
      • security
        • security 기본
        • filter
        • JWT
      • 스프링 핵심 원리
        • 객체지향 설계와 스프링
        • 스프링IoC컨테이너와 bean
      • IntelliJ
        • Spring boot 생성 및 git clone
        • Spring boot 프로젝트 생성
      • vscode
        • Spring boot 프로젝트 생성
      • scheduling
        • 스케쥴링 설정시 에러 상황
      • paging
      • 에러 핸들링
        • ErrorCode생성 및 ExceptionHandler로 에러처리
        • Security & JWT 에러처리
        • spring cloud sleuth
      • 로그 핸들링
        • logback
        • HttpRequestServlet 래핑
      • gradle
        • hidetake.ssh 키파일 설정
      • maven
        • maven tomcat
      • lib
        • lombok
        • tiles
      • API 부하테스트 툴 K6
      • JPA
        • Mybatis / JPA 차이
      • Mybatis
    • spring batch
      • batch
        • Spring Batch 기본개념
  • FRONT
    • vue
      • Spring boot & Vue.js 설치 및 연동
      • Spring boot & Vue.js 웹개발 세팅
      • vue의 기본구조 실행순서
      • SPA 이해
  • JAVA
    • 환경설정
    • 자바의 정석
      • generics
  • DATABASE
    • mongoDB
      • 정규표현식을 사용해 대소문자 구분없이 검색
      • mongoDB export import
      • MAC 설치 및 실행
    • MYSQL
      • dbeaver 데이터 내보내기 불러오기
      • [에러] 스프링 mysql 8 연결 에러
      • MAC M1 mysql 설치
      • GROUP BY 정리
      • 테이블 명세서 빠르게 생성
  • AWS
    • IAM
    • 설치&명령어
      • eb 설치 & 명령어
      • CLI 설치 & 명령어
    • sam
      • SAM 개념
      • SAM Lambda S3이벤트 트리거, MongoDB 접근코드
      • SAM intellij 배포
    • peering
      • mongodb atlas AWS vpc peering
      • MongoDB & Lambda VPC peering ,endpoint설정
    • 쉘스크립트
      • 도커 컨테이너 중단시 슬랙 리포팅 및 재실행
  • DOCKER
    • 설치&명령어
      • Docker 기초
      • Docker Container 유용한 명령어
    • MAC관련 문제
      • 이미지 빌드 관련 문제상황
      • MAC M1 도커 실행 원리
      • [에러] docker: Error response from daemon: Mounts denied:
  • ELK
    • 세팅
      • 로드벨런서에 logstash 세팅
      • Elastic Beanstalk + Elastic Cloud + docker 설정
      • ElasticCloud + filebeat + logstash + docker 설정 (버전8.5.0)
      • ELK 적용 사례, 로그수집(filebeat/logstash) 설명
    • logstash
      • Logstash는 로그를 왜 message라는 field로 저장할까?
      • logstash health check
    • filebeat
      • filebeat 아키텍쳐
  • unity
    • 유니티 기본
      • 캐릭터 이동
      • 카메라
  • WORDPRESS
    • 워드프레스 기본
  • git
    • GIT 개념
      • 라이프사이클
    • 명령어
      • defult 브랜치 main 으로 변경
      • 첫번째 커밋 삭제(브런치삭제) 후 원격저장소에 강제 push
      • git 원격저장소에 remote 방법(vscode로 진행)
      • git gh
      • git reset
      • git rebase
  • MAC
    • 개발 환경세팅
      • 맥 초기 개발세팅
    • 유용한내용
      • app store 다운로드 없이 웹에서 Xcode 다운
      • ubuntu iso 설치 usb 만들기
      • 응용프로그램 에러
      • 잠김 파일
  • CS
    • data structure & algorism
      • 자료구조의 정의 및 종류
  • 방통대
    • 대학수학의 이해
      • 1강. 수학의 기초(1)
    • 딥러닝
      • 1강.신경망의 개요
  • NODE
    • 개발기록
      • 인스타그램 API 활용하여 게시물 슬랙에 리포팅
Powered by GitBook
On this page
  • 단일 컨테이너 배포
  • 다중 컨테이너 배포
  • logstash 배포
  1. ELK
  2. 세팅

Elastic Beanstalk + Elastic Cloud + docker 설정

Previous로드벨런서에 logstash 세팅NextElasticCloud + filebeat + logstash + docker 설정 (버전8.5.0)

Last updated 9 months ago

단일 컨테이너 배포

  • Dockerfile 의 이미지를 ECR 에 올리고 Dockerrun.aws.json 을 Beanstalk 에 배포하면 ECR의 이미지를 가져와 컨테이너로 실행하는 플로우

  • ECR

    • 도커 허브의 레파지토리와 같은 기능을 함

    • IAM인증을 통해 간편하게 이미지를 push/pull할 권한관리를 해줌

    • 이후에 젠킨스를 적용할때도 잘 쓰임

  1. beanstalk 환경 및 애플리케이션 생성

플랫폼을 도커로 설정

  1. ECR 에서 레파지토리 생성 & IAM권한 주기

Amazon Elastic Container Registry (ECS) 에 리포지토리 생성, 이름만 설정해주면됨

그후에 “푸시명령보기”를 보면 cli로 이미지를 푸시할 수 있는 방법이 나와있음

AWS CLI 설정하고 IAM권한주고 이미지 올려주면됨

brew install awscli
aws configure
//위명령어를 실행하면 Access Key, Secret Access Key 를 입력할수있음
  • IAM 권한

    • 사용자 권한 추가

    사용자에 ‘권한추가’로 들어가서 ‘기존정책직접연결’ 누르고 AmazonEC2ContainerRegistryFullAccess 연결해주면됨

    • Beanstalk 에 연결된 IAM 인스턴스 프로파일: aws-elasticbeanstalk-ec2-role 에도 권한추가해줘야함

    역할의 aws-elasticbeanstalk-ec2-role 에 AmazonEC2ContainerRegistryReadOnly로 권한 연결해주면됨

  1. 배포

Dockerrun.aws.json 파일 작성후 이파일을 배포

{
  "AWSEBDockerrunVersion": "1",
  "Image": {
    "Name": "ECR 이미지 URI"
  },
  "Ports": [
    {
      "ContainerPort": 3000
    }
  ]
}

다중 컨테이너 배포

  • 다중 컨테이너로 구성하는 이유

    • spring boot 와 filebeat는 각각 컨테이너로 관리해주고 volume으로 로그를 관리 해줘야 jar를 배포한 컨테이너가 죽어도 로그가 사라지지 않고 filebeat도 따로 컨테이너로 돌아가야 영향받지 않음

  • volume 컨테이너로 로그관리

  1. beanstalk 환경 및 애플리케이션 생성 (공통)

  2. beanstalk 세팅 변경

    1. 프록시 서버 없음으로 설정, 환경속성 설정

    2. 보안 키페어 설정

    3. ECR 에서 레파지토리 생성 & IAM권한 주기 (공통)

    4. docker-compose.yml 파일 생성, 이미지 업로드 및 배포

파일

filebeat

Dockerfile

FROM docker.elastic.co/beats/filebeat:8.5.0
COPY filebeat.yml /usr/share/filebeat/filebeat.yml
  • 이미지 생성후 ECR에 업로드

filebeat.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /logs/*.log

output.logstash:
  hosts: ["logstashIP:5044"]
  • paths → filebeat컨테이너 내의 수집할 파일경로

olobo-server

Dockerfile

FROM amazoncorretto:17
COPY target/OLOBO-1.0-SNAPSHOT.jar olobo.jar
  • jar파일 빌드 및 이미지 생성후 ECR에 업로드

docker-compose.yml

version: "3.9"
services:
  filebeat:
    image: ECR 이미지 URI
    volumes: 
      - app:/logs
  app:
    image: ECR 이미지 URI
    volumes: 
      - app:/logs
    ports:
      - "80:8080"
    environment:
      - AWS_ACCESS_KEY_ID=
      - AWS_SECRET_ACCESS_KEY=
      - AWS_DEFAULT_REGION=
      - AWS_REGION=
    depends_on:
      - filebeat
    restart: always
volumes:
  app:

<aside> 💡 volumes의 경로가 중요함, 인스턴스 유형이 변경됨에 따라 app의 logs파일 경로가 /logs or /usr/local/logs 로 달랐음. 로그수집 안되면 eb ssh 로 직접 접속해서 volume 경로 확인하기

</aside>

logstash 배포

  1. beanstalk 환경 및 애플리케이션 생성 (공통)

  2. beanstalk 세팅 변경

    1. 프록시 서버 없음으로 설정

    2. 인스턴스 유형 t4g.medium으로 설정 (너무 낮으면 logstash 실행안됨)

  3. ECR 에서 레파지토리 생성 (공통)

  4. logstash 파이프라인 생성

  • elatic cloud의 키바나에서 pipeline1으로 logstash 파이프라인을 생성

  1. docker-compose.yml 파일 생성, 이미지 업로드 및 배포

파일

logstash.yml

xpack.management.enabled: true
xpack.management.pipeline.id: ["pipeline1"] # ID of your pipeline
xpack.management.elasticsearch.cloud_id: CLOUDID
xpack.management.elasticsearch.cloud_auth: ID:PW

# HTTP API Settings
http.enabled: true
http.host: 0.0.0.0
http.port: 9600
  • elatic cloud의 키바나에서 pipeline1으로 logstash 파이프라인을 생성하고 연결

Dockerfile

FROM docker.elastic.co/logstash/logstash:8.5.0
RUN rm -f /usr/share/logstash/pipeline/logstash.conf
COPY config/logstash.yml /usr/share/logstash/config/logstash.yml

docker-compose.yml

version: "3.9"
services:
  logstash: 
    image: ECR 이미지 URI
    ports:
      - "9600:9600"
      - "5044:5044"
    restart: always

Aws cli 다운 (MAC기준)

volume 컨테이너 생성하여 호스트os에도 저장, jar 와 filebeat 컨테이너 사이 로그폴더 공유가능함

https://devlos.tistory.com/37
https://binux.tistory.com/59
https://devlog-wjdrbs96.tistory.com/324
https://medium.com/devops-with-valentine/how-to-deploy-a-docker-container-to-aws-elastic-beanstalk-using-aws-cli-87ccef0d5189
https://cloudinfrastructureservices.co.uk/dockerfile-vs-docker-compose-whats-the-difference/
https://medium.com/@lyzkevin2020/how-to-build-a-log-collection-system-for-springboot-projects-in-kubernetes-3f4c3e09dd6b
https://joont92.github.io/docker/volume-container-추가하기/
https://bluese05.tistory.com/51