이 기사는 주로 서비스 추적 구성 요소 Zipkin에 대해 이야기하고 Spring Cloud Sleuth는 Zipkin 구성 요소를 통합합니다.
1. 소개
Spring Boot 응용 프로그램의 클래스 경로에 Sleuth를 추가하면 (Maven 및 Gradle 예제의 경우 아래 참조) 로깅 요청이있는 한 로그로 수집되는 상관 관계 데이터가 표시됩니다.
- 공식 웹 사이트에서 발췌
Spring Cloud Sleuth의 주요 기능은 분산 시스템에서 추적 솔루션을 제공하는 것이며 Zipkin과 호환됩니다. POM 파일에 해당 종속성을 도입하면됩니다.
2. 서비스 추적 및 분석
마이크로 서비스 아키텍처에서 서비스는 서비스를 통해 나뉩니다. 외부 세계에 노출 된 인터페이스는이 인터페이스 기능을 완료하기 위해 많은 서비스를 협력해야 할 수 있습니다. 링크의 서비스에 문제가 있거나 네트워크 타임 아웃이 있으면 인터페이스 호출이 실패하게됩니다. 비즈니스가 계속 확대됨에 따라 서비스 간의 통화는 점점 더 복잡해집니다.
점점 더 많은 서비스가 제공됨에 따라 콜 체인 분석이 점점 더 복잡해집니다. 그들 사이의 통화 관계는 다음과 같습니다.
III. 자귀
스팬 : 기본 작업 단위. 예를 들어, 새로 생성 된 스팬으로 RPC를 보내는 것은 RPC에 응답 요청을 보내는 것과 같습니다. 스팬은 64 비트 ID로 고유하게 식별되며 추적은 또 다른 64 비트 ID로 표시됩니다. 이 범위에는 Digest, 타임 스탬프 이벤트, 주요 값 주석 (TAG), SPAN의 ID 및 진행 ID (일반적으로 IP 주소)와 같은 다른 데이터 정보가 있습니다.
스팬은 지속적으로 시작하고 멈추고 동시에 시간 정보를 기록합니다. 스팬을 만들 때는 미래의 어느 시점에서 스팬을 중지해야합니다.
추적 : 일련의 스팬으로 구성된 나무 구조. 예를 들어, 분산 빅 데이터 프로젝트를 실행하는 경우 흔적을 만들어야 할 수도 있습니다.
주석 : 이벤트의 존재를 제 시간에 기록하는 데 사용되며 일부 핵심 주석은 요청의 시작과 끝을 정의하는 데 사용됩니다.
하나의 시스템에서 Zipkin 주석을 사용하는 프로세스를 그래픽 화하십시오.
4. 건설 프로젝트
기본 지식을 설명한 후 실제 작업을 수행하겠습니다. 이 기사의 사례는 주로 세 가지 프로젝트로 구성됩니다. Server-Zipkin은 주로 Zipkinserver의 기능을 사용하여 통화 데이터를 수집하고 표시합니다. HI 인터페이스를 외부에 노출시키는 서비스 Hi; Miya 인터페이스를 외부에 노출시키는 Service-Miya; 이 두 서비스는 서로 호출 될 수 있습니다. 그리고 그들이 호출 된 후에 만 Server-Zipkin은 데이터를 수집하므로 서비스 추적이라고합니다.
4.1 구축 서버-지프킨
Server-Zipkin이라는 스프링 보트 프로젝트를 만들고 POM에 종속성을 도입하십시오.
<pectionies> <pectinement> <groupId> org.springframework.boot </groupid> <artifactid> spring-boot-starter </artifactid> </depectency> <groupid> org.springframework.boot </groupid> <arepifacter-web </afficatid> <groupid> org.springframework.boot </groupid> <artifactid> 스프링-부트 스타터-테스트 </artifactid> <cope> test </scope> </dependency> <prectionency> <groupID> io.zipkin.java </groupid> <artifactid> zipkin-sepactid> </feloventy> <groupid> io.zipkin.java </groupid> <artifactid> zipkin-autoconfigure-ui </arevifactid> </fectionency> </fectionency> </fectionency> <prectionency> <groupId> org.sprameframework.cloud </groupId> <argrifactid> spring-cloud-delbellencies </artifactid> <type> POM </type> <Scope> 가져 오기 </scope> </fectionency> </fectencies> </fectionencyManagement>
프로그램 입력 클래스에서 Zipkinserver의 기능을 활성화하려면 주석 @enablezipkinserver를 추가하십시오.
@springbootApplication@enablezipkinserverpublic class serverzipkinapplication {public static void main (string [] args) {springApplication.run (serverzipkinapplication.class, args); }}구성 파일 application.yml에서 서비스 포트를 다음과 같이 지정합니다.
Server.port = 9411
4.2 Service-Hi를 만듭니다
POM 소개에서 초기 의존성은 Spring-Cloud-Starter-Zipkin이며 코드는 다음과 같습니다.
<pectionies> <pectinement> <groupId> org.springframework.boot </groupid> <artifactid> Spring-Boot-Starter-web </artifactid> </dependency> <!-compile ( 'org.springframework.cloud:spring-cloud-starter-zipkin')-> <groupid> org.springframework.cloud </groupid> <artifactid> spring-cloud-starter-zipkin </artifactid> </eppendency> <pectionement> <groupid> org.spramframewort.boot </groupid> <artifactid> spring-boot-starter-test </atrifactid> </scope> </scope> </scope> </scope> </scope> </dependency> </dependency> <pectionmanagement> <pectionement> <pectionency> <groupId> org.spramework.cloud </groupid> <artifactid> spring-cloud-dependencies </artifactid> <version> dalston.rc1 </version> <type> pom </type> </spection> </dependency> </fectence>>
구성 파일 application.yml에서 Zipkin 서버의 주소를 지정하면 "spring.zipkin.base-url"을 구성하여 헤더가 지정됩니다.
Server.port = 8988Spring.zipkin.base-url = http : // localhost : 9411spring.application.name = service-hi
Spring-Cloud-Starter-Zipkin 의존성을 소개하고 Spring.zipkin.base-url을 설정해도 괜찮습니다.
외부 노출 인터페이스 :
@springbootApplication@restControllerPublic Class ServiceHiaPplication {public static void main (string [] args) {springApplication.run (serviceHiapplication.class, args); } private static final logger log = logger.getLogger (serviceHiapplication.class.getName ()); @autowired 개인 resttemplate resttemplate; @bean public resttemplate getRestTemplate () {return new restTemplate (); } @requestmapping ( "/hi") public string callhome () {log.log (level.info, "calling trace service-hi"); resttemplate.getForObject ( "http : // localhost : 8989/miya", String.class); } @requestmapping ( "/info") public String info () {log.log (level.info, "calling trace service-hi"); "I 'm Service-Hi"를 반환합니다. } @Bean public AlwaysSampler defaultsampler () {return new alwaysampler (); }}4.3 서비스 미야를 만듭니다
생성 프로세스는 Service-Hi를 해치고 동일한 종속성을 소개하며 Spring.zipkin.base-url을 구성합니다.
외부 노출 인터페이스 :
@springbootApplication@restControllerPublic Class ServiceMiyaApplication {public static void main (String [] args) {springApplication.run (serviceMiyAapplication.class, args); } private static final logger log = logger.getLogger (serviceMiyAapplication.class.getName ()); @requestmapping ( "/hi") public string home () {log.log (level.info, "hi는 호출"); "안녕 나는 미야!"; } @RequestMapping ( "/miya") public String info () {log.log (level.info, "info가 호출되고 있습니다"); resttemplate.getForObject ( "http : // localhost : 8988/info", String.class); } @autowired private resttemplate resttemplate; @bean public resttemplate getRestTemplate () {return new restTemplate (); }}4.4 프로젝트를 시작하고 시연 및 추적합니다
위의 세 가지 프로젝트를 차례로 시작하고 액세스하려면 브라우저를 열면 다음과 같은 인터페이스가 나타납니다.
방문 : http : // localhost : 8989/miya, 브라우저가 나타납니다 : 나는 Service-Hi입니다
그런 다음 http : // localhost : 9411/의 인터페이스를 열고 종속성을 클릭하여 서비스의 종속성을 발견하십시오.
추적 찾기를 클릭하여 서로 호출하는 특정 서비스의 데이터를 볼 수 있습니다.
이 기사의 소스 코드를 다운로드하십시오 : https://github.com/forezp/springcloudlearning/tree/master/chapter9
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.