기술나눔

Sleuth-링크 추적

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1 링크 추적 소개

  대규모 시스템의 마이크로서비스 구축에서는 시스템이 여러 모듈로 분할됩니다. 이러한 모듈은 다양한 기능을 담당하며 궁극적으로 풍부한 기능을 제공할 수 있는 시스템으로 결합됩니다. 이 아키텍처에서는 요청에 여러 서비스가 포함되는 경우가 많습니다. 인터넷 애플리케이션은 다양한 소프트웨어 모듈 세트를 기반으로 구축됩니다. 이러한 소프트웨어 모듈은 다양한 팀에서 개발할 수 있고, 다양한 프로그래밍 언어를 사용하여 구현될 수 있으며, 다양한 데이터 센터에 걸쳐 수천 대의 서버에 배포될 수 있습니다. 이 아키텍처 형식에는 몇 가지 문제가 있습니다.

  • 문제를 빨리 찾는 방법은 무엇입니까?
  • 결함의 영향 범위를 결정하는 방법은 무엇입니까?
  • 서비스 종속성과 종속성의 합리성을 어떻게 분류할 수 있나요?
  • 링크 성능 문제를 분석하고 실시간 용량 계획을 세우는 방법은 무엇입니까?

분산 링크 추적(Distributed Tracing)은 분산 요청을 호출 링크로 복원하고 로깅, 성능 모니터링을 수행하고 분산 요청의 호출 상태를 중앙에서 표시하는 것입니다. 예를 들어, 각 서비스 노드에서 소요된 시간, 요청이 도달한 시스템, 각 서비스 노드의 요청 상태 등이 있습니다.

일반적인 링크 추적 기술에는 다음이 포함됩니다.
  • 고양이 Dianping이 오픈소스로 제공하며 다음을 기반으로 합니다.자바 개발된 실시간 애플리케이션 모니터링 플랫폼에는 실시간 애플리케이션 모니터링과 비즈니스 모니터링이 포함됩니다. 통합 해결 방법은 인터셉터, 필터 등 코드 매립을 통해 모니터링을 구현하는 것입니다. 코드, 통합에 매우 방해가 됨 더 높은 비용. 위험이 더 큽니다.
  • 지퍼킨 의지하다트위터회사의 오픈 소스, 오픈 소스 분산 추적 시스템은 서비스의 타이밍 데이터를 수집하여 마이크로 문제를 해결하는 데 사용됩니다. 서비스 아키텍처의 지연 문제에는 데이터 수집, 저장, 검색 및 프리젠테이션이 포함됩니다.이 제품은 결합되어 있습니다봄구름탐정사용이 비교적 간단하고 통합도 쉽지만 기능은 비교적 간단합니다.
  • 핀 끝 핀 끝 바이트코드 인젝션 기반의 한국형 오픈소스 콜체인 분석 및 애플리케이션 모니터링 분석 도구입니다.특징다양한 플러그인을 지원합니다.사용자 인터페이스강력한 기능, 액세스 엔드에서 코드 침입이 없습니다.
  • 스카이워킹
    스카이워킹 바이트코드 인젝션 기반의 로컬 오픈소스 콜체인 분석 및 애플리케이션 모니터링 분석 도구입니다.많은 것을 지원하는 것이 특징입니다.일종의 플러그인,사용자 인터페이스 기능이 강력하고 액세스 엔드에 코드 침입이 없습니다.이미 가입했습니다아파치부란기.
  • 형사
    스프링클라우드 분산 시스템에서 링크 추적 솔루션을 제공합니다. 
알아채다: 스프링클라우드 알리바바 기술 스택은 자체 링크 추적 기술을 제공하지 않습니다. 명탐정 +
진킨 링크 추적 솔루션을 생성하려면

2 탐정시작하기

2.1 탐정소개하다

