GitLab 애플리케이션 서비스 수준 지표(SLI)
Ruby 코드베이스에서 서비스 수준 지표(SLI)를 직접 정의하고, Prometheus 메트릭으로 추적하며 서비스 모니터링과 알림에 활용하는 방법을 설명합니다.
서비스 수준 지표(Service Level Indicator, SLI) 는 Ruby 코드베이스에서 직접 정의할 수 있습니다. 이렇게 하면 작업과 그 성공 기준의 정의가 구현과 가까운 곳에 있게 되고, 기능을 만드는 사람이 그 기능을 어떻게 모니터링할지 손쉽게 정의할 수 있습니다. 기존 SLI # audit_event_streaming_nats_dispatch global_search_apdex global_search_error_rate global_search_indexing_apdex openbao_client_calls rails_request sidekiq_execution zoekt_tasks 새 SLI 정의하기 # Note SLI 구현은 labkit-ruby 에 Labkit::ApplicationSli 로 들어 있습니다. 자세한 내용은 Labkit::ApplicationSli README 를 참고합니다. GitLab-Rails에서는 Gitlab::Metrics::Sli 가 하위 호환 별칭이므로 기존 코드는 그대로 동작합니다. SLI는 Gitlab::Metrics::Sli::Apdex 또는 Gitlab::Metrics::Sli::ErrorRate 클래스로 정의할 수 있습니다. SLI를 정의하면 Rails 애플리케이션에서 Prometheus 카운터 두 개가 방출됩니다. 두 카운터는 대체로 같은 방식으로 동작하며 전체 작업 수를 담습니다. Apdex 는 성공률로 성공 비율을 계산하고, ErrorRate 는 오류율로 오류 비율을 계산합니다. 정의되는 메트릭은 다음과 같습니다. Gitlab::Metrics::Sli::Apdex.new('foo') 는 다음을 정의합니다. 전체 측정 수를 나타내는 gitlab_sli_foo_apdex_total 성공한 측정 수를 나타내는 gitlab_sli_foo_apdex_success_total Gitlab::Metrics::Sli::ErrorRate.new('foo') 는 다음을 정의합니다. 전체 측정 수를 나타내는 gitlab_sli_foo_total 오류 측정 수를 나타내는 gitlab_sli_foo_error_total . 이 메트릭은 오류율이므로 오류 수를 전체 수로 나눕니다. 이 예시처럼 두 메트릭은 기본 이름(여기에서는 foo )을 공유할 수 있습니다. 같은 작업을 가리킬 때는 이렇게 하는 것을 권장합니다. 성공한 작업의 성능을 측정할 때는 Apdex 를 사용합니다. 실패한 요청의 성능은 ErrorRate 로 추적해야 하므로 따로 측정할 필요가 없습니다. 예를 들어 요청이 지정한 지연 시간 임계값 안에서 처리되는지 측정할 수 있습니다. 실패한 작업의 비율을 측정할 때는 ErrorRate 를 사용합니다. 예를 들어 실패한 요청이 500 이상의 HTTP 상태를 반환하는지 측정할 수 있습니다. 첫 스크레이프 전에 가능한 모든 레이블 조합으로 SLI를 초기화 해 두는 것이 중요합니다. 이렇게 하면 계산에서 이 카운터들을 사용할 때 혼란스러운 결과가 나오지 않습니다. SLI를 초기화하려면 .init