001. Loki Logging Stack 구성 요소
2025. 12. 4. 10:32
O11y
Loki 개요 (Loki Overview)Loki는 Prometheus에서 영감을 받아 만들어진 수평 확장형(horizontally scalable), 고가용성(highly available), 멀티테넌트(multi-tenant) 로그 집계 시스템이다.Prometheus가 pull 기반 메트릭을 중심으로 설계된 것과 달리, Loki는 push 기반으로 로그를 수집하며 비용 효율성과 확장성을 핵심 목표로 한다. Loki는 기존 로그 시스템처럼 로그 본문(log content)을 색인하지 않는다. 대신 로그 스트림별 메타데이터(label)만 색인하고, 실제 로그 데이터는 압축된 chunk 형태로 S3/GCS 같은 오브젝트 스토리지에 저장한다. 이 구조 덕분에 인덱스가 매우 작고 운영 비용이 낮아진다. 로그 ..
쿠버네티스에서 동시성 제어와 리소스의 일관성을 보장하는 방법
2024. 1. 20. 21:28
kubernetes
resourceVersion 개념쿠버네티스는 최적화 된 Concurrency 를 달성하기 위해 resourcVersion 개념을 사용하며, 모든 쿠버네티스 리소스는 메타데이터에 resourceVersion 이라는 필드를 갖는다. 다시 말해, resourceVersion 은 클라이언트가 kubernetes 오브젝트가 변경된 시점을 확인하는 데 사용할 수 있는 내부 버전을 식별하는 문자열이다. 동작etcd 의 record 가 업데이트 될 때, 이전에 저장된 value 와 비교하여 크로스 체크를 하는데, 만약 매치되지 않은 value 일 경우 409 status code 를 반환하며, object 가 수정될 경우 API 서버에 의해 resourceVersion 이 변경된다. 만약 PUT 작업(리소스 변경 시)..
golang http 패키지
2023. 11. 27. 14:23
Golang
http.Servemux & http.HandleFunc ServeMux는 HTTP 요청 멀티플렉서이다. 여기서 멀티플렉서는 라우터, 컨트롤러랑 동일한 뜻을 갖고 있다고 보면 된다. 수신되는 각 요청의 URL 을 등록된 패턴과 비교하고, URL과 가장 일치하는 패턴의 핸들러를 호출한다. MVC 패턴의 Controller 역할이라고 보면 된다. 또한 ServeMux는 URL Request Path 와 Host Header 를 임의로 처리하는데, 포트 번호를 제거하거나 반복되는 슬래시가 포함된 요청을 동등하고 깔끔한 URL로 리다이렉션한다. 아래는 server.go 에 작성된 http 패키지 코드이다. // DefaultServeMux is the default ServeMux used by Serve. ..
Redis Eviction
2023. 11. 8. 18:34
AWS
Redis에서 데이터를 저장할 때 메모리가 부족할 경우 "eviction"이 발생할 수 있다.Eviction은 Redis가 메모리를 확보하기 위해 일부 데이터를 제거하는 프로세스를 의미하고, 일반적으로 이러한 eviction은 다음과 같은 이유로 발생할 수 있다..메모리 한계 도달: Redis는 메모리가 가득 차면 eviction 정책을 트리거하여 데이터를 삭제한다. 이때 Redis는 설정된 eviction 정책에 따라 어떤 데이터를 삭제할지 결정한다.maxmemory 설정: Redis에서는 메모리 사용량을 제한하는 maxmemory 옵션이 있고, 이 옵션을 설정하면 Redis는 설정된 한계에 도달했을 때 eviction을 수행하여 메모리 사용량을 제한한다.expire 설정: 데이터가 만료되면(설정된 T..
jvm heap memory
2023. 10. 31. 21:17
Spring Boot
jvm heap memory java -XX:InitialRAMPercentage=60.0 -XX:MaxRAMPercentage=60.0 -jar myapp.jar java heapsize 를 할당받은 메모리의 60% 로 설정 java -XX:+PrintFlagsFinal -version | grep HeapSize 리눅스에서 자바 max 힙사이즈 크기 확인 자바 애플리케이션의 최대 힙 메모리 크기를 퍼센테이지로 가져갈 때 몇 퍼센트를 가져가는 것이 좋은지 여부는 애플리케이션의 특성에 따라 다릅니다. 일반적으로 애플리케이션이 사용하는 메모리 크기의 60~70%를 최대 힙 메모리 크기로 설정하는 것이 좋다. 이렇게 하면 애플리케이션이 충분한 메모리를 사용할 수 있으면서도 메모리 부족 오류가 발생할 가능성을..
SGP(Security Group for Pod)
2023. 10. 31. 21:12
kubernetes
SGP VPC CNI 는 노드(instance)의 ENI 와 연결된 보안 그룹을 사용한다. 즉, Node 에 띄워지는 모든 Pod 들은 Node 의 보안 그룹을 사용하게 된다. 이 말은 Node 보안 그룹을 Pod 가 사용하기 때문에 불필요한 리소스에 접근을 할 수 있게 된다. 그러나 Security Group for Pods 를 사용하면 개별 Pod 에 Security Group 을 사용할 수 있게 된다. VPC CNI 에서 ENABLE_POD_ENI=true 를 설정하면 vpc cni 애드온이 각 클러스터의 노드에 vpc.amazonaws.com/has-trunk-attached=true Lable 을 추가한다. “aws-k8s-trunk-eni” 라는 trunk interface 를 생성하여 노드에..