토리맘의 한글라이즈 프로젝트 logo 토리맘의 한글라이즈 프로젝트

스프링 클라우드 데이터 플로우 공식 레퍼런스를 한글로 번역한 문서입니다.

전체 목차는 여기에 있습니다.


이 섹션에선 스트림 데이터 파이프라인을 구성하도록 배포한 애플리케이션들을 트레이싱하는 방법을 설명한다.

Data Flow의 분산 트레이싱 아키텍처는 Spring Cloud Sleuth 라이브러리를 중심으로 설계되어, OpenZipkin Brave와 통합되는 분산 트레이싱 솔루션을 위한 API를 제공한다.

Spring Cloud Sleuth는 스트리밍 파이프라인 메세지들을 추적하고, 트레이싱 정보를 외부 시스템으로 내보내 분석하고 시각화할 수 있다. Spring Cloud Sleuth는 Zipkin ServerWavefront Distributed Tracing같은 OpenZipkin 호환 시스템을 지원한다.

모든 Spring Cloud 스트림 애플리케이션들은 메세지 분산 트레이싱을 지원하며, Zipkin Server와(또는) Wavefront Tracing으로 트레이싱 정보들을 익스포트하기 위한 설정이 미리 세팅돼있다. 트레이싱 익스포트는 기본적으론 비활성화돼 있다! Wavefront나 Zipkin Server로 트레이싱 정보를 익스포트할 땐 management.metrics.export.wavefront.enabled=true, spring.zipkin.enabled=true를 사용한다. 상세 가이드는 아래에서 다룬다. Sleuth 설정 프로퍼티는 spring sleuth 프로퍼티를 참고하면 된다.

다음은 스트리밍 애플리케이션 모니터링의 전반적인 아키텍처를 나타낸 이미지다:

Stream Distributed Tracing Architecture

Spring Cloud Function 3.1.x 이전 버전을 기반으로 만든 스트리밍 애플리케이션에선, Spring Cloud Sleuth 라이브러리는 트레이싱 계측instrumentation에 스프링 인테그레이션을 활용한다. 이땐 Spring Cloud Sleuth에서 스프링 인테그레이션 내부 컴포넌트들엔 불필요한 (노이즈) 트레이싱 정보를 생성할 수도 있다!

Spring Cloud Function 3.1+부터는 Spring Cloud Sleuth 트레이싱 계측instrumentation에서 좀더 SCF 기반 애플리케이션에 잘 맞는 맞춤 트레이싱 정보를 제공한다.

목차


Instrument Custom Applications

커스텀 스트리밍 애플리케이션에서 분산 트레이싱을 활성화하려면, 스트리밍 애플리케이션에 다음 의존성을 추가해야 한다:

<dependencies>
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-sleuth</artifactId>
  </dependency>
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
  </dependency>
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-sleuth-zipkin</artifactId>
  </dependency>
  <dependency>
      <groupId>io.micrometer</groupId>
      <artifactId>micrometer-registry-wavefront</artifactId>
  </dependency>
