콘텐츠로 이동

SRE

k6로 부하 걸어 SLO 지표 확인하기

일부러 느리게 만든 HTTP 서버에 k6 컨테이너로 부하를 걸어 응답 지연 p95, 에러율, 초당 요청 수가 어떻게 움직이는지 실측했다. 목표치를 threshold로 걸어두면 SLO 위반이 종료 코드로 떨어져 CI에서 자동으로 잡아낼 수 있다는 것까지 확인한 기록이다.

partial 인덱스 seq scan 인시던트

DB CPU가 낮은데도 태스크가 15분마다 재시작되던 장애를 wait event로 추적했다. partial 인덱스의 함정을 찾아 인덱스 하나로 해결한 실전 기록이다.

OpenTelemetry Collector로 분산 트레이싱 실습

OpenTelemetry Collector와 Jaeger를 docker compose로 세우고 코드 수정 없이 자동 계측만으로 Flask 서비스 두 개에 추적을 붙였다. 두 서비스를 거치는 요청이 traceparent 헤더로 하나의 trace에 묶이는지 실측한 기록이다.

ELK error 모음

1

증상

  • Error message
    Elastic Kibana did not load properly. Check the server output for more information
  • 인프라 구성 Kibana 접근을 위해 Nginx를 reverse proxy로 사용하는 구조

해결방법

Nginx 설정파일에서 proxy_buffer 부분을 수정합니다

  • AS-IS
    proxy_buffer_size 128k;
    proxy_buffers 4 256k; (AWS에서 제공하는 ES-Proxy용 nginx 템플릿 기본값)
    proxy_busy_buffers_size 256k;
    
  • TO-BE
    proxy_buffer_size 128k;
    proxy_buffers 8 1024k;
    proxy_busy_buffers_size 1024k;
    

ElasticSearch domain in VPC

사전정보

  • AWS에서 SaaS 형태로 제공하는 ElasticSearch(이하 ES)의 경우 domain을 VPC내부 또는 외부에 생성할 수 있다
  • 보안을 위해 VPC 내부에 생성을 권고하는데, ES domain이 private subnet에 위치하는 경우 public subnet에 Nginx를 프록시 서버로 생성하고 redirection 해주어야 한다
  • Redirection시 cognito를 이용한 사용자인증 유무에 따라 Nginx 설정이 다르다(아래 참조)

ElasticSearch 정리

Tip

변경 가능한 변수 부분은 "garden" keyword를 포함하고 있다

  1. 도큐먼트 삽입
    PUT ljw_index/_doc/1  {
        "name": "garden",
        "age": 29,
        "gender": "male"
    }
    
    도큐먼트 삽입으로 인해서 ljw_index가 신규 생성됨 -> ljw_index 인덱스 정보 확인
    GET ljw_index
    
  2. 도큐먼트 조회
    1. 도큐먼트 아이디로 조회
      GET ljw_index/_doc/1 
      
    2. DSL 쿼리를 이용한 조회 예시. match를 사용해 전문 검색하는 예시로 역인덱싱된 garden term을 검색하는 중이다.
      GET ljw_index/_search
      {
          "query": {
              "match": {
                  "name": "garden"
              }
          }
      }