SpringCloud Sleuth의 주요 기능은 분산 시스템에서 추적 솔루션을 제공하는 것입니다.그것은 많은 돈을 빌린다 Google
날씬한 먼저 디자인을 이해해보자 형사 의 용어 및 관련 개념.
  • 추적하다
    그룹으로추적 ID동일한기간 연결되어 트리 구조를 형성합니다.요청 추적을 구현하기 위해 분산 시스템에 요청이 도착하면진입 엔드포인트인 경우 서비스 추적 프레임워크는 요청에 대한 고유 식별자(예:추적 ID), 분산 시스템에 있는 동안 시스템 내에서 순환할 때 프레임워크는 전체 요청이 반환될 때까지 항상 이 고유 값을 계속 전달합니다.그러면 이것만 사용하면 됩니다식별자는 모든 요청을 함께 연결하여 완전한 요청 링크를 형성합니다.
  • 기간 기본 작업 단위 세트를 나타냅니다.각 처리 단위의 지연을 계산하기 위해 요청이 각 서비스 구성 요소에 도달할 때시간, 고유 식별자(스팬아이디 ) 시작, 특정 프로세스 및 끝을 표시합니다.통과하다스팬아이디시작과 끝타임스탬프 종료, 다음을 셀 수 있습니다.기간 호출 시간 외에도 이벤트 이름도 얻을 수 있습니다.정보 등을 요청합니다.메타데이터.
  • 주석
    일정 기간 동안의 이벤트를 기록하는 데 사용합니다. 내부 사용을 위한 중요 참고 사항:
    씨에스클라이언트 보내기) 클라이언트가 요청을 발행하고 요청 수명을 시작합니다.
    시르서버 수신됨) 서버는 요청을 수신하고 처리를 시작합니다. 시르씨에스 = 네트워크 지연 시간(서비스 호출 시간)
    봄 여름 시즌서버 전송) 서버가 처리를 완료하고 클라이언트로 보낼 준비가 되었습니다.SS-SR = 서버의 요청 처리 시간
    클라이언트가 회복되었습니다) 클라이언트는 서버로부터 응답을 받고 요청이 종료됩니다. 크르 - 시알 =요청된 총 시간

2.2 슬루스시작하기

마이크로서비스 이름 , 추적 ID, 스페인어 ID, 링크 추적 결과를 제3자 플랫폼으로 출력할지 여부
[api-게이트웨이, 3977125f73391553, 3977125f73391553, false]
[서비스 주문, 3977125f73391553, 57547b5bf71f8242, 거짓]
[서비스-제품, 3977125f73391553, 449f5b3f3ef8d5c5, 거짓]
다음으로, 이전 프로젝트 사례를 통해 통합 형사 , 소개 사례 작성을 완료하세요.
상위 프로젝트 소개 수정 형사 의존하다
  1. <!--链路追踪 Sleuth-->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-sleuth</artifactId>
  5. </dependency>
마이크로서비스를 시작하고 인터페이스를 호출한 후 콘솔에서 관찰할 수 있습니다. 형사 로그 출력
c61d4a753370cbeb는 어디에 있나요? 추적 ID , 0e06445e055ed94f는 SpanId에는 호출 링크를 함께 연결하기 위해 순서대로 호출되는 전역 TraceId가 있습니다. 각 마이크로서비스의 로그를 주의 깊게 분석하면 요청의 구체적인 프로세스를 파악하는 것이 어렵지 않습니다.

로그 파일을 보는 것은 좋은 방법이 아닙니다. 마이크로서비스가 점점 더 많아지면 Zipkin은 로그를 집계하고 시각적 표시 및 전체 텍스트 검색을 수행할 수 있습니다.

3 지킨완성

3.1 집킨소개하다

집킨은 트위터 기반의 오픈 소스 프로젝트 Google Dapper에 의해 구현되었으며, 데이터를 포함한 마이크로서비스 아키텍처의 대기 시간 문제를 해결하기 위해 서비스의 타이밍 데이터를 수집하는 데 전념합니다. 수집, 저장, 검색 및 전시

이를 사용하여 각 서버의 요청 링크에 대한 추적 데이터를 수집하고, 제공되는 REST API 인터페이스를 사용하여 추적 데이터를 쿼리하여 분산 시스템의 모니터링 프로그램을 구현하는 데 도움을 주어 지연 증가를 신속하게 발견할 수 있습니다. 시스템 성능 병목 현상의 원인을 식별합니다.
개발 지향 API 외에도 인터페이스 외에도 편리한 기능을 제공합니다. UI 구성 요소는 추적 정보를 직관적으로 검색하고 요청 링크 세부 정보를 분석하는 데 도움이 됩니다. 예를 들어 특정 기간 내에 각 사용자 요청의 처리 시간을 쿼리할 수 있습니다.
Zipkin은 플러그형 데이터 저장소를 제공합니다. 메모리 내 마이SQL 카산드라 게다가 엘라스틱서치

위의 그림은 지킨 주로 다음으로 구성되는 인프라 4 핵심 구성 요소로 구성:
  • 수집기: 주로 외부 시스템에서 전송된 추적 정보를 처리하고 이 정보를 지킨내부적으로 처리됨 기간후속 저장, 분석, 표시 및 기타 기능을 지원하는 형식입니다.
  • 저장: 수집기가 수신한 추적 정보를 주로 처리하는 저장 구성요소입니다. 기본적으로 이 정보는 메모리에 저장됩니다.또한 다른 저장소 구성 요소를 사용하여 데이터베이스에 추적 정보를 저장하도록 이 저장소 전략을 수정할 수도 있습니다.
  • RESTful APIAPI 주로 외부 접근 인터페이스를 제공하는데 사용되는 컴포넌트입니다.예를 들어 클라이언트 또는 외부에 추적 정보를 표시합니다.모니터링 등을 위한 시스템 접근
  • 웹 UI사용자 인터페이스 구성요소, 기반API 구성요소에 의해 구현된 상위 계층 애플리케이션입니다.통과하다사용자 인터페이스컴포넌트 사용자가 편리하고 직관적으로 쿼리하고 분석할 수 있습니다.추적 정보를 분석합니다.
집킨은 두 개의 끝으로 나뉘는데, 하나는 지킨 서버 측에서 하나는 Zipkin 클라이언트, 클라이언트는 마이크로서비스의 응용 프로그램입니다. 클라이언트가 서버를 구성합니다. 웹 주소 서비스 간 호출이 발생하면 마이크로서비스에서 주소가 구성됩니다. Sleuth의 청취자는 해당 내용을 듣고 생성합니다. 추적하다 그리고 기간 정보가 서버로 전송됩니다.

3.2 집킨서버 설치

아니요. 1 단계 : 다운로드 집킨 ~의 항아리 가방
https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin-server&v=LATEST&c=exec

 위의 URL을 방문하여 받아보세요.항아리가방, 바로 이거다집킨서버 측항아리가방

아니요. 2 단계 : 명령줄을 통해 다음 명령을 입력하여 시작합니다. ZipKin 서버
java -jar zipkin-server-2.12.9-exec.jar

아니요. 3 단계: 브라우저를 통해 액세스 http://localhost:9411 입장

3.3 지킨클라이언트 통합

ZipKin 클라이언트 및 형사 통합은 매우 간단합니다. 마이크로서비스에 종속성과 구성을 추가하기만 하면 됩니다.

아니요. 1 단계: 각 마이크로서비스에 종속성 추가
  1. <!--zipkin-->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-zipkin</artifactId>
  5. </dependency>
아니요. 2 단계: 구성 추가
  1. # sleuth 和 zipkin 相关配置
  2. spring:
  3. zipkin:
  4. base-url: http://127.0.0.1:9411/ #zipkin server的请求地址
  5. discoveryClientEnabled: false #让nacos把它当成一个URL,而不要当做服务名
  6. sleuth:
  7. sampler:
  8. probability: 1.0 #采样的百分比
아니요. 3 단계 : 마이크로서비스 인터페이스에 액세스
http://localhost:7000/주문-서브/주문/제품/1

아니요. 4 단계 : 입장 지퍼킨 ~의 사용자 인터페이스 인터페이스, 관찰 효과

아니요. 5 단계: 기록 중 하나를 클릭하면 자세한 방문 경로를 관찰할 수 있습니다.

4 지킨데이터 지속성

Zipkin Server는 기본적으로 추적 데이터 정보를 메모리에 저장하지만 이 방법은 프로덕션 환경에는 적합하지 않습니다. Zipkin은 지속적인 추적 데이터를 지원합니다. 마이스클 데이터베이스 또는 엘라스틱서치 가운데.

4.1 사용마이스클데이터 지속성 구현

