본문 바로가기

분류 전체보기47

[K8S] Threshold & Garbage Collect 서비스 운영 중 Node Disk 사용량이 과도하다는 알림을 받게 되었고, 모니터링 시스템을 통해 디스크 점유율 지표를 확인하였다. 디스크 사용량이 93% > 31% 로 떨어진 것을 확인하였고, 약 62G가 확보된 것을 확인하게 되었다. 과도한 디스크 정리가 발생하였다고 판단하였고, 궁금증을 해소하기 위해 노드에 접근하여 확인을 진행하였고,원인 분석을 통해 다음과 같은 예상을 할 수 있었다.큰 이미지 사이즈로 인해 디스크 사용량이 증가하고, 디스크 사용 임계를 넘어서면서 GC 동작으로 인해 디스크 정리가 이루어진 것이 아닐까?디스크 사용량이 증가한 원인으로 파악되는 이미지를 확인하였고, 무려 3.4기가의 이미지였다. jounalctl을 통해 system 서비스 로그를 확인하였고 다음과 같았다.journa.. 2025. 3. 9.
로그 모니터링 시스템 개발기 예외 및 오류에 대한 Error 레벨 로그를 stderr 와 stdout 으로 출력하면, Promtail이 이를 수집하여 Loki로 전달하고 로그를 관리합니다. 이후, 에러 로그 모니터링 기능을 통해 해당 에러를 관리하며, 알림을 발송하는 시스템이 구축하였습니다. 로그 구성이와 같은 프로세스를 수행하기 위해서는 일정한 포맷과 규칙에 맞춰 로그를 출력해야 합니다. 화면 구성을 위한 값에 해당하는 키는 아래와 같습니다.  포맷위 화면을 구성하기 위해 로그 출력 데이터 포맷은 다음 같습니다. (순서 무관)[apm_check_error]:%s;[apm_stack_trace]:%s;[apm_key]:%s;[apm_error_point]:%s;%s 는 원본 값에서 “\n” → “\t” , “\r” → ““ 으로 치.. 2025. 2. 13.
[CSAP] NGINX Header Hide 웹 서버로 nginx를 사용할 때, 기본 설정 상태에서는 응답 헤더에 nginx의 버전 정보가 포함됩니다. 이러한 정보는 악의적인 사용자에게 서버의 버전을 알리게 되어, 특정 버전에 존재하는 보안 취약점을 이용한 공격 대상으로 지정될 수 있습니다. 따라서, nginx의 버전 정보를 숨기는 것은 보안상의 권장 사항입니다.https://nginx.org/en/docs/http/ngx_http_core_module.html#server_tokens Module ngx_http_core_moduleModule ngx_http_core_module Directives Syntax: absolute_redirect on | off; Default: absolute_redirect on; Context: http, .. 2025. 1. 31.
[Locust] 대시보드 커스텀 (feat. websocket 부하테스트) AI 솔루션의 한 종류인 speech to text (stt) 의 경우 websocket을 통해 응답을 주고 받는 구조로 구성되어 있었다.대시보드가 구성되지 않는 현상이 발생하였고, 직접 구성하는 방법에 대해 공유해 보려한다. 문제 현상  • 파일 사이즈가 1mb이상 넘어가면 수신 측(stt) payload가 크다는 오류 발생 • chunk로 분류하면 utf-8 디코딩 불가하다는 오류 발생 • websocket 수신을 정의하지 않아 오류 발생 (영향은 없음) • 파일 자체를 보내 (file, stream, chunk 등) 이슈 발생 -> text로 decode하여 전송으로 해결• 오류는 잡았으나, dashboard가 나오지 않는 현상 발생 • event에 데이터를 직접 삽입하여 dashboard 구성 h.. 2025. 1. 31.
[K8S] Pod Health Check (feat. 부하테스트) Readiness ProbeAPP 구동 순간에 트래픽 실패를 막기 위한 장치Sometimes, applications are temporarily unable to serve traffic. For example, an application might need to load large data or configuration files during startup, or depend on external services after startup (K8S Document)Container 는 Running 이지만 APP 이 Running 이 아닐 수도 있다 (Booting 같은 경우)Probe Fail 시 Service 의 Endpoint 에서 제거 (사용자가 해당 Pod로 연결 X) Liveness Prob.. 2025. 1. 31.
[Rclone] 파일 동기화 시스템 구축 중앙 시스템의 데이터를 주변 시스템에서 가공하여 서비스하는 구조를 가지고 있었고, 이를 위해 파일 데이터에 대한 동기화가 필요하였다. 이를 처리하기 위해 AWS CLI 를 활용하였고, 처리 속도의 한계점을 발견하고 Rclone을 활용하여 구축했던 과정을 기술하였다.  AWS-CLI CUSTOMIZATIONs3 = max_concurrent_requests = 100 max_queue_size = 10000 multipart_threshold = 64MB multipart_chunksize = 128MB 파일 사이즈는 작으나 파일 개수가 무수히 많고, Remote 와 Local 의 비교 시간이 오래 걸렸다.AWS-CLI CUSTOMIZATION 은 Upload, Download 의 속.. 2025. 1. 31.
[Kafka] CDC 인프라 구축 (feat. ksql) kafka의 경우 cloud data streaming service를 이용하였다. Apache Kafka를 설치하고 설정하여 클러스터 형태로 제공해 주고, CMAK을 이용하여 클러스터 토픽 생성 및 변경 등 kafka 클러스터 관리 기능을 제공한다.가이드를 베이스로 커스텀하여 구성하였다.https://guide-gov.ncloud-docs.com/docs/ko/cdss-cdssoverview설정한 브로커 수량만큼 서버가 생기고 (기본 3개), 생성 된 서버는 Target Group에서 가시적으로 확인 할 수 있다. Broker ACG브로커에 접근이 가능하도록 다음과 같이 브로커 포트에 대해 ACG 허용해 주었다.아래는 적용한 ACG 목록이다.[ K8S node ] Source Connector (Deb.. 2025. 1. 18.
[Kafka] CDC 초기화 Script 개발 환경에 붙어 여러 테스트를 진행하며, connector가 kafka의 connector의 설정 정보를 포함한 connect-* topic을 읽어 올 수 없어 이슈가 자주 발생하여 문의에 대한 대응이 어려웠고 자동 초기화 기능을 구성하여 제공하였다. reset.sh> 카프카 토픽, 컨슈머 제거 스크립트#!/bin/bash$HOME/mysql-connector/stg/bin/scale.sh 0set -eNAMESPACE="infra"LABEL="app=stg-mysql-source-connector"KAFKA_BROKERS="10.105.90.26:9092,10.105.90.27:9092,10.105.90.33:9092"DATE=$(date +'%Y-%m-%d')LOG_DIR="/var/lib/jenk.. 2025. 1. 18.
[Kafka] Message size 제한 이슈 대응기 connector 요청에서 에러가 발생했습니다.{"name":"connector","connector":{"state":"RUNNING","worker_id":"ip:port"},"tasks":[{"id":0,"state":"FAILED","worker_id":"ip:port","trace":"org.apache.kafka.connect.errors.ConnectException: Unrecoverable exception from producer send callback\n\tat org.apache.kafka.connect.runtime.WorkerSourceTask.maybeThrowProducerSendException(WorkerSourceTask.java:290)\n\tat org.apache.. 2025. 1. 18.
[Gitlab] Backup, Restore 이후 500 에러 트러블 슈팅 gitlab-rake gitlab:doctor:secrets VERBOSE=1을 명령어를 통하여, secret 이 현재 secret으로 decoding 할 수 있는지 확인하여, 문제가 있는 프로젝트의 runners_token, runners_token_encrypted 을 초기화하여 해결 하였다.https://docs.gitlab.com/ee/administration/raketasks/check.html gitlab:doctor:secrets데이터베이스에 있는 모든 암호화된 값에 대하여 현재 적용 되어 있는 비밀 key( gitlab-secrets.json)를 사용하여 해당 값을 해독할 수 있는지 확인합니다 VERBOSE Gitlab container 접근# gitlab이 설치 되어 있는 서버 접속do.. 2025. 1. 13.
[VM] Linux Buffer/Cache 정리 여러 가지 방법 중 Jenkins를 통한 스케줄링을 선택하였다.캐시를 지우는 3가지 명령어가 존재한다.echo 1 > /proc/sys/vm/drop_caches는 pagecache 정리echo 2 > /proc/sys/vm/drop_caches는 dentries, inode 정리echo 3 > /proc/sys/vm/drop_caches는 dentries, inode, pagecache 정리pagecache : 파일의 입출력(I/O)의 속도와 퍼포먼스를 높이기 위해 시스템이 할당한 메모리 영역(임시 메모리 저장소). 예를 들어 어떤 경로의 파일을 한 번 읽어들이면 시스템이 해당 파일 내용을 임시메모리에 저장시키는데 이후에 해당 파일을 다시 읽을 때 이를 새로 읽어들이지 않고 이 메모리에서 바로 불러오면.. 2024. 12. 27.
[JVM] Java 메모리 관리 코드 레벨불변 객체참조 상태가 변경되지 않기 때문에, GC가 객체의 참조를 수시로 확인할 필요가 줄어듬객체 재사용 고려StreamAPI 이용 (무조건 X, 성능의 이점을 가져올 수 있는 경우에 적용 가능해 보임)Lazy Evaluation과 파이프라인 구조 덕분에 중간 연산들은 실제 데이터를 처리하지 않고, 최종 연산이 호출될 때에만 데이터를 처리I/O, 소켓, 쓰레드 등 사용 후 닫았는지 전반적인 확인 (GC가 회수 하지 못함)예시) Contents 서버 > outputstream을 사용하고 닫지 않음static 변수 검토 (StackOverflow)static 변수는 GC에 의해 회수 되지 않아 사이즈가 큰 객체를 참조가 진행되면서 메모리 누수 가능성내부 클래스 검토생명 주기를 가지거나 이벤트 리스너.. 2024. 12. 27.