</dependencies>

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-dependencies</artifactId>
      <version>${release.train.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

디폴트 트레이싱 익스포트 동작도 반드시 비활성화해줘야 한다. application.properties에 아래 프로퍼티를 추가해라.

management.metrics.export.wavefront.enabled=false
spring.zipkin.enabled=true

Visualize Distributed Tracing

트레이싱 정보를 외부 시스템으로 내보내서 분석하고 시각화할 수도 있다. Spring Cloud Sleuth는 Wavefront Distributed TracingZipkin Server같은 OpenZipkin 호환 시스템을 지원한다.

Visualize with Wavefront

배포한 스트리밍 파이프라인에서 수집한 분산 트레이싱 데이터는 Wavefront를 이용해 시각화할 수 있다. Wavefront는 applicationsservices에 대한 정보를 조회할 수 있는 다양한 대시보드와 브라우저를 제공하므로, 곳곳을 이동하며 더 다양한 정보들을 모을 수 있다.

Wavefront는 applicationservice라는 개념을 사용해서 분산 트레이스를 그룹화한다. Dataflow에선 Wavefront application을 스트리밍 파이프라인에 매핑하고, 이 파이프라인에 있는 애플리케이션들에는 service를 매핑하는 식으로 활용할 수 있다. 따라서 배포된 모든 Spring Cloud 스트림 애플리케이션 스타터들은 아래 두 가지 프로퍼티가 설정돼 있다:

스트림 트레이스를 조회하려면 Wavefront 대시보드 메뉴에서 Applications/Traces로 이동하면 된다:

SCDF Wavefront

이 화면에서 배포한 스트림 이름과 일치하는 애플리케이션 이름을 검색하면 된다. 예를 들어 scdf-stream-traces라는 스트림 파이프라인을 배포했다면, Wavefront에서 다음과 같이 수집한 트레이스를 선택할 수 있다:

SCDF Wavefront

Search 버튼을 누르면 Wavefront 대시보드에서 다음과 유사한 화면이 보일 거다:

SCDF  Tracing Wavefront

Visualize with Zipkin Server

Zipkin 서버를 사용하면 배포한 스트리밍 파이프라인에서 분산 트레이싱 데이터를 수집하고 시각화할 수 있다. Zipkin은 데이터를 조회할 수 있는 다양한 대시보드와 브라우저를 제공한다.

http://your-zipkin-hostname:9411/zipkin에서 Zipkin UI에도 붙을 수 있다. 디폴트 url은 http://localhost:9411/zipkin이다.

로그 파일에 트레이스 ID가 있다면 이 ID로 직접 이동할 수 있다. 그 외에는 서비스, operation 이름, 태그, duration과 같은 속성을 기반으로 질의할 수 있다. 서비스에 소요된 시간(백분율), operation 실패 여부와 같은 몇 가지 흥미로운 요약 데이터를 제공해줄 거다.

Stream Tracing Visualization - Zipkin Send

Zipkin UI에선 각 애플리케이션에 요청이 얼마나 들어왔는지를 추적해주는 의존성 다이어그램도 제공한다. 이 다이어그램은 에러가 발생하는 경로나 deprecated된 서비스를 호출하는지 등을 식별할 때 유용하다.

Stream Tracing Visualization - Zipkin Dependencies


Platform Installations

이어지는 섹션에선 Spring Cloud Data Flow를 배포한 플랫폼별로 분산 트레이싱을 설정하는 방법을 설명한다.

Local

이 섹션에선 Wavefront나 Zipkin Server를 트레이스 저장소로 사용하는 스트림 애플리케이션의 분산 트레이스를 조회하는 방법을 설명한다. Wavefront는 클라우드 기반 플랫폼이긴 하지만, Data Flow를 로컬에 배포한 뒤 클라우드가 관리하는 Wavefront 모니터링 시스템을 가리키게 만들 수 있다.

Wavefront

Data Flow를 Wavefront 지원 기능과 함께 설치하려면 Docker Compose 가이드에 있는 Wavefront로 모니터링하기를 따라하면 된다. 가이드대로 따라하면 Spring Cloud Data Flow, Skipper, 아파치 카프카가 설치된다.

Wavefront는 SaaS 기반 플랫폼으로, 먼저 사용자 계정을 생성해야 한다. 이 계정을 사용해서 환경 변수 WAVEFRONT_KEYWAVEFRONT_URI를 설정하면 된다.

모든 컨테이너를 실행시켰다면, 카프카를 사용하는 간단한 스트림을 배포해봐라:

dataflow:>stream create scdf-stream-tracing --definition "time --fixed-delay=10 --time-unit=MILLISECONDS | filter --expression=payload.contains('3') | log" --deploy

이제 가이드를 따라 Wavefront로 시각화하면 된다.

Zipkin Server

최신 스트림 애플리케이션 스타터가 필요하다 (2020.0.3-SNAPSHOT 이상). STREAM_APPS_URI 변수로 적당한 앱 버전을 설정해라.

Zipkin Server를 사용해 메세지 트레이스를 수집하려면 Docker Compose 가이드에 있는 Zipkin Server를 따라하면 된다. 가이드대로 따라하면 Spring Cloud Data Flow, Skipper, 아파치 카프카, Zipkin Server가 설치되고, 메세지 트레이싱이 활성화될 거다.

모든 컨테이너를 실행하고 나면 Spring Cloud Data Flow 대시보드는 http://localhost:9393/dashboard에서 확인할 수 있다.

대시보드가 작동하는 걸 보고싶다면, 카프카를 사용하는 간단한 스트림을 배포해봐라:

dataflow:>stream create stream2 --definition "time --fixed-delay=10 --time-unit=MILLISECONDS | filter --expression=payload.contains('3') | log" --deploy

http://localhost:9411/zipkin에 들어가 Zipkin UI를 열고, 이제 가이드를 따라 Zipkin Server로 시각화하면 된다.

Kubernetes

이 섹션에선 클라우드로 관리하는 Wavefront 시스템 상에서 스트림 분산 트레이스를 조회하는 방법을 설명한다.

Wavefront

Wavefront는 SaaS 기반 플랫폼이다. 먼저 사용자 계정을 생성하고 이 계정에 할당된 API-KEYWAVEFRONT-URI를 알아내야 한다.

통합 가이드 쿠버네티스에 Data Flow 설치하기에 따라 서버를 준비해라.

그런 다음 Spring Cloud Data Flow 서버 설정(ex. src/kubernetes/server/server-config.yaml)에 아래 프로퍼티를 추가해서 Wavefront 통합을 활성화해라:

management:
  metrics:
    export:
      wavefront:
        enabled: true
        api-token: <YOUR API-KEY>
        uri: <YOUR WAVEFRONT-URI>
        source: demo-scdf-source

이제 가이드를 따라 Wavefront로 시각화하면 된다.

Zipkin Server

Zipkin 서버를 http://your-zipkin-server:9411에서 실행 중이라치면 (쿠버네티스 클러스터 내부에 있을 수도 있고, 외부 서비스에 속할 수도 있다), Spring Cloud Data Flow 배포 설정에 아래 환경 변수를 추가하면 된다:

env:
  - name: SPRING_CLOUD_DATAFLOW_APPLICATIONPROPERTIES_STREAM_SPRING_ZIPKIN_ENABLED
    value: true
  - name: SPRING_CLOUD_DATAFLOW_APPLICATIONPROPERTIES_STREAM_SPRING_ZIPKIN_BASEURL
    value: 'http://your-zipkin-server:9411'

이제 가이드를 따라 Zipkin Server로 시각화하면 된다.

Cloud Foundry

이 섹션에선 클라우드 파운드리에 있는 Wavefront를 사용하는 스트림 애플리케이션의 분산 트레이스를 조회하는 방법을 설명한다.

Wavefront

Wavefront는 SaaS 기반 플랫폼이다. 먼저 사용자 계정을 생성하고 이 계정에 할당된 API-KEYWAVEFRONT-URI를 알아내야 한다.

스트림 애플리케이션의 메트릭 데이터를 Wavefront 모니터링 시스템으로 전송하도록 Data Flow 서버를 설정하려면 매니페스트 기반 Wavefront 설정 가이드를 따라해라.

이제 가이드를 따라 Wavefront로 시각화하면 된다.


Next :
Stream Application DSL
Stream Pipeline DSL을 이용해 입출력을 여러 개 가지는 애플리케이션들의 스트림을 생성하기

전체 목차는 여기에 있습니다.

<< >>

TOP