시스템을 구축하면서 만났던 이슈들을 적어보기로 했다. 물론 훨씬 많은데 개인 노션에 정리해두었던것들부터 정리해보자 컨테이너 메모리 부족 Issue : 컨테이너 배포시에 메모리 부족으로 배포가 안되는 문제 service (서비스 이름) was unable to place a task because no container instance met all of its requirements. The closest matching container-instance (컨테이너 인스턴스 아이디) has insufficient memory available. For more information, see the Troubleshooting section of the Amazon ECS Developer Guide. P..
1, 2, 3, 4편에서 인프라 구축, 로깅 / 모니터링 / 경보 시스템 구축, CI/CD 구축을 직접 해보았다면 이번 글에서는 테라폼으로 이것들을 수행할 수 있는 내용을 작성해보겠다. 원래는 인프라 구축을 AWS 내에서만 진행했기 때문에 AWS CloudFormation 으로 진행했었는데 다양한 프로바이더의 확장성을 고려하여 Terraform 으로 교체하게 되었다. 인프라 구축 terraform-aws-modules 사용하여 코드 작성 https://registry.terraform.io/namespaces/terraform-aws-modules terraform-aws-modules 이 없는 모듈은 직접 resource 와 module 만들어서 사용 Terraform Registry registry...
앞의 글에서 인프라 구축, Grafana 설정까지 완료하였으니 CI/CD 구축을 해보자 이전에는 Github Actions 를 사용했었는데 비용 문제 등으로 인해 AWS CodePipeline 으로 넘어갔다. 추후 Terraform 코드로 작성할테지만 UI 로 설정해보자 Pipeline 은 Github Actions의 Job 처럼 생성하는 사람 마음대로 구성할 수 있다. Source -> Build -> Deploy 순으로 실행되도록 파이프라인을 구성했다. 0️⃣ CodePipeline 1️⃣ Source Github 의 특정 Repository 의 branch 와 연결하는 단계이다. 해당 Repository 에 특정 branch 에 commit/push 되면 트리거가 걸려 이 Code Pipeline ..
Grafana를 Terraform 으로 프로비저닝하기 전에 UI 에서 직접 설정을 해보자 1️⃣ Data Source 2️⃣ Dashboard 로그를 전부 보여주는 Dashboard Error 로그의 count 를 보여주는 Dashboard (Alert 만들기용) 3️⃣ Alert Alert Rules Contact Points 슬랙으로 경보를 쏴주어야 하기에 Slack Contact Point 를 만들어준다. 경보를 보낼 내용의 템플릿을 생성할 수 있다. {{ define "Alert Instance Template" }} 에러 메시지 : {{ .Labels.log }} {{ end }} Notification Policies Label 을 필터링하여 contact point 를 설정한다. defaul..
프로세스 1️⃣ 이미지 준비 API Server Dockerfile 을 통해 API Server 이미지를 생성하여 ECR 에 올려서 준비하기 (추후 CI/CD 를 통해 자동화됨) Grafana 프로비저닝이 필요하다면 아키텍처에 맞는 grafana / loki 이미지를 pull 받아 프로비저닝된 이미지로 생성하여 ECR 에 올려서 준비하기 이 프로젝트에서는 기본 이미지를 사용한 후 나중에 Terraform 으로 프로비저닝 해줄 예정이기에 ECR 에 올리는거 생략하고 기본 Grafana 이미지를 준비한다. Loki 프로비저닝이 필요하여 아래의 config 파일과 Dockerfile 로 이미지 생성하여 ECR 에 올려서 준비하기 더보기 auth_enabled: false server: http_listen_p..
ECS 환경에서 구축할 시스템의 기술을 선택하는데 있어서 여러가지 선택지가 있었다. 1️⃣ AWS CloudWatch Logs AWS에서 제공하는 로그 데이터 수집 및 관리 서비스 AWS 리소스 및 애플리케이션에서 생성되는 로그 데이터를 쉽게 수집, 저장, 모니터링하고 필요한 경우 검색 가능 장점 AWS의 관리형 로깅 서비스로 무료로 제공 ECS EC2 환경과 더 쉽게 통합 가능 로그 데이터 수집, 저장, 간단한 검색 및 분석이 가능 단점 고급 로그 분석 기능이 부족할 수 있음 가격은 사용량에 따라 다르며, 로그 데이터의 용량과 보존 기간에 따라 비용이 발생 2️⃣ ELK / EFK 장점 무료로 구축 가능 (오픈소스) 데이터 시각화 및 대시보드 생성됨 단점 구축 및 운영이 복잡하여 구축 및 운영 비용 발..
Grafana, Loki를 ECS 환경에서 사용하여 모니터링, 로깅, 경보 시스템을 구축하게 된 서사를 먼저 설명한 후 기술 사용한 방법들을 적으면 좋을 것 같아서 따로 빼서 작성해보았다. 1️⃣ 배경 사내에서 진행중인 프로젝트의 수가 굉장히 많다. 동시에 돌리는 프로젝트의 개수가 약 10개정도 된다. 그중 프로덕트를 운영 & 개발하는 프로젝트의 백엔드 개발팀장으로 활동한다. 신규 피쳐 개발과 기존 피쳐 유지보수를 병행하는 것은 쉽지 않다. 개발 과정에서 우린 프리랜서 개발자들과 함께하고, 연차와 실력도 다양하다. 그들과 작업을 할 때 소통의 과정도 중요하지만 작업한 내용을 매니징 하는것도 꽤 중요하다. 개발한 내용을 리뷰하고 머지하여 배포를 하면 리뷰의 과정을 거쳤음에도 불구하고 예상치 못한 에러가 날..
정의 모든 애플리케이션과 인프라의 로그를 저장하고 쿼리하도록 설계된 로그 집계 시스템 개념 및 용어 Distributor 수집되는 로그를 받아 로그의 정확성을 검증한 후 Ingester로 넘김 Ingester 수집된 로그를 장기 저장소에 저장함 (S3 같은) 로그 스트림이 메모리에 chunks 단위로 저장된 후, 일정 기간 뒤에 장기 저장소로 옮겨짐 갑자기 Ingester가 터지면 장기 저장소에 옮겨지지 않은 데이터는 유실됨 Querier Ingetster나 장기 저장소에서 가져온 로그 쿼리 데이터를 중복 제거하여 Query-Frontend나 Grafana에 뿌려줌 LogQL 쿼리 언어를 사용하여 쿼리를 처리 하고 수집기와 장기 스토리지 모두에서 로그를 가져옴 Chunk Store 장기 저장소 Amazo..
- Total
- Today
- Yesterday
- github action
- Grafana Alert
- html
- subnet
- SG
- VPC
- ecr
- RDS
- Service
- EC2
- 리액트
- Grafana
- javascript
- Docker
- js
- LOKI
- CSS
- 서버
- AWS
- 모니터링
- 로깅
- react
- ECS
- springboot
- Hook
- ci/cd
- redux
- 인프라
- ALB
- Workflow
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |