서비스 모니터링 개념

서비스 모니터링과 Service Monitoring API를 사용하면 Google이 자체의 고유 서비스를 관리하는 것과 같은 방식으로 사용자가 자신의 서비스를 관리할 수 있습니다. 서비스 모니터링의 핵심 개념은 다음과 같습니다.

  • 서비스 수준 지표(SLI) 역할을 하는 측정항목 선택
  • SLI를 사용하여 SLI 값의 서비스 수준 목표(SLO) 설정
  • SLO에 내포된 오류 예산을 사용하여 서비스 위험 완화

이 페이지에서는 이러한 개념을 소개하고 SLO를 설계할 때 고려해야 할 사항을 설명합니다. 이 섹션의 다른 페이지에서는 이러한 개념을 토대로 실습합니다.

용어

서비스 모니터링에는 여기에 소개된 여러 핵심 개념 집합이 포함됩니다.

  • 서비스 수준 지표(SLI): 성능 측정
  • 서비스 수준 목표(SLO): 원하는 성능에 대한 설명
  • 오류 예산: 실제 성능과 원하는 성능 사이의 차이 측정

서비스 수준 지표

Cloud Monitoring은 서비스 인프라의 성능을 측정하는 측정항목을 수집합니다. 성능 측정항목의 예시는 다음과 같습니다.

  • 요청 수: 2xx 또는 5xx 응답으로 이어지는 분당 HTTP 요청 수
  • 응답 지연 시간: HTTP 2xx 응답의 지연 시간

성능 측정항목은 App Engine, Istio on Google Kubernetes Engine, Cloud Endpoints와 같은 알려진 서비스 유형 모음에 따라 자동으로 식별됩니다. 또한 자체 서비스 유형을 정의하고 서비스 유형에 대한 성능 측정항목을 선택할 수도 있습니다.

성능 측정항목은 서비스의 기본 SLI입니다. SLI는 일부 기준에 따라 서비스 성능을 기술합니다. App Engine, Istio on Google Kubernetes Engine, Cloud Endpoints 서비스의 경우 이미 유용한 SLI가 알려져 있습니다. 예를 들어 서비스에 요청 수 또는 응답 지연 시간 측정항목이 포함된 경우에는, 다음과 같이 비율을 만들어서 표준 서비스 수준 지표(SLI)를 해당 측정항목에서 파생할 수 있습니다.

  • 가용성 SLI는 전체 응답 수 중에 대해 성공한 응답 수의 비율입니다.
  • 지연 시간 SLI는 모든 호출 수에서 지연 시간 기준 미만인 호출 수의 비율입니다.

또한 '양호한 성능'이 의미하는 것을 다르게 측정하기 위해 서비스별로 SLI를 설정할 수 있습니다. 이러한 SLI는 일반적으로 두 가지 카테고리로 분류됩니다.

  • 요청 기반 SLI: 성공적인 HTTP 요청 수와 같은 원자적 서비스 단위를 세어 양호한 서비스를 측정합니다.
  • 기간 기반 SLI: 특정 기준보다 낮은 응답 지연 시간과 같이 성능이 양호 기준을 충족하는 동안의 기간 수를 세어 양호한 서비스를 측정합니다.

이러한 SLI는 요청 기반 SLO 및 기간 기반 SLO의 규정 준수에 자세히 설명되어 있습니다.

서비스 수준 목표

SLO는 일정 기간 동안 측정된 SLI의 목표 값입니다. 서비스에 따라 사용 가능한 SLI가 결정되며 SLI를 기반으로 SLO를 지정합니다. SLO는 양호한 서비스가 무엇인지 정의합니다. Cloud Monitoring의 각 서비스에 대해 최대 500개까지 만들 수 있습니다.

SLO는 다음과 같은 종류의 정보를 기반으로 합니다.

  • SLI: 서비스 성능을 측정합니다.
  • 원하는 성능 수준을 지정하는 성능 목표입니다.
  • 기간: 성능 목표에 비교하여 SLI를 측정하기 위한 규정 준수 기간입니다.

예를 들어 다음과 같은 요구사항이 있을 수 있습니다.

  • 지연 시간은 연속 30일 동안 요청의 5%에서만 300ms를 초과할 수 있습니다.
  • 한 주 동안 측정한 시스템의 가용성은 99%여야 합니다.

이와 같은 요구사항은 SLO의 기준을 제공할 수 있습니다. 양호한 SLO 설정에 대한 가이드는 SLO 디자인 및 사용을 참조하세요.

SLO 규정 준수에 변경이 있으면 오류가 시작되는 것을 의미할 수 있습니다. 이러한 변경 사항을 모니터링하면 문제가 급증하기 전에 해결할 수 있도록 경고를 표시할 수 있습니다. 따라서 알림 정책은 대개 SLO 규정 준수를 모니터링하는 데 사용됩니다. 자세한 내용은 오류 예산 알림을 참조하세요.

SLO가 오류 예산을 결정하므로 유용한 SLO는 100% 미만입니다. 일반적으로 SLO는 99%(9 2개), 99.9%(9 3개) 등으로 '9의 수'로 표시됩니다. 설정할 수 있는 가장 높은 값은 99.9%이지만 서비스에 적합한 더 낮은 값을 사용할 수 있습니다.

오류 예산

SLO는 규정 준수 기간 동안 서비스가 수행해야 하는 정도를 지정합니다. 규정 준수 기간에서 SLO를 뺀 나머지가 오류 예산이 됩니다. 오류 예산은 서비스가 규정 준수 기간 동안 수행하지 못하고 SLO를 충족할 수 있는 정도를 수치화합니다.

오류 예산을 사용하면 SLO를 위반하기 전까지 규정 준수 기간 동안 발생할 수 있는 요청과 같은 잘못된 개별 이벤트 수를 추적할 수 있습니다. 새 버전 배포와 같은 유지보수 작업 관리에도 오류 예산을 사용할 수 있습니다. 오류 예산이 거의 소진된 경우에 새 업데이트를 푸시하는 것과 같은 위험한 작업을 수행하면 SLO 위반이 발생할 수 있습니다.

규정 준수 기간의 오류 예산은 (1 - SLO 목표) × (규정 준수 기간의 대상 이벤트)입니다. 예를 들어 연속 7일 동안 요청의 85%가 양호해야 하는 SLO의 경우 오류 예산은 15%의 잘못된 요청을 허용합니다. 예를 들어 지난 주 60,480건의 요청이 발생하는 경우 오류 예산은 전체 요청의 15% 또는 잘못된 요청 9,072개입니다. 이보다 많은 오류가 발생하면 서비스가 7일 규정 준수 기간 동안 SLO에서 벗어난 것입니다.

SLO 디자인 및 사용

양호한 SLO는 어떻게 만들어지나요? 옵션을 선택할 때 고려해야 할 사항은 무엇인가요? 이 섹션에서는 SLO 디자인 및 사용 뒤에 있는 몇 가지 일반 개념들에 대해 간단히 설명합니다. 이 주제에서는 SLO 관련 문서사이트 안정성 엔지니어링: Google의 프로덕션 시스템 운영 방법에 대해 훨씬 더 자세히 다룹니다.

SLO는 서비스에서 원하는 목표 성능을 정의합니다. 일반적으로 SLO는 필요하거나 유의미한 값보다 높아서는 안됩니다. 사용자가 서비스의 99% 가용성과 99.9% 가용성의 차이를 알 수 없는 경우 낮은 값을 SLO로 사용합니다. 높은 값일수록 충족하는 데 비용이 많이 들지만 사용자에게는 차이가 없습니다. 100% SLO 목표를 달성해야 하는 서비스에는 오류 예산이 없습니다. 이러한 SLO를 설정하는 것은 좋지 않습니다.

SLO는 일반적으로 공개 또는 계약 약정보다 엄격합니다. SLO는 공개 약정보다 더 엄격해야 합니다. 이렇게 하면 SLO를 위반하는 일이 발생해도 이로 인해 약정 또는 계약 위반이 발생하기 전에 문제를 인지하고 해결할 수 있습니다. 약정 또는 계약 위반은 인지도, 재무, 법률 상의 영향을 줄 수 있습니다. SLO는 이러한 문제가 발생하지 않도록 방지하는 조기 경보 시스템의 일부입니다.

규정 준수 기간

SLO에는 두 가지 유형의 규정 준수 기간이 있습니다.

  • 캘린더 기반 기간(날짜별)
  • 연속 시간(n일 전부터 현재까지, n은 1일부터 30일까지)

캘린더 기반 규정 준수 기간

규정 준수 기간은 1주 또는 1개월과 같이 캘린더 기간으로 설정될 수 있습니다. 규정 준수 기간 및 오류 예산은 잘 알려진 캘린더 경계에 따라 재설정됩니다. 가능한 값은 CalendarPeriod를 참조하세요.

캘린더 기간을 사용하면 기간이 끝날 때 성능 점수를 받습니다. 성능 기준에 대해 측정된 성능 점수는 서비스의 규정 준수 여부를 나타냅니다. 캘린더 기간을 사용하면 전체 기간 동안 성능이 표시되어도 규정 준수 기간마다 한 번씩만 규정 준수 등급을 받을 수 있습니다. 그러나 기간 종료 점수는 고객 결제 기간과 쉽게 일치하는 읽기 쉬운 값을 제공합니다.

달력의 달처럼 월별 규정 준수 기간은 해당 달의 일수에 따라 다릅니다.

연속 기간 기준 규정 준수 기간

또한 지난 30일 동안과 같이 지속적으로 평가할 수 있도록 연속 기간 동안 규정 준수를 측정할 수도 있습니다. 연속 기간을 사용하면 이전 계산에서 가장 오래된 데이터가 현재 계산에서 제거되고 새 데이터로 대체됩니다.

연속 기간을 사용하면 규정 준수 측정값을 더 많이 받습니다. 즉, 한 달에 한 번이 아니라 지난 30일에 대한 규정 준수 측정값을 받습니다. 서비스는 SLO 상태가 매일 변경됨에 따라 규정 준수와 위반 간에 전환할 수 있습니다. 기존 데이터 포인트가 삭제되고 새 데이터 포인트가 추가되기 때문입니다.

요청 기반 SLO 및 기간 기반 SLO의 규정 준수

SLO 규정 준수 여부 판단은 다음 두 가지 요소에 따라 결정됩니다.

  • 규정 준수 기간이 결정되는 방식. 이 판단은 규정 준수 기간에서 설명합니다.
  • SLO의 유형. SLO는 두 가지 유형이 있습니다.
    • 요청 기반 SLO
    • 기간 기반 SLO

규정 준수는 규정 준수 기간 동안 측정된 총 이벤트에 대한 양호 이벤트의 비율입니다. SLO 유형은 '이벤트'를 구성하는 요소를 결정합니다.

SLO가 99.9%인 경우 규정 준수가 99.9% 이상이라면 충족합니다. 최댓값은 100%입니다.

요청 기반 SLO

요청 기반 SLO는 총 요청 수에 대한 양호한 요청 수의 비율로 정의되는 SLI를 기반으로 합니다. 요청 기반 SLO는 규정 준수 기간의 목표를 충족하거나 초과할 때 충족됩니다.

'요청의 95% 이상에서 지연 시간이 100ms 미만'이라는 요청 기반 SLO를 예시로 들어보겠습니다. 양호한 요청은 응답 시간이 100ms 미만인 요청이므로 규정 준수 측정은 응답 시간이 100ms 미만인 요청의 비율입니다. 이 비율이 0.95 이상이면 서비스는 규정을 준수합니다.

요청 기반 SLO는 규정 준수 기간 전체에 부하가 분산된 방식과 상관없이 서비스가 전체 규정 준수 기간 동안 제대로 수행한 작업의 비율을 나타냅니다.

기간 기반 SLO

기간 기반 SLO는 총 구간 수에 대한 몇 가지 양호 기준을 충족하는 측정 간격 수의 비율로 정의된 SLI를 기반으로 합니다. 기간 기반 SLO는 해당 비율이 규정 준수 기간의 목표를 충족하거나 초과할 때 충족됩니다.

예를 들어 "지연 측정항목의 95%에서 10분 기간의 최소 99% 이상에서 100ms 미만인 SLO를 가정해 봅시다." 양호한 측정 기간은 요청의 95%가 100ms 미만 지연 시간을 갖는 10분 스팬입니다. 규정 준수 측정은 이러한 양호한 기간의 일부분입니다. 이 비율이 0.99 이상이면 서비스는 규정을 준수하는 것입니다.

규정 준수 기간을 30일, 측정 간격을 1분, SLO 목표를 99%로 설정하는 다른 예시를 가정해 보세요. 이 SLO를 충족하려면 서비스에 43,200분 중 42,768개의 '양호한' 간격이 있어야 합니다(30일 동안 분 수의 99%).

기간 기반 SLO를 통해 서비스 성능이 제대로 작동하거나 작동하지 않은 시간의 비율을 알 수 있습니다. 이러한 유형의 SLO는 '버스티' 동작의 효과를 숨길 수 있습니다. 모든 호출에 실패한 측정 간격이 하나의 오류가 있는 측정 간격만큼 SLO에 너무 많이 계산됩니다. 또한 호출 수가 적은 간격이 활동이 많은 측정 간격만큼 SLO에 계산됩니다.

오류 예산의 궤적

오류 예산은 100% 양호한 서비스와 원하는 수준의 양호한 서비스인 SLO 간의 차이입니다. 이 차이는 원하는 대로 정할 수 있습니다.

일반적으로 오류 예산은 최댓값으로 시작하고 시간이 지남에 따라 감소하므로 오류 예산이 0 미만으로 내려가면 SLO 위반이 트리거됩니다.

이 패턴에는 몇 가지 주목할 만한 예외가 있습니다.

  • 요청 기반 SLO가 캘린더 규정 준수 기간 동안 측정되고 서비스 활동이 규정 준수 기간 동안 증가하면 나머지 오류 예산이 실제로 증가할 수 있습니다.

    어떻게 이런 일이 가능한가요? SLO 시스템은 각 규정 준수 기간에 서비스 활동이 얼마나 될지 미리 알 수 없으므로 가능한 값을 추정합니다. 이 값은 규정 준수 기간이 시작된 이후 경과된 시간 동안의 현재 시간까지의 호출 비율을 규정 준수 기간의 길이로 곱한 값입니다.

    활동 비율이 증가하면 해당 기간의 예상 트래픽도 증가하여 오류 예산이 증가합니다.

  • 연속 규정 준수 기간 동안 SLO를 측정할 경우 항상 효과적으로 규정 준수 기간 끝에 있게 됩니다. 처음부터 새로 시작하는 대신 이전 데이터 포인트가 연속적으로 삭제되고 새로운 데이터 포인트가 연속적으로 추가됩니다.

    규정 준수 기간 동안 규정을 준수하지 않는 기간이 시작되고 현재는 규정을 준수하는 경우 오류 예산이 증가합니다. 언제든지 오류 예산이 0 이상이면 규정을 준수하는 연속 SLO 기간을 나타내고 오류 예산이 0 미만이면 정책을 위반하는 연속 SLO 기간을 나타냅니다.

오류 예산 모니터링

알림 정책을 만들어 오류 예산이 원하는 속도보다 빠르게 사용되고 있음을 경고할 수 있습니다. 자세한 내용은 오류 예산 알림을 참조하세요.

다음 단계

  • API의 구성은 Service Monitoring API의 주요 구조를 소개합니다.
  • API 작업은 Cloud Monitoring API의 하위 집합인 Service Monitoring API를 사용하여 SLO 및 관련 구조를 만드는 방법을 보여줍니다.
  • 굽기 속도 알림에서는 SLI를 모니터링하여 발생할 수 있는 문제에 대한 알림을 받는 방법을 설명합니다.
  • SLO 데이터 검색은 SLO 시계열 데이터를 검색하는 방법을 설명합니다.