Menu 102

분산 시스템 이해하기 - BASE 원칙, CAP, PACELC

분산 시스템 개요 데이터 엔지니어링하면 분산 시스템은 항상 나오는 주제이다. 그만큼 많은 소프트웨어에서 분산 시스템이 필요하다는 것인데, 그렇다면 분산 시스템이 필요한 이유는 무엇일까? 그것은 하드웨어 성능의 발전 속도로부터 나온다. '무어의 법칙'은 하드웨어 성능의 발전은 선형적이라는 것이다. 하지만 컴퓨터에서의 트래픽과 데이터는 기하 급수적으로 늘어났다. 이에 하드웨어를 scale-up이 아닌 scale-out 전략을 생각하게 된다. 상태를 공유하지 않으면 scale out이 쉽게 가능했지만 Database가 중요해지면서 대량의 데이터가 공유 가능해야했다. 따라서 Database를 중심으로 상태와 데이터가 공유 가능하면서 scale-out하여 많은 데이터와 트래픽이 처리 가능한 소프트웨어가 필요해졌다..

[Observability] - 5. 자신의 Application Monitoring 해보기!!

이전에는 node의 모니터링을 했다면 이번에는 자신이 만든 앱의 모니터링을 해보았다. 아래와 같은 구조로 진행해볼 예정이다. App은 Spring boot로 매우 간단하게 만들었으며, Prometheus Simple Client java로 Prometheus 형식의 메트릭을 노출한다. 여기서 Prometheus Simple Client란 Prometheus는 각 언어별로 client library를 제공한다. Prometheus 포맷으로 노출할 수 있는 설정, 각 언어별로 기본 모니터링 시스템을 이용해 메트릭 정보를 추출, custom metric을 남기는 기능 등을 할 수 있다. 한마디로 Prometheus가 알아들을 수 있도록 데이터를 남길 수 있도록 해주는 라이브러리이다. Java App 생성 우선..

[Observability] - 4. Node Monitoring 해보기!!

우선 여기서 말하는 노드란, 컴퓨터 네트워크를 구성하는 하나의 기기를 의미한다. 흔히 컴퓨터 1대가 노드가 될 수 있다. Node 정보를 가져오기 위해서는 Node Exporter가 필요하다. Node Exporter 설치하기 링크 wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz tar xvfz node_exporter-1.5.0.linux-amd64.tar.gz mv node_exporter-1.5.0.linux-amd64 node_exporter cd node_exporter/ export NODE_EXPORTER_HOME=$(pwd) echo $N..

Prometheus active:Failed 상태 해결하기

Node exporter 설치 후 prometheus에 node exporter 연결을 위해 설정을 업데이트하였다. 그리고 다시 systemctl을 멈추고 시작하려하니까 올라가지를 않았다. sudo systemctl status prometheus.service 이걸로 상태를 확인해보았다. 왜 그러니... reboot도 해보고 프로세스들도 계속 확인해보고 새롭게 작성한 코드들에 문제가 있는지도 확인해보았다. 문제가 없는것 같아서 일단 프로메테우스 동작이라도 하는 지 확인하자는 마음에 ./prometheus --config.file=prometheus.yml 이것도 동작을 안해서 에러메세지를 확인하니 yml 형식에 맞지 않는다고 한다. 그제서야.... yml 파일도 수정을 했었다는 것을 깨달았다. 다시 들..

TroubleShooting 2023.12.30

[Observability] - 3. Grafana로 대시보드 구성하고 메일로 Alert 받기

Grafana Grafana는 모니터링을 위한 대시보드 도구이다. OSS 버전은 무료이면서도 기능이 좋다. web UI 성능도 좋으며 다양한 integration과 alert 설정의 고도화 variable을 이용한 재사용성 등 장점이 많다. Grafana 설치 prometheus 설치한 서버와 같은 곳에 했지만 다른데 해도 괜찮다. wget https://dl.grafana.com/oss/release/grafana-9.3.1.linux-amd64.tar.gz tar -zxvf grafana-9.3.1.linux-amd64.tar.gz mv grafana-9.3.1 grafana cd grafana export GRAFANA_HOME=$(pwd) SMTP 설치 Alert할 때 구글 메일로 받기 위해 SM..

