Oracle Cloud에서 Application Performance Monitoring을 통해 마이크로 서비스 모니터링 및 추적
마이크로서비스 모니터링은 아키텍처의 복잡성과 분산 배포 모델 때문에 어려울 수 있습니다.
마이크로서비스 애플리케이션은 다양한 시스템에 배포된 수천 개의 독립 서비스로 구성될 수 있으며, 각 서비스는 해당 프로세스로 실행됩니다. 특정 리소스 및 상태 모니터에 초점을 맞춘 기존 모니터링 접근 방식은 마이크로서비스 애플리케이션의 트랜잭션 플로우를 추적하거나 문제를 디버깅할 때 더 이상 효과적이지 않습니다.
Oracle Cloud Infrastructure Application Performance Monitoring Cloud Service(APM)는 마이크로서비스에서 OpenTracing 자동 계측을 활성화하고 전체 엔드투엔드 사용자 트랜잭션을 캡처하여 사용자 경험과 애플리케이션 성능을 모두 이해할 수 있도록 합니다. APM에는 인스턴스 레벨, 종단간 및 트랜잭션 추적을 가능하게 하는 분산 추적 시스템이 포함되어 있습니다. 또한 앱 서버 및 비즈니스 측정지표 모니터링도 지원합니다.
구조
이 참조 아키텍처는 Oracle Cloud Infrastructure Application Performance Monitoring Cloud Service(APM)를 사용하여 OCI Kubernetes Engine(OKE) 클러스터에 배포된 마이크로서비스 애플리케이션을 모니터링하는 방법을 보여줍니다.
아래 아키텍처 다이어그램은 Kubernetes 클러스터에 배포된 마이크로서비스 애플리케이션을 보여줍니다. 애플리케이션은 두 개의 배치 복제본이 있는 애플리케이션 서버에서 호스트되고 JDBC를 사용하여 Oracle Autonomous Database에 접속합니다. 일반 사용자는 Oracle Cloud에서 호스팅되는 웹 인터페이스를 통해 애플리케이션에 접근합니다. 각 다이어그램은 서로 다른 접근 방식을 보여줍니다.
-
OpenTelemetry 운영자: 첫 번째 접근 방식은 Kubernetes 운영자를 사용하여 Kubernetes Pod에서 실행되는 JVM(Java 가상 머신)에 Java 에이전트를 자동으로 삽입하는 작업을 간소화합니다.
-
공유 파일 시스템: 두번째 접근 방식은 공유 파일 시스템을 사용하여 APM 에이전트를 프로비전하고 배치합니다.
두 방법 모두 Kubernetes에 배포된 Java 애플리케이션 서버 또는 프레임워크(예: Oracle WebLogic Server 또는 Spring Boot)를 모니터링할 수 있습니다.
다음 다이어그램은 OpenTelemetry 연산자 구현을 보여줍니다.
apm-microservices-open-telemetry-oracle.zip
이 아키텍처의 데이터 흐름은 다음과 같습니다.
- OCI에서 APM 도메인을 생성하고 도메인의 데이터 업로드 끝점 URL 및 프라이빗/퍼블릭 데이터 키를 가져옵니다.
- OCI에서 공유 파일 시스템을 생성하고 OKE 클러스터에 영구 볼륨과 같은 Kubernetes 스토리지 객체를 생성합니다.
- APM 도메인에서 APM Java 에이전트를 다운로드하고 마운트된 볼륨에 프로비전합니다.
- Kubernetes 배치 또는 StatefulSets에 대한 YAML 파일을 업데이트하여 애플리케이션에 APM 에이전트를 배치합니다.
B: OpenTelemetry 운영자는 Java 에이전트를 로컬 캐시로 자동으로 다운로드합니다. Java 에이전트는 OKE 클러스터의 각 복제본에 로컬로 설치됩니다.
C: 서버 및 JDBC 추적, 범위 및 측정항목이 APM 도메인으로 전송됩니다. Kubernetes Pod가 재시작되면 서버의 추적 및 범위가 데이터 업로드 끝점 URL이 있는 APM 도메인으로 전송됩니다.
D: 브라우저 추적, 범위 및 측정항목이 APM 도메인으로 전송됩니다. 수집된 데이터는 성능 및 가용성 분석을 위해 APM 대시보드 및 추적 탐색기에서 시각화할 수 있습니다.
다음 다이어그램은 공유 파일 시스템 구현을 보여줍니다.
apm-microservices-arc-oracle.zip
이 아키텍처의 데이터 흐름은 다음과 같습니다.
- OCI에서 APM 도메인을 생성하고 도메인의 데이터 업로드 끝점 URL 및 프라이빗/퍼블릭 데이터 키를 가져옵니다.
- OCI에서 공유 파일 시스템을 생성하고 OKE 클러스터에 영구 볼륨과 같은 Kubernetes 스토리지 객체를 생성합니다.
- APM 도메인에서 APM Java 에이전트를 다운로드하고 마운트된 볼륨에 프로비전합니다.
- Kubernetes 배치 또는 StatefulSets에 대한 YAML 파일을 업데이트하여 애플리케이션에 APM 에이전트를 배치합니다.
B: 서버 및 JDBC 추적, 범위 및 측정항목이 APM 도메인으로 전송됩니다. Kubernetes Pod가 재시작되면 서버의 추적 및 범위가 데이터 업로드 끝점 URL이 있는 APM 도메인으로 전송됩니다.
C: 브라우저 추적, 범위 및 측정항목이 APM 도메인으로 전송됩니다. 수집된 데이터는 성능 및 가용성 분석을 위해 APM 대시보드 및 추적 탐색기에서 시각화할 수 있습니다.
이 아키텍처의 구성 요소는 다음과 같습니다.
- Tenancy
테넌시는 Oracle Cloud Infrastructure에 등록할 때 Oracle이 Oracle Cloud 내에서 설정하는 안전하고 격리된 파티션입니다. 테넌시 내에서 OCI의 리소스를 생성, 구성 및 관리할 수 있습니다. 테넌시는 회사 또는 조직과 동의어입니다. 일반적으로 회사는 단일 테넌시를 가지며 해당 테넌시 내의 조직 구조를 반영합니다. 단일 테넌시는 대개 단일 구독과 연관되며, 단일 구독에는 일반적으로 하나의 테넌시만 포함됩니다.
- 지역
Oracle Cloud Infrastructure 리전은 하나 이상의 데이터 센터, 호스팅 가용성 도메인을 포함하는 지역화된 지리적 영역입니다. 지역은 다른 지역과 독립적이며, 먼 거리가 그들을 분리 할 수 있습니다 (국가 또는 대륙에 걸쳐).
- 구획
구획은 Oracle Cloud Infrastructure 테넌시 내의 지역 간 논리적 파티션입니다. 구획을 사용하여 Oracle Cloud 리소스에 대한 사용 할당량을 구성, 제어 및 설정할 수 있습니다. 지정된 구획에서 액세스를 제어하고 리소스에 대한 권한을 설정하는 정책을 정의합니다.
- VCN(가상 클라우드 네트워크) 및 서브넷
VCN은 Oracle Cloud Infrastructure 지역에서 설정한 맞춤형 소프트웨어 정의 네트워크입니다. 기존의 데이터 센터 네트워크와 마찬가지로 VCN을 통해 네트워크 환경을 제어할 수 있습니다. VCN에는 VCN 생성 후 변경할 수 있는 겹치지 않는 CIDR 블록이 여러 개 있을 수 있습니다. VCN을 서브넷으로 분할할 수 있습니다. 서브넷은 지역 또는 가용성 도메인으로 범위가 지정될 수 있습니다. 각 서브넷은 VCN의 다른 서브넷과 겹치지 않는 연속적인 주소 범위로 구성됩니다. 생성 후 서브넷의 크기를 변경할 수 있습니다. 서브넷은 공용 또는 전용일 수 있습니다.
이 아키텍처에서는 Reds 클러스터를 호스팅하는 모든 컴퓨트 인스턴스가 단일 지역별 서브넷에 연결됩니다.
- 보안 목록
각 서브넷에 대해 서브넷에 들어오고 나가도록 허용되는 트래픽의 소스, 대상 및 유형을 지정하는 보안 규칙을 생성할 수 있습니다.
이 아키텍처는 TCP 포트 16379 및 6379에 대한 수신 규칙을 추가합니다. 포트 6379는 Reds 클라이언트를 제공하고 포트 16379는 Reds 클러스터 버스에서 사용됩니다.
- Kubernetes Engine
Oracle Cloud Infrastructure Kubernetes Engine(OCI Kubernetes Engine 또는 OKE)는 컨테이너화된 애플리케이션을 클라우드에 배치하는 데 사용할 수 있는 확장 가능한 전담 관리 서비스입니다. 애플리케이션에 필요한 컴퓨트 리소스를 지정하면 Kubernetes Engine이 기존 테넌시의 Oracle Cloud Infrastructure에서 프로비저닝합니다. OKE는 Kubernetes를 사용하여 호스트 클러스터 전반에서 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화합니다.
- 자율운영 트랜잭션 처리(ATP)
Oracle Autonomous Transaction Processing은 트랜잭션 처리 워크로드에 최적화된 자율 구동, 자가 보안 및 자가 복구 데이터베이스 서비스입니다. 하드웨어를 구성 또는 관리하거나 소프트웨어를 설치할 필요가 없습니다. Oracle Cloud Infrastructure는 데이터베이스 생성, 백업, 패치, 업그레이드 및 튜닝을 처리합니다.
- 응용 프로그램 성능 모니터링
Oracle Cloud Infrastructure Application Performance Monitoring Cloud Service(APM)는 최종 사용자부터 애플리케이션 로그에 이르기까지 애플리케이션 성능에 대한 심층적인 가시성을 제공하는 서비스형 플랫폼(PaaS) 기반 솔루션입니다. 이 서비스는 사용자 경험 정보, 애플리케이션 측정지표 및 로그 데이터 분석을 통합합니다.
- APM 도메인
APM 도메인은 APM에서 모니터하는 시스템을 포함하는 OCI(Oracle Cloud Infrastructure) 리소스 유형입니다.
각 APM 도메인은 표준 OCI 컴파트먼트에 생성되며, 특정 사용자 집합에 APM 도메인에 대한 액세스 권한을 부여할 OCI 액세스 제어 정책을 정의할 수 있습니다.
- 데이터 키
데이터 키는 APM이 데이터 소스에서 수집한 관찰을 수락하도록 하기 위해 필요합니다. 데이터 키는 APM 도메인이 생성될 때 생성되며 공용 데이터 키와 전용 데이터 키의 두 가지 유형으로 구성됩니다.
- 데이터 업로드 끝점 URL
데이터 업로드 끝점은 데이터 소스가 관찰을 전송하는 URL입니다. 데이터 업로드 끝점은 APM 도메인이 생성되고 각 APM 도메인에 데이터 업로드 끝점이 있을 때 생성됩니다.
- OpenTelemetry 연산자
OpenTelemetry Operator는 Kubernetes POD에서 실행되는 JVM으로 Java 에이전트를 자동으로 삽입하는 작업을 간소화하도록 설계된 Kubernetes 연산자입니다.
- APM Java 에이전트
APM Java 에이전트는 애플리케이션 서버의 범위 및 측정항목을 기록하고 APM으로 전송합니다.
- APM 브라우저 에이전트
APM 브라우저 에이전트는 웹 사이트와의 사용자 상호 작용을 기록하고 범위 및 측정항목을 APM으로 전송합니다.
- 추적 및 범위
추적은 지정된 기간 동안 분산 시스템의 모든 구성 요소를 통과하므로 요청의 전체 흐름입니다. 범위는 추적 내의 작업 또는 논리적 작업 단위를 포함하며 이름, 시작 시간 및 기간을 가집니다.
- APM 도메인
권장사항
요구 사항은 여기에 설명된 아키텍처와 다를 수 있습니다. 다음 권장사항을 Oracle Cloud Infrastructure Application Performance Monitoring Cloud Service(APM)의 시작점으로 사용합니다.
- APM 브라우저 에이전트
APM 브라우저 에이전트를 애플리케이션의 웹 인터페이스에 배치하여 일반 사용자 모니터링을 사용으로 설정합니다. 추적은 브라우저에서 사용자 작업으로 시작합니다.
- 합성 모니터링
가용성 및 성능 문제를 사전에 감지하기 위해 애플리케이션 사용자 인터페이스 및 API 엔드포인트를 모니터링하도록 합성 모니터링을 구성합니다. 브라우저 기반 또는 REST 기반 모니터를 생성하고 글로벌 위치 또는 테넌트 VCN(가상 클라우드 네트워크) 내에서 주기적으로 실행되도록 일정을 잡을 수 있습니다.
고려사항
Oracle Cloud Infrastructure Application Performance Monitoring Cloud Service(APM)를 사용하는 경우 다음을 고려하십시오.
- 데이터 키
사용자정의 데이터 키를 사용하여 APM으로 전송된 데이터를 관리합니다. 기본 데이터 키 외에도 특정 목적을 위해 고유의 데이터 키를 만들 수 있습니다. 많은 사람들이 APM을 사용하는 대규모 배포의 경우 APM 도메인 관리자로서 APM에 들어오는 데이터와 그렇지 않은 데이터를 쉽게 제어할 수 있도록 서로 다른 프로젝트 소유자에게 다른 키를 제공합니다.
예를 들어, APM은 중단된 프로젝트에서 데이터 세트를 수신하고 데이터 수집을 해제하려고 합니다. 그러나 프로젝트 소유자가 조직을 떠나기 때문에 해제할 에이전트를 식별하기가 어렵습니다. 프로젝트에서 사용하는 데이터 키를 삭제하여 해당 데이터 키와 연관된 데이터를 무시할 수 있습니다.
- Kubernetes 리소스
마이크로서비스를 구성할 때 APM의 기록을 더 잘 추적하기 위해 Kubernetes Pod 리소스를 구성할 때 배치 대신 StatefulSets 사용을 고려해 보십시오. 배치 포드는 재생성될 때마다 ID를 변경하며, StatefulSets는 동일한 ID 인덱스(예: SS_0, SS_1, SS_2)로 재생성되어 APM으로 내역 추적을 단순화합니다.
- APM 서비스 이름
APM Java 에이전트를 프로비전할 때 APM에서 사용되는 서비스 이름을 지정해야 합니다. APM에서 일관된 추적을 위해 배치/StatefulSet 이름을 APM serviceName로 사용하는 것이 좋습니다.
- 샘플링
대량 응용 프로그램(예: 초당 1백만 개의 트랜잭션)에서 샘플링을 사용합니다. APM은 기본적으로 모든 범위를 수집하고 애플리케이션의 모든 트랜잭션을 추적할 수 있습니다. 그러나 대용량 응용 프로그램의 경우 여러 범위가 생성될 수 있습니다. 이러한 경우 비용 효율성이 향상되도록 샘플링 구성을 명시적으로 지정하고 추적 데이터의 양을 줄이는 것을 고려하십시오.
배치
이 참조 아키텍처에 설명된 APM Java 에이전트를 배치할 때는 다음 Oracle LiveLabs 워크샵의 단계별 지침을 참조하십시오.
다음 실습에서는 Spring Boot 및 Oracle WebLogic Server와 함께 애플리케이션을 예로 사용합니다.
추가 탐색
이 아키텍처의 기능 및 관련 정보에 대해 자세히 알아봅니다.
Oracle Application Performance Monitoring에 대해 자세히 알아보려면 다음 추가 리소스를 검토하십시오.