본문 바로가기

분류 전체보기

(24)
[kubernetes] liveness, readiness probe에 관하여(feat. period, timeout seconds) liveness는 health 체크 후에 특정 threshold에 도달하면 pod을 restart 시킨다. readiness는 health 체크 후에 특정 threshold에 도달하면 pod을 서비스에서 제외시켜버린다. 성능테스트를 하다가 hpa 동작 과정에서 latency가 급격히 증가하는 케이스가 있는데, 이것은 readiness probe 설정을 안해주었기 때문이다. period, timeout seconds 라는 옵션이 있다. 일반적인 동작 방식은 아래 표와 같다. (표 삽입) 위 표를 예시를 통해 알아보자. initialDelay: 60초 timeoutSeconds: 3초 periodSeconds: 10초 응답을 1초만에 주는 서버가 있다고 가정하자. (실패를 리턴) 1. request를 보낸다..
[Prometheus] increase 함수에 대해서 (feat. Grafana) prometheus에서 increase 함수를 이해하는 것은 중요하다. 케이스 별로 살펴보는 것이 제일 좋은데, 만약 아래 케이스에 대한 답을 모두 이해하고 있다면 완벽히 이해했다고 볼 수 있다. scrape 주기 30초, metric type = counter, metric name = test_metric_total 18시 9분 4초 1 18시 9분 34초 1 18시 10분 4초 2 18시 10분 34초 2 (18시 10분 4초 - 34초 사이에 값이 1 증가했다는 뜻) 18시 11분 4초 2 쿼리: test_metric_total{}[1m] (18시 11분 기준) 결과: 2 18시 10분 4초 2 18시 10분 34초 쿼리: test_metric_total{}[1m:1m] (18시 11분 기준) 결..
본인 소개 및 블로그 컨셉 SRE엔지니어는 특성상 많은 기술스택을 만나게되는데, 그 과정에서 구글링해도 명확하게 나오지 않은 개념들을 나만의 방식으로 정리해 둔 블로그이다. 특정 기술스택 입문자는 글을 이해하기 조금 어려울 수도 있다. (내용이 친절하지 못하고 필력이 좋지 못함) 내용 중 잘못된 부분이 있다면 언제든지 댓글로 피드백!
[Prometheus] dns_sd_config vs static config dns_sd_config와 static config 차이는 정말 단순한데, 구글링을 해보면 마음에 드는 설명이 없어서 정리한다. dns_sd_config와 static conifg의 차이를 이해하기 위해서는 먼저 service discovery에 대해 이해해야 한다. 보통 클라이언트와 서버가 있고, 클라이언트가 서버를 호출하는데 이 때 클라이언트는 서버의 ip를 반드시 알아야 한다. 따라서 보통 다른 서버를 호출해야하는 client 기능을 갖는 application의 config 파일에는 호출하는 대상 서버의 ip 리스트가 나열되어 있다. (springboot에서는 application.yaml 이라고 생각하면 됨 - 단순 예시이며, 사실 일반적인 springboot application의 경우 serv..
Golang Project Structure에 관하여 Golang의 표준 Project Structure에 관해 세부적으로 알아본다. (지속적으로 업데이트) 1. CMD folder CMD folder가 나온 이유는 go build 명령어와 깊은 연관이 있다. 먼저, go 공식 document에서는 go build를 다음과 같이 정의한다. go build 정의: compile packages and dependencies. go build [-o output] [build flags] [packages] 여기서, 우리는 packages에 주목해야 한다. package는 directory 범위를 뜻한다. CMD folder의 필요성을 이해하고자 할 때 사실 제일 방해되는 부분이 go build 명령어를 입력했을때 파일 범주로도 build가 된다는 것이다. 예..
[Docker] Dockerfile cache 및 작성 Tip Kubernetes에서 보통 컨테이너 런타임으로 Docker를 사용한다. 그 말은 즉, 이미지를 빌드 하는 영역은 Docker를 통해 진행이 되는데 이 때 사용되는 Dockerfile 작성 Tip을 알아본다. 1. Cache에 관하여 기본적으로 Docker를 사용하는 사람들이 Dockerfile 각 명령어 한 줄 마다 layer가 쌓이고 캐싱이 된다라는 것 까지만 알고 있고, Dockerfile best practice 공식 Document에 보면 정확히 어떤 기준으로 캐싱을 사용하는지 아는 것이 중요하다고 나와있음에도 불구하고 이를 잘 모르는 경우가 많다. Dockerfile 명령어 마다 캐싱을 사용하는 기준이 다른데, 핵심은 ADD와 COPY 명령어를 제외한 모든 명령어는 Dockerfile에 기재된..
[kafka] consumer 동작 원리 및 tuning configuration(logstash) kafka consumer의 동작 원리 와 tuning configuration을 logstash kafka input plugin을 통해 알아본다. 우선, kafka의 목적을 정확히 이해해야 한다. Kafka는 버퍼의 기능이 있는데, push 방식이 아닌 consumer의 역량에 맞게 데이터를 가져가는 pull 방식을 취하고 있다. 무슨 뜻이냐면, request가 kafka broker에서 시작되는게 아니고 consumer에서 시작된다는 뜻이다. 데이터를 가지고오는 request를 poll이라고 하고, 보통 for 루프 안에 이 poll을 넣어 consumer의 로직을 구현한다. 이를 수도코드로 표현하면 이해하기가 더 쉬운데, for { data := consumer.poll() // data는 배열,..
로그 수집 - Service Discovery에 관하여(filebeat autodiscovery) 보통 filebeat를 활용해서 kubernetes 클러스터에 배포된 application의 로그를 읽으려고하면 filebeat을 daemonset으로 띄우고 난 뒤 /var/log/containers에 있는 로그를 수집한다. ( 주의해야한다. filebeat에서 input을 docker 혹은 container로 해야 데이터를 수집한다. 그냥 input을 log(file인가?)로 하고 해당 경로를 하드코딩해서 넣거나 와일드카드로 넣어도 작동하지가 않는다. 그 파일이 링크로 연결되어있는 파일이기 때문인 것 같다. ) 그런데 이렇게 설정해두면 실제 운영환경에서 문제가 생긴다. 1. container는 죽었다 살았다 하면서 계속 그 유니크 값이 달라지는데, 그렇기 때문에 하드 코딩을해서 input에 넣을 수가..
APM 수집 - Service Discovery에 관하여(metricbeat autodiscovery) 모니터링 업무 중 Kubernetes 환경에서 동작하는 application의 APM을 수집하기 위해 고민했던 포인트와 해결 방법을 기록한다. 일단, VM 환경과 Kubernetes 환경이 어떻게 다른지부터 이해하고 가야한다. 사실 방금 위 문장을 읽었을때 이상하다고 느꼈다면, 어느 정도 이해도가 있다고 판단되기 때문에 이 부분은 넘어가도 될 것 같긴하다. 먼저 VM 환경에서 생각해보자. (엄밀히 말하면 오픈스택 환경이라고 표현하는 것이 맞겠다.) APM을 수집하기 위해서 prometheus에서 제공하는 라이브러리를 각 application에 import하고, /metrics라는 API를 열었다. 그 다음으로는 주기적으로 이를 scraping하는 기능이 필요한데, 사실 자체 구축하는 것도 좋긴 하지만 해..
라우팅 테이블과 네트워크 인터페이스 보호되어 있는 글입니다.