Incident Library
  • 원인
  • 구성 요소
  • 증상
  • 기여 요인
  • 사례

사례2건

2건 중 1~2번째

  1. 증상

    OpenSearch 1.3 으로 옮긴 뒤 동작을 확인하던 중 팀은 검색 응답이 가끔 크게 늦어지는 것을 알아챘다. 평소에는 응답이 정상으로 돌아왔고, 일정한 빈도로 응답 시간이 크게 튀었다.

    촉발

    포트폴리오 기능의 검색 엔진을 Elasticsearch 6.8 에서 Amazon OpenSearch Service 의 OpenSearch 1.3 으로 옮겼다.

    원인
    구성 요소
    기여 요인
    감지

    OpenSearch 1.3 으로 옮긴 뒤 동작을 확인하던 중 팀이 검색 응답이 가끔 크게 늦어지는 것을 알아챘다. Datadog APM 에서 검색 처리의 최대 응답 시간을 옮기기 전후로 비교해 간헐적인 지연을 확인했다.

    조치
    • Refresh 빈도를 낮췄을 때의 변화를 보려고 refresh_interval 을 명시해 3s 로 설정했고, 검색 응답 시간이 튀는 일이 크게 줄었다.
    • 1s 로 명시해도 개선이 유지되는 것을 확인한 뒤 운영 환경에서도 refresh_interval 을 명시해 1s 로 설정했다.
    교훈

    OpenSearch 응답의 took 이 커져 있었으므로 더 일찍 OpenSearch 쪽으로 조사 범위를 좁힐 수 있었다고 팀은 돌아봤다. Slow Log 와 Profile API 만으로는 원인을 찾지 못했고, 어디가 느린지에서 언제 느려지는지로 관점을 바꾼 것이 개선의 계기였다. 버전에 따라 같은 설정 값이라도 동작이 다르므로 기본 동작까지 확인해야 한다고 정리했다.

  2. 증상

    2013년 1월 24일 목요일 예외 추적·모니터링 시스템이 예외가 크게 치솟은 것을 잡았다. 예외 대부분은 코드 검색 질의의 타임아웃과, 새 push 의 데이터로 코드 검색 색인을 갱신하는 백그라운드 작업의 타임아웃이었다.

    촉발

    2013년 1월 17일 코드 검색 클러스터를 elasticsearch 0.19.9 에서 0.20.2 로 업그레이드했다. 그 뒤 코드 검색을 공개하자 클러스터에 높은 부하가 걸렸고 메모리 할당이 계속 일어났다.

    원인
    구성 요소
    기여 요인
    감지

    예외 추적·모니터링 시스템이 예외가 크게 치솟은 것을 잡았다.

    조치
    • 클러스터를 완전히 멈추고, 샤드 할당과 재균형을 끄는 "maintenance mode" 로 다시 올렸다.
    • elasticsearch 를 개발하고 지원하는 회사의 엔지니어 두 명에게 도움을 청했다.
    • 두 엔지니어의 권고대로 Java 와 elasticsearch 를 곧바로 업그레이드하고 설정을 바꿨다. Puppetmaster 에 이 변경 전용 토픽 브랜치와 환경을 만들고 각 노드에서 Puppet 을 돌렸다.
    후속 조치
    • 코드 검색 클러스터의 스테이징 환경을 만들어 인프라 변경을 더 잘 시험한다.
    • elasticsearch 팀이 앞으로도 코드 검색 클러스터 설정을 다시 점검해, 쓰임새에 맞게 유지되도록 한다.
    교훈

    GitHub 는 elasticsearch 0.20.2 를 코드 검색 클러스터에 내보내기 전에 자기 인프라에서 충분히 시험하지 않았고 다른 클러스터에서도 시험하지 않았다. 코드 검색 클러스터에 제대로 된 스테이징 환경이 없던 것이 한 요인이었다. elasticsearch 팀은 큰 클러스터에 이렇게 권했다. ES_HEAP_SIZE 환경 변수로 JVM 의 최소·최대 메모리를 같게 하고 시스템 RAM 의 50% 로 둔다. recover_after_time 을 30분으로 두지 말고 복구가 바로 시작되게 한다. minimum_master_nodes 를 설정해 노드가 오래 멈출 때 노드 일부가 따로 클러스터를 이루지 않게 한다.

내 클러스터에도 있는지 확인하기

이 2건에서 가장 많이 나오는 구성 요소: Elasticsearch 와 OpenSearch, 언어 런타임 설정. kubegap 은 Claude Code 나 Codex 에서 쿠버네티스 클러스터를 읽기만 하며 이런 틈을 점검합니다. 점검 항목의 근거는 이 라이브러리와 같은 공개 보고서입니다.

원인별2