아니요. 1 단계 : 만들다 마이스클 데이터 환경
  1. CREATE TABLE
  2. IF
  3. NOT EXISTS zipkin_spans (
  4. `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this
  5. means the trace uses 128 bit traceIds instead of 64 bit',
  6. `trace_id` BIGINT NOT NULL,
  7. `id` BIGINT NOT NULL,
  8. `name` VARCHAR ( 255 ) NOT NULL,
  9. `parent_id` BIGINT,
  10. `debug` BIT ( 1 ),
  11. `start_ts` BIGINT COMMENT 'Span.timestamp(): epoch micros used for endTs
  12. query and to implement TTL',
  13. `duration` BIGINT COMMENT 'Span.duration(): micros used for minDuration
  14. and maxDuration query'
  15. ) ENGINE = INNODB ROW_FORMAT = COMPRESSED CHARACTER
  16. SET = utf8 COLLATE utf8_general_ci;
  17. ALTER TABLE zipkin_spans ADD UNIQUE KEY ( `trace_id_high`, `trace_id`, `id` ) COMMENT 'ignore insert on duplicate';
  18. ALTER TABLE zipkin_spans ADD INDEX ( `trace_id_high`, `trace_id`, `id` ) COMMENT 'for joining with zipkin_annotations';
  19. ALTER TABLE zipkin_spans ADD INDEX ( `trace_id_high`, `trace_id` ) COMMENT 'for
  20. getTracesByIds';
  21. ALTER TABLE zipkin_spans ADD INDEX ( `name` ) COMMENT 'for getTraces and
  22. getSpanNames';
  23. ALTER TABLE zipkin_spans ADD INDEX ( `start_ts` ) COMMENT 'for getTraces
  24. ordering and range';
  25. CREATE TABLE
  26. IF
  27. NOT EXISTS zipkin_annotations (
  28. `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this
  29. means the trace uses 128 bit traceIds instead of 64 bit',
  30. `trace_id` BIGINT NOT NULL COMMENT 'coincides with
  31. zipkin_spans.trace_id',
  32. `span_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.id',
  33. `a_key` VARCHAR ( 255 ) NOT NULL COMMENT 'BinaryAnnotation.key or
  34. Annotation.value if type == -1',
  35. `a_value` BLOB COMMENT 'BinaryAnnotation.value(), which must be smaller
  36. than 64KB',
  37. `a_type` INT NOT NULL COMMENT 'BinaryAnnotation.type() or -1 if
  38. Annotation',
  39. `a_timestamp` BIGINT COMMENT 'Used to implement TTL;
  40. Annotation.timestamp or zipkin_spans.timestamp',
  41. `endpoint_ipv4` INT COMMENT 'Null when Binary/Annotation.endpoint is
  42. null',
  43. `endpoint_ipv6` BINARY ( 16 ) COMMENT 'Null when Binary/Annotation.endpoint
  44. is null, or no IPv6 address',
  45. `endpoint_port` SMALLINT COMMENT 'Null when Binary/Annotation.endpoint
  46. is null',
  47. `endpoint_service_name` VARCHAR ( 255 ) COMMENT 'Null when
  48. Binary/Annotation.endpoint is null'
  49. ) ENGINE = INNODB ROW_FORMAT = COMPRESSED CHARACTER
  50. SET = utf8 COLLATE utf8_general_ci;
  51. ALTER TABLE zipkin_annotations ADD UNIQUE KEY ( `trace_id_high`, `trace_id`, `span_id`, `a_key`, `a_timestamp` ) COMMENT 'Ignore insert on duplicate';
  52. ALTER TABLE zipkin_annotations ADD INDEX ( `trace_id_high`, `trace_id`, `span_id` ) COMMENT 'for joining with zipkin_spans';
  53. ALTER TABLE zipkin_annotations ADD INDEX ( `trace_id_high`, `trace_id` ) COMMENT 'for getTraces/ByIds';
  54. ALTER TABLE zipkin_annotations ADD INDEX ( `endpoint_service_name` ) COMMENT 'for getTraces and getServiceNames';
  55. ALTER TABLE zipkin_annotations ADD INDEX ( `a_type` ) COMMENT 'for getTraces';
  56. ALTER TABLE zipkin_annotations ADD INDEX ( `a_key` ) COMMENT 'for getTraces';
  57. ALTER TABLE zipkin_annotations ADD INDEX ( `trace_id`, `span_id`, `a_key` ) COMMENT 'for dependencies job';
  58. CREATE TABLE
  59. IF
  60. NOT EXISTS zipkin_dependencies ( `day` DATE NOT NULL, `parent` VARCHAR ( 255 ) NOT NULL, `child` VARCHAR ( 255 ) NOT NULL, `call_count` BIGINT ) ENGINE = INNODB ROW_FORMAT = COMPRESSED CHARACTER
  61. SET = utf8 COLLATE utf8_general_ci;
  62. ALTER TABLE zipkin_dependencies ADD UNIQUE KEY ( `day`, `parent`, `child` );
아니요. 2 단계 : 시작 시 ZipKin 서버 언제 , 지정한 데이터가 저장됩니다 마이스클 정보
  1. java -jar zipkin-server-2.12.9-exec.jar --STORAGE_TYPE=mysql --
  2. MYSQL_HOST=127.0.0.1 --MYSQL_TCP_PORT=3306 --MYSQL_DB=zipkin --MYSQL_USER=root -
  3. -MYSQL_PASS=root

4.2 사용엘라스틱서치데이터 지속성 구현

아니요. 1 단계 : 다운로드 엘라스틱서치
다운로드 링크: https://www.elastic.co/cn/downloads/과거-릴리스/elasticsearch-6-8-4

 

아니요. 2 단계 : 시작하다 엘라스틱서치

 

방문: localhost:9200

시각화가 필요한 경우 Kibana를 설치할 수 있습니다

아니요. 3 단계 : 시작 시 ZipKin 서버 저장할 데이터를 지정할 때 엘라스틱서치 정보
java -jar zipkin-server-2.12.9-exec.jar --STORAGE_TYPE=elasticsearch --ESHOST=localhost:9200

Elasticsearch의 시각적 사용에 대해서는 다음을 참조할 수 있습니다.Windows에서 Elasticsearch 설치 및 사용, kibana_windowskibanna-CSDN 설치 블로그