다음 Azure Well-Architected Framework 성능 효율성 검사 목록 권장 사항에 적용됩니다.
| PE:04 | 시간에 따라 동작을 분석하고, 기준선과 비교하여, 성능 저하, 비효율성 및 크기 조정 간격을 감지하는 데 사용할 수 있도록 일관된 성능 측정을 설정합니다. |
|---|
성능 데이터가 없으면 기본 문제 및 최적화 기회가 눈에 띄지 않게 되어 사용자 환경이 저하됩니다.
이 문서에서는 대기 시간, 처리량 및 리소스 동작을 캡처하여 기준을 설정하고 워크로드 전체의 성능 저하를 식별하는 다중 계층 성능 측정을 구현하기 위한 디자인 전략을 설명합니다.
이 문서의 주요 전략은 모니터링 시스템을 설계하기 위한 OE:07 아키텍처 전략에 설명된 관찰 가능성의 기본 운영 사례를 기반으로 합니다. 모니터링 사례 구현에 대한 지침은 모니터링 디자인 가이드에서 확인할 수 있습니다. 먼저 해당 리소스를 검토하는 것이 좋습니다. 이 가이드의 권장 사항은 성능으로 범위가 지정됩니다. 안정성에 대한 자세한 내용은 신뢰할 수 있는 모니터링 및 경고 전략을 설계하기 위한 RE:10 아키텍처 전략을 참조하세요.
정의
| 기간 | Definition |
|---|---|
| 활동 로그 | 리소스 삭제와 같은 리소스에 대한 관리 작업을 추적하는 로그입니다. |
| 애플리케이션 로그 | 로그인 및 데이터베이스 연결 실패와 같은 애플리케이션 이벤트, 오류 및 기타 활동에 대한 정보를 추적하는 로그입니다. |
| APM(애플리케이션 성능 모니터링) 도구 | 애플리케이션의 성능을 모니터링하고 보고하는 도구입니다. |
| Baselines | 시간이 지남에 따라 드리프트, 회귀 및 개선을 감지하기 위한 참조 지점으로 사용되는 예상 시스템 성능 메트릭입니다. |
| 코드 계측 | 애플리케이션 코드의 관점에서 성능 메트릭의 직접 또는 간접 캡처입니다. 캡처된 메트릭에는 흐름 메트릭, 리소스 사용 및 언어 또는 런타임과 관련된 메트릭이 포함됩니다. |
| 분산 추적 | 분산 워크로드 구성 요소 간에 메트릭을 수집하고 상호 연결하여 엔드 투 엔드 트랜잭션 흐름을 이해합니다. |
| Latency | 요청 시작과 응답 수신 사이의 시간 지연으로 시스템 응답성을 측정합니다. |
| Metrics | 시간 경과에 따른 워크로드 성능 동작을 기록하는 숫자 측정값으로, 일반적으로 분석을 위해 집계됩니다. |
| 백분위수(p50, p95, p99) | 성능 분포를 보여 주는 통계 측정값; p50은 일반적인 성능을 나타내고, p95는 부하가 있는 대부분의 사용자 환경을 표시하고, p99는 최악의 성능을 캡처합니다. |
| 플랫폼 메트릭 | 특정 시간에 워크로드 성능을 기록하는 숫자 값입니다. |
백분위수 기반 메트릭 사용
평균이 아닌 백분위수(p50, p95, p99)를 사용하여 대기 시간, 응답 시간 또는 로드 시간과 같은 성능 메트릭을 측정합니다. 평균은 오해의 소지가 있을 수 있습니다. 대부분의 요청이 빠르지만 몇 가지가 매우 느린 경우 평균은 나쁜 환경을 숨깁니다.
백분위수는 사용자 경험을 이해하는 데 중요한 꼬리 행동을 보여줍니다. p50은 일반적인 성능을 나타내고, p95는 대부분의 사용자가 로드 중인 환경을 표시하고, p99는 최악의 성능 또는 이상값을 캡처합니다.
모니터링 도구를 사용하여 성능 데이터를 수집하고 정의된 시간 기간 동안 백분위수로 표시합니다. 모니터링, 경고 및 성능 분석을 위한 기준으로 사용합니다.
성능 향상 경계 정의
측정값에 포함된 내용을 정확하게 알 수 있도록 명확한 성능 경계를 정의합니다. 단일 숫자로 처리하는 대신 시스템 전체에서 대기 시간을 분석합니다. 지연이 실제로 발생하는 위치를 확인하기 위해 에지 서비스, 게이트웨이, 컴퓨팅 및 종속성으로 각각의 계층에 시간을 할당하십시오.
코드, 서비스, 인프라 및 직접 종속성과 클라이언트 쪽 조건, DNS 확인, ISP 대기 시간 또는 디바이스 제약 조건과 같은 외부 요인과 제어하지 않는 항목을 구분합니다. 이러한 구분은 오해를 방지하고 전체 엔드투엔드 사용자 환경을 반영하면서 변경할 수 있는 영역에 초점을 맞춘 최적화를 유지합니다.
성능 문제가 사용자 환경에 영향을 미치는 시기와 위치를 평가합니다. 설계를 통해 성능 저하를 보정하거나 시스템의 제어 가능한 부분의 개선을 통해 완화합니다.
환경 및 용도별 신호 분할
각 신호가 명확한 컨텍스트를 반영할 수 있도록 성능 데이터를 분할합니다. 다르게 동작하거나 다른 결정을 내리는 신호의 혼합을 방지하기 위해 환경 및 용도로 구분합니다.
프로덕션 및 비프로덕션 데이터를 별도로 유지합니다. 프로덕션 데이터는 실제 사용자 영향을 반영하며 모니터링 및 경고를 유도해야 합니다. 비프로덕션 데이터는 테스트 및 튜닝에 유용하지만 프로덕션 데이터와 혼합하면 결과가 왜곡되고 실제 문제가 숨겨집니다.
성능 메트릭과 비즈니스 메트릭을 구분합니다. 성능 메트릭은 시스템 동작 및 워크로드 상태를 추적하는 반면 비즈니스 메트릭은 결과를 추적합니다. 겹치는 경우에도 각각을 독립적으로 분석하고 사용할 수 있도록 고유 스트림에 유지합니다.
범위가 지정되고 실행 가능한 성능 경고 만들기
경고의 목표는 사용자에게 표시되거나 비즈니스에 영향을 주기 전에 성능 저하를 조기에 감지하는 것입니다. 엔드 투 엔드 사용자 환경 및 부하 중인 중요한 시스템 경로를 나타내는 핵심 내부 트랜잭션의 두 가지 수준으로 경고를 빌드합니다.
대상 및 경고 모두에 대해 각 환경 내에서 일관된 단일 데이터 세트를 사용합니다. 경고가 성능 목표와 다른 데이터를 기반으로 하는 경우 신뢰할 수 없고 신뢰하기 어려워집니다.
실행 가능하고 성능 결과와 명확하게 연결된 경고를 만듭니다. 각 경고는 지속적인 위반이 발생한 임계값, 잠재적 영향 및 관련된 구성 요소를 나타내야 하므로 조사할 위치와 영향을 명확하게 합니다. 잘 알려진 표준 임계값으로 시작한 다음 관찰된 시스템 동작 및 워크로드 특성에 따라 시간이 지남에 따라 구체화합니다.
외부 종속성에 대한 직접 경고를 수행할 수 없는 경우 종속성 호출 기간, 오류 속도 또는 시간 제한 동작과 같은 간접 신호를 사용하여 시스템 성능에 미치는 영향을 근사화합니다.
탄력성 모니터링
시스템이 수요 및 크기 조정 이벤트의 변화에 대응하는 방법을 측정합니다.
콜드 시작 및 초기화 대기 시간을 추적하여 특히 스케일 아웃 이벤트 중에 시작 오버헤드가 응답성에 미치는 영향을 파악합니다. 스케일 아웃 및 스케일 인 동작을 모니터링하여 시스템이 부하의 변화에 얼마나 빨리 적응하는지, 그리고 크기 조정 작업이 수요와 보조를 맞추는지 여부를 평가합니다.
시간 경과에 따른 성능 추적
디자인 및 외부 요소의 변경으로 성능이 어떻게 진화하는지 추적합니다.
예상 시스템 성능을 나타내는 기준을 설정한 다음, 현재 동작을 비교하여 회귀 및 개선 사항을 포함하여 드리프트를 검색합니다.
배포, 구성 업데이트 및 크기 조정 작업과 같은 운영 이벤트에 성능 변경을 연결합니다. 동작의 변화가 명확한 컨텍스트를 가지며 가능한 원인으로 다시 추적할 수 있도록 이러한 이벤트로 타임라인에 주석을 추가합니다.
이 지속적인 가시성을 엔지니어링 결정에 대한 피드백 루프로 사용합니다. 성능 인사이트를 계획 및 우선 순위 지정에 제공하고 인시던트 응답이 아닌 일반 작업에 대한 입력으로 처리합니다.
시스템이 발전함에 따라 성능 목표를 지속적으로 구체화합니다. 관찰된 동작 및 사용 패턴에 따라 SLO, 임계값 및 기대치를 조정하여 대상이 현실적이고 실제 사용자 환경에 맞게 유지되도록 합니다.
애플리케이션 성능 데이터 수집
처리량, 대기 시간 및 완료 시간과 같은 애플리케이션의 성능 메트릭이 주로 계측 코드를 통해 수집되어야 합니다.
성능이 가장 눈에 띄는 중요한 실행 경로( 키 요청 흐름, 리소스 집약적 작업 및 외부 종속성 또는 다시 시도 발생 지점)를 계측합니다. 총 실행 시간과 해당 기여 단계를 측정할 수 있도록 엔드 투 엔드 트랜잭션 가시성을 보장합니다.
세 가지 핵심 유형의 성능 신호를 캡처합니다.
- 집계된 성능 동작에 대한 메트릭(대기 시간 분포, 처리량, 오류 비율)
- 요청 경로 및 시스템 구성 요소 간에 시간이 분산되는 방법을 이해하기 위한 추적
- 특정 단계 또는 이벤트에서 자세한 실행 컨텍스트에 대한 로그
이러한 신호에서 일관된 메타데이터를 사용하여 시스템 계층과 서비스 간에 성능 데이터를 상호 연결할 수 있습니다.
워크로드별 동작 또는 병목 상태를 설명하는 데 추가 세분성이 필요하지 않은 경우 플랫폼에서 이미 노출한 하위 수준 성능 신호를 복제하지 않습니다.
리소스 성능 데이터 수집
리소스 수준 성능 데이터를 수집하여 인프라 구성 요소가 부하 상태에서 동작하는 방식과 전반적인 워크로드 성능에 기여하는 방법을 이해합니다.
각 서비스는 상태 및 성능 특성을 반영하는 플랫폼별 메트릭을 노출합니다. 진단 설정을 사용하여 이 데이터를 내보내서 단기 플랫폼 보존을 넘어 경고, 대시보드 및 장기 분석에 액세스할 수 있습니다.
모든 리소스에 대한 메트릭 및 로그를 수집합니다. 예상 범위에 대한 컴퓨팅 및 스토리지 사용률을 추적하여 언더 프로비저닝이 대기 시간을 도입하고 부하에서 성능이 저하되지 않는지 확인합니다. P99 사용량을 살펴보고 리소스의 나머지 헤드룸과 비교하여 이 데이터로도 과잉 프로비전이 감지됩니다.
리소스 성능의 일부로 네트워크 트래픽을 모니터링합니다. 서브넷 및 서비스 경계를 넘어 트래픽 흐름을 분석하여 워크로드 성능에 영향을 미칠 수 있는 대기 시간, 정체 및 데이터 전송 패턴을 이해합니다.
데이터베이스 및 스토리지 데이터 수집
데이터베이스 및 스토리지 시스템은 병목 상태를 식별하고, 용량의 유효성을 검사하고, 워크로드 동작을 이해하기 위한 특수한 성능 신호를 생성합니다. 이러한 신호는 일반적으로 기본 제공 모니터링 도구 및 시스템 생성 로그에서 제공됩니다.
주요 성능 차원에 집중합니다.
| 지역 | 측정할 내용 | 그것은 당신에게 무엇을 알려줍니다 |
|---|---|---|
| 처리량 | 시간에 따른 읽기/쓰기 볼륨 | 데이터 전송 용량 |
| Latency | 저장소 작업당 시간 | 스토리지 응답성 |
| IOPS | 초당 읽기/쓰기 작업 | 트랜잭션 처리 기능 |
| 용량 사용 | 사용된 스토리지와 사용 가능한 스토리지 비교 | 크기 조정 및 용량 계획 요구 사항 |
데이터베이스의 경우 모니터링을 워크로드별 동작으로 확장합니다.
| 지역 | 측정할 내용 | 그것은 당신에게 무엇을 알려줍니다 |
|---|---|---|
| 쿼리 성능 | 실행 시간, 빈도, 리소스 사용량 | 데이터 액세스 패턴의 효율성 |
| 트랜잭션 성능 | 기간, 동시성, 잠금 경합 | 경합 및 트랜잭션 효율성 |
| 인덱스 성능 | 조각화, 사용량, 최적화 영향 | 쿼리 가속 구조의 효율성 |
| 리소스 사용 | CPU, 메모리, 디스크, 네트워크 | 시스템 수준 제약 조건 |
| 연결 메트릭 | 활성, 실패, 중단된 연결 | 안정성 및 연결 압력 |
| 트랜잭션 속도 | 초당 트랜잭션 수 | 시간에 따른 워크로드 강도 및 변경 내용 |
| 오류율 | 데이터베이스 오류 및 장애 | 안정성 및 성능 저하 신호 |
이러한 신호를 함께 사용하여 느린 쿼리, 리소스 채도 및 구조적 비효율성을 구분합니다. 이렇게 하면 스토리지 시스템과 데이터베이스 워크로드 모두에서 대상 최적화를 수행할 수 있습니다.
운영 체제 성능 데이터 수집
인프라 기반 워크로드의 경우 운영 체제 수준 메트릭을 수집하여 컴퓨팅 리소스를 활용하는 방법과 리소스 제약 조건이 발생할 수 있는 위치를 이해합니다.
로드 중인 시스템의 시간 기반 동작을 캡처하기 위해 운영 체제의 성능 카운터를 정기적으로 샘플링합니다.
| 지역 | 측정할 내용 | 표시되는 내용 |
|---|---|---|
| CPU | CPU 사용량(사용자/권한), CPU 큐 길이 | 컴퓨팅 포화 및 일정 압력 |
| Processes | 스레드 수, 핸들 수 | 애플리케이션 및 OS 수준 프로세스 로드 |
| 기억 | 커밋된 메모리, 사용 가능한 메모리, 페이징 속도, 스왑 사용량 | 메모리 압력 및 페이징 작업 |
| 디스크 | 읽기/쓰기 속도, 처리량, 디스크 사용률 | 스토리지 I/O 성능 및 병목 현상 |
| Network | 인터페이스 처리량, RX/TX 오류 | 네트워크 용량 및 전송 문제 |
이러한 신호를 사용하여 운영 체제 수준에서 리소스 포화를 식별하고 애플리케이션 수준 비효율성과 인프라 제약 조건을 구분합니다.
필요한 경우 가상 데이터 생성
시스템이 일관되게 사용되지 않는 경우 트래픽이 반환될 때 성능이 좋은지 여부를 알기 어렵습니다.
이 문제를 해결하려면 시스템을 통해 자동화된 요청을 보내는 가상 트랜잭션을 사용합니다. 실제 사용자 또는 데이터에 영향을 주지 않고 실제 사용을 시뮬레이션합니다. 이렇게 하면 시스템의 일부를 활성 상태로 유지하고, 일관된 성능 메트릭을 생성하며, 불규칙한 사용이 숨겨질 수 있는 패턴(예: 하루 중 시간 문제)을 표시할 수 있습니다.
Azure 지원
Azure Monitor 는 전체 워크로드에서 성능 데이터를 수집, 분석 및 응답하기 위한 통합 플랫폼을 제공합니다. 애플리케이션, 인프라 및 외부 원본의 데이터를 공통 데이터 플랫폼으로 집계합니다.
데이터 수집 및 스토리지: Log Analytics 작업 영역을 사용하여 구성 가능한 보존 정책을 사용하여 성능 데이터를 중앙 집중화합니다. 환경 또는 규정 준수 요구 사항에 따라 데이터를 분할하는 여러 작업 영역을 만듭니다.
애플리케이션 모니터링: Application Insights 는 요청 속도, 응답 시간 및 예외를 포함하여 애플리케이션 수준 원격 분석을 수집합니다. 분산 추적을 사용하도록 설정하여 분산 구성 요소 간에 성능을 상호 연결합니다.
인프라 모니터링: 모든 Azure 서비스에서 진단 설정을 사용하도록 설정하여 플랫폼 로그 및 메트릭을 수집합니다. 자세한 VM 성능 데이터에 Azure Diagnostics 확장을 사용합니다. 특정 플랫폼에 대한 원격 분석 옵션을 탐색합니다. 예를 들어 Kubernetes 클러스터는 Prometheus 통합을 통해 풍부한 성능 원격 분석을 내보낸다.
데이터베이스 및 스토리지: Azure Monitor는 Azure SQL Database, MySQL, PostgreSQL 및 스토리지 서비스에 대한 기본 제공 모니터링을 제공합니다. Azure Storage Analytics는 Blob, Table 및 Queue Storage에서 처리량 및 대기 시간과 같은 주요 성능 지표를 추적합니다.
경고 및 분석: 사용자 지정 가능한 임계값, 시간 기간 및 작업(이메일, 웹후크, Azure Functions)을 사용하여 경고 규칙을 만듭니다. Azure Monitor 로그를 사용하여 성능 데이터를 교차 쿼리하고 상호 연결합니다. 가격 책정 세부 정보는 Azure Monitor 가격 책정을 참조하세요.
예제
- 고가용성 영역 중복 앱 서비스 웹 애플리케이션 기준
- AKS(Azure Kubernetes Service)에서 마이크로 서비스 애플리케이션 모니터링
- Azure 플랫폼 랜딩 존 구성 요소 모니터링
관련 링크
성능 효율성 체크리스트
전체 권장 사항 세트를 참조하세요.