[Observability] - 2.Prometheus & Prometheus Push gateway 로 데이터 Polling

데이터 수집 아키텍처 위의 구조를 목표로 이번에는 Prometheus로 데이터 polling하고 Grafana로 시각화 하는 것을 목표로 하였다. Prometheus Prometheus 아키텍처이다. Prometheus Server Metric을 여러 노드에서 scraping(polling) 방식으로 수집하고 Local storage에 저장한다. Metric 대상은 static하게 설정해서 IP:Port 로 찾을 수도 있고, Sevice Discovery 도구와 연동하면 dynamic하게 대상을 찾을 수 있다. Push Gateway scrap 대상으로 지정할 수 없는 경우 직접 Push할 수 있는 기능이다. Push된 metric은 pushgateway가 보관하고 prometheus는 pushgatew..

[Observability] - 1. Observability란 & 도구

좋은 서비스를 만드는 것도 중요하지만제대로 운영하는 것도 매우 중요하다.서비스를 정상적으로 운영하기 위해서는Observability가 중요하다.Observability에 대해서 이해하기 쉽게 설명하기 위해서Tracing, Monitoring과 함께 얘기하려고 한다.Observability가 무엇일까Tracingtracing은 프로그램 실행 과정들을 상세히 남기는 것이다.옛날부터 APM(Application Performance Monitoring) 분야에서 많이 활용해왔다.하나의 서비스를 위해 많은 인프라와 app이 상호작용을 하기 때문에 Distributed tracing이 중요해지고 있다.대표적인 Distributed tracing 오픈 소스로는 Zipkin과 Jaeger가 있다.Monitoring비..

GSLB - Route53으로 여러 라우팅정책 구현해보기

GSLB란? GSLB는 Global Server Load Balancing으로 로드밸런서가 아니라 전세계 어디에서든지 빠르고 신뢰성 있는 응답을 제공하기 위한 지능적인 DNS이다. 대부분으로 글로벌 DNS 브랜드는 GSLB를 제공하고있다. 통상적으로 아래와 같은 기능들을 제공한다. Performance : 클라이언트의 요청을 네트워크상 가까운 서버로 연결할 수 있다. 트래픽을 지역에 맞게 분산해서 연결할 수 있다. Customized Content : 지역/언어별로 커스텀한 콘텐츠를 자동으로 제공할 수 있다. Disaster Recovery : 장애가 발생했을 때 다른 지역의 서버로 redirect해서 HA(고가용성) 구성이 가능하다. Maintenance : 연결 규칙이나 구성이 변경 가능해야한다. C..

AWS Route 53으로 DNS 사용해보기

이번에는 AWS의 Route53으로 DNS를 사용해보려고 한다. 아래 공식문서를 참고하였다. https://docs.aws.amazon.com/ko_kr/Route53/latest/DeveloperGuide/domain-register.html 새 도메인 등록 - Amazon Route 53 등록자 연락처는 이메일의 지시 사항에 따라 이메일을 받았다는 사실을 확인해야 합니다. 그렇지 않으면 ICANN에서 요구할 경우 도메인 이름이 일시 중지해야 합니다. 도메인이 일시 중지되면 인 docs.aws.amazon.com 1. Router53 DNS 생성하기 우선 DNS를 생성해야한다. Router53 Dashboard 또는 Registered Domain 페이지에 접속한다. Register Domain에서 원..

DNS의 원리와 과정에 대해서 알아보자

DNS 원리 우선 DNS란, 도메인 네임(hostname)을 IP 주소로 바꿔주는 시스템이다. 도메인 네임은 단순히 사람이 기억하기 쉽게 되어있기 때문에 그것만으로는 정확한 서버를 찾아갈 수 없다. 그래서 컴퓨터가 인식할 수 있는 주소인 IP 주소가 필요하다. 크게 1) Resolver 2) Root Nameserver 3) TLD Namesercer 4) authoritative Nameserver 로 나눌 수 있다. 1. DNS Resolver(Recursor) 클라이언트로부터 요청을 받는 서버이다. 이때 이미 처리한 적있어 캐시에 남아있는 주소에 대해서는 빠르게 처리한다. 2. Root Nameserver 도메인네임(hostname) 중에서 .com 등 뒤에 부분을 보고 해당 주소에 대해 알 것 같..