Микросервисная архитектура является распределенной архитектурой.Микросервисная система разделена на сервисные единицы по бизнесу.Микросервисная система часто имеет много сервисных единиц. Из-за большого количества сервисных единиц и высокой сложности бизнеса при возникновении ошибок и исключений их сложно локализовать. В основном это выражается в том, что для запроса может потребоваться вызов многих служб, а сложность вызова внутренних служб определяет, что проблему трудно локализовать. Поэтому в микросервисной архитектуре необходимо реализовать распределенное отслеживание ссылок, чтобы отслеживать, какие сервисы задействованы в запросе, и каков порядок участия, чтобы шаги по выполнению каждого запроса были четко видны, а проблемы можно было быстро локализовать. цель.
В микросервисной системе запрос от пользователя сначала достигает внешнего интерфейса A (например, внешнего интерфейса), затем через удаленные вызовы достигает промежуточного программного обеспечения B и C системы (например, балансировки нагрузки, шлюза и т. д.). и, наконец, достигает серверной службы D, E. Серверная часть выполняет ряд вычислений бизнес-логики и, наконец, возвращает данные пользователю. Для такого запроса, после стольких служб, как записать его процесс запроса с данными? Для этого требуется отслеживание ссылок на сервисы.
Spring Cloud Sleuth
Spring Cloud Sleuth обеспечивает отслеживание ссылок для вызовов между сервисами. С помощью Sleuth вы можете четко понять, через какие сервисы прошел запрос на обслуживание и сколько времени занимает обработка каждого сервиса. Это позволяет нам легко разобраться в связи вызовов между микросервисами. Дополнительно Сыщик может помочь нам:
- Анализ, занимающий много времени: с помощью Sleuth вы можете легко понять, сколько времени занимает каждый запрос на выборку, чтобы проанализировать, какие вызовы службы занимают много времени;
- Визуальные ошибки: исключения, которые не перехвачены программой, можно увидеть через встроенный сервисный интерфейс Zipkin;
- Оптимизация ссылок: для часто вызываемых служб можно реализовать некоторые меры по оптимизации этих служб.
Google открыл исходный код компонента отслеживания ссылок Dapper и опубликовал документ «Dapper, крупномасштабная инфраструктура отслеживания распределенных систем» в 2010 году. Этот документ является эталоном и теоретической основой для отслеживания ссылок в отрасли и имеет высокую справочную ценность.
Spring Cloud Sleuth использует терминологию открытого проекта Google Dapper.
- Span: базовая единица работы. Отправка задачи удаленного планирования генерирует Span. Span однозначно идентифицируется 64-битным идентификатором, а Trace уникально идентифицируется другим 64-битным идентификатором. Span также содержит другую информацию, такую как сводка, временная метка события, Span ID и ID процесса.
- Трассировка: состоит из серии пролетов в древовидной структуре. Запрашивая интерфейс API микросервисной системы, этот интерфейс API должен вызывать несколько модулей микросервиса, и вызов каждого модуля микросервиса будет генерировать новый диапазон, а все диапазоны, сгенерированные этим запросом, образуют трассировку.
- Аннотация: используется для записи события, некоторые основные аннотации используются для определения начала и конца запроса, эти аннотации следующие.
- cs-Client Sent: клиент отправляет запрос, эта аннотация описывает начало Span.
- sr-Server Received: сервер получает запрос и готов начать его обработку.Если вычесть временную метку cs из его sr, вы можете получить время передачи по сети.
- ss-Server Sent: Сервер отправляет ответ.Эта аннотация указывает на завершение обработки запроса (когда запрос возвращается клиенту).Время запроса сервера можно получить, вычитая временную метку sr из временной метки ss.
- cr-Client Received: клиент получает ответ, и диапазон заканчивается в это время.Если временная метка cr вычитается из временной метки cs, можно получить время, затраченное на весь запрос.
Spring Cloud Sleuth также предоставляет нам полный набор решений для ссылок. Spring Cloud Sleuth может комбинировать Zipkin для отправки информации в Zipkin, использовать хранилище Zipkin для хранения информации о ссылках и использовать пользовательский интерфейс Zipkin для отображения данных.
Zipkin
Zipkin — это распределенная система отслеживания ссылок. Он помогает собирать данные о времени, необходимые для устранения проблем с задержкой в микросервисных архитектурах. Он управляет сбором и поиском этих данных. Дизайн Зипкина основан на бумаге Google Dapper.
В приложении существуют трекеры для записи времени и метаданных вызовов запросов. Трекеры используют библиотеки, и их использование не зависит от пользователя. Например, веб-сервер записывает время и некоторые метаданные при получении запроса и при отправке ответа. Данные, собранные для полного запроса ссылки, называются диапазоном.
Мы можем использовать его для сбора данных трассировки ссылки запроса на каждом сервере и использовать интерфейс REST API, который он предоставляет, чтобы помочь нам запросить данные трассировки для реализации программы мониторинга распределенной системы, чтобы обнаружить увеличение задержки. в системе вовремя высокие проблемы и определить источник узких мест производительности системы. В дополнение к интерфейсу API, ориентированному на разработку, он также предоставляет удобные компоненты пользовательского интерфейса, которые помогают нам интуитивно искать информацию об отслеживании и анализировать детали ссылок запроса, например, запрашивать время обработки каждого запроса пользователя в течение определенного периода времени. Zipkin предоставляет подключаемые методы хранения данных: In-Memory, MySql, Cassandra и Elasticsearch. В следующем тесте, чтобы напрямую использовать метод In-Memory для хранения, Elasticsearch рекомендуется для производства.
На приведенном выше рисунке показана инфраструктура Zipkin, которая в основном состоит из 4 основных компонентов:
- Collector: компонент Collector, который в основном используется для обработки информации отслеживания, отправленной из внешней системы, и преобразования информации в формат Span, обрабатываемый внутри Zipkin, для поддержки последующего хранения, анализа, отображения и других функций.
- Хранилище: компонент хранилища, который в основном обрабатывает информацию об отслеживании, полученную сборщиком. По умолчанию эта информация хранится в памяти. Мы также можем изменить эту стратегию хранения, чтобы хранить информацию об отслеживании в базе данных с помощью других компонентов хранилища.
- RESTful API: компоненты API, которые в основном используются для предоставления внешних интерфейсов доступа. Например, отображение информации об отслеживании клиенту или доступ к внешней системе для мониторинга и т. д.
- Веб-интерфейс: компоненты пользовательского интерфейса, приложения верхнего уровня, реализованные на основе компонентов API. С помощью компонентов пользовательского интерфейса пользователи могут легко и интуитивно запрашивать и анализировать информацию о трассировке.
Дело боевое
В этом случае есть три приложения, а именно центр регистрации, eureka-server, eureka-client и eureka-client-feign.Основная информация о трех приложениях следующая:
Название приложения | порт | эффект |
---|---|---|
eureka-server | 8761 | Регистрационный центр |
eureka-client | 8763 | поставщики услуг |
eureka-client-feign | 8765 | потребители услуг |
Приложение eureka-server является реестром, и два других приложения регистрируются в нем. eureka-client — это поставщик услуг, предоставляющий REST API, eureka-client-feign — потребитель услуг, который использует услуги от поставщика услуг через Feign Client.
В предыдущей статье уже было описано, как создать реестр службы, поэтому здесь эта часть опущена. Поставщик службы предоставляет интерфейс REST, а потребитель службы использует службу через FeignClient.
поставщики услуг
Поставщик услуг eureka-client предоставляет REST API внешнему миру и регистрируется в реестре услуг.Эта часть контента не будет повторно описываться, см. исходный код. Вам нужно добавить стартовые зависимости sleuth и zipkin в pom-файл проекта, код выглядит следующим образом:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
В файле конфигурации проекта application.yml необходимо выполнить следующую настройку:
spring:
sleuth:
web:
client:
enabled: true
sampler:
probability: 1.0 # 将采样比例设置为 1.0,也就是全部都需要。默认是 0.1
zipkin:
base-url: http://localhost:9411/ # 指定了 Zipkin 服务器的地址
Среди них для параметра spring.sleuth.web.client.enable установлено значение true, чтобы включить функцию веб-искателя, для параметра spring.sleuth.sampler.probability может быть задано десятичное число, а максимальное значение равно 1,0. , собирается 100% данных о ссылке zipkin-server, при значении 0.1, то есть 10% вероятность сбора данных о ссылке, spring.zipkin.base-url задает адрес zipkin-сервера.
Предоставьте API извне, код выглядит следующим образом:
@RestController
public class HiController {
@Value("${server.port}")
String port;
@GetMapping("/hi")
public String home(@RequestParam String name) {
return "hi "+name+",i am from port:" +port;
}
}
потребители услуг
Потребители услуг потребляют услуги, предоставляемые поставщиками услуг через FeignClient. Как и поставщику услуг, вам необходимо добавить начальные зависимости sleuth и zipkin в pom-файл проекта, а также необходимо выполнить соответствующую настройку в файле конфигурации application.yml, который совпадает с поставщиком услуг.
Потребители услуг потребляют услуги через feignClient. Код feignclient выглядит следующим образом:
@FeignClient(value = "eureka-client",configuration = FeignConfig.class)
public interface EurekaClientFeign {
@GetMapping(value = "/hi")
String sayHiFromClientEureka(@RequestParam(value = "name") String name);
}
Код сервисного уровня выглядит следующим образом:
@Service
public class HiService {
@Autowired
EurekaClientFeign eurekaClientFeign;
public String sayHi(String name){
return eurekaClientFeign.sayHiFromClientEureka(name);
}
}
Код контроллера следующий:
@RestController
public class HiController {
@Autowired
HiService hiService;
@GetMapping("/hi")
public String sayHi(@RequestParam( defaultValue = "forezp",required = false)String name){
return hiService.sayHi(name);
}
Приведенный выше код предоставляет API для вызова службы eureka-client через FeignClient.
zipkin-server
В версии Spring Cloud D zipkin-сервер строит проекты путем введения зависимостей, начиная с версии E этот метод изменился и запускается в виде официального jar, поэтому его нужно запускать скачав официальный jar, а также через следующие команда одна клавиша для запуска:
curl -sSL https://zipkin.io/quickstart.sh | bash -s
java -jar zipkin.jar
Первая строка команды выше загрузит официальный пакет jar с официального сайта zipkin. Если это оконная система, рекомендуется использовать gitbash для выполнения вышеуказанной команды.
Если вы используете Docker, используйте следующую команду:
docker run -d -p 9411:9411 openzipkin/zipkin
После запуска с помощью java -jar zipkin.jar откройте lcoalhost:9411 в браузере, отображаемый интерфейс выглядит следующим образом:
Проверка данных ссылки
Запустите по очереди три приложения: eureka-server, eureka-client и eureka-client-feign.После запуска всех приложений зайдите на http://localhost:8765/hi в браузере требуется для обслуживания и обнаружения. Через определенный промежуток времени терпеливо подождите десятки секунд), после успешного посещения снова посетите страницу zipkin-сервера в браузере, дисплей будет выглядеть следующим образом:
На приведенном выше рисунке вы можете увидеть время, затраченное на каждый запрос, а также некоторую информацию о диапазоне.
На приведенном выше рисунке мы видим конкретные зависимости службы, eureka-feign-client зависит от eureka-client.
Связать сбор данных с помощью rabbitmq
Метод HTTP-запроса, используемый в приведенном выше случае, отправляет данные ссылки на zipkin-сервер, Фактически, метод rabbitmq также может использоваться для потребления службы. Для использования rabbitmq необходимо установить программу rabbitmq, адрес загрузки http://www.rabbitmq.com/.
После завершения загрузки вам потребуются начальные зависимости eureka-client и eureka-client-feign, а также зависимость rabbitmq.
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
Конфигурация rabbitmq должна быть настроена в файле конфигурации.Информация о конфигурации выглядит следующим образом:
spring:
rabbitmq:
host: localhost
username: guest
password: guest
port: 5672
Кроме того, вам нужно удалить spring.zipkin.base-url.
В приведенных выше двух проектах rabbitmq отправляет данные ссылки, так как же zipkin-server узнает адрес rabbitmq и как он отслеживает полученные данные ссылки? Это нужно передать в среду в виде переменных среды при запуске программы, а затем zikin-server читает из переменных среды. Настраиваемые свойства следующие:
Атрибуты | переменная среды | описывать |
---|---|---|
zipkin.collector.rabbitmq.addresses | RABBIT_ADDRESSES | Список адресов RabbitMQ, разделенных запятыми, например, localhost:5672,localhost:5673. |
zipkin.collector.rabbitmq.password | RABBIT_PASSWORD | Пароль для использования при подключении к RabbitMQ, по умолчанию гость |
zipkin.collector.rabbitmq.username | RABBIT_USER | Имя пользователя для использования при подключении к RabbitMQ, по умолчанию гостевой |
zipkin.collector.rabbitmq.virtual-host | RABBIT_VIRTUAL_HOST | Виртуальный хост RabbitMQ для использования, по умолчанию / |
zipkin.collector.rabbitmq.use-ssl | RABBIT_USE_SSL | Установите значение true, чтобы установить связь с RabbitMQ с использованием SSL. |
zipkin.collector.rabbitmq.concurrency | RABBIT_CONCURRENCY | Количество одновременных потребителей, по умолчанию 1 |
zipkin.collector.rabbitmq.connection-timeout | RABBIT_CONNECTION_TIMEOUT | Таймаут при установлении соединения, по умолчанию 60000 миллисекунд, что равно 1 минуте |
zipkin.collector.rabbitmq.queue | RABBIT_QUEUE | Диапазон, из которого можно получить информацию об очереди, по умолчанию — zipkin |
Например, запустите его с помощью следующей команды:
RABBIT_ADDRESSES=localhost java -jar zipkin.jar
Приведенная выше команда эквивалентна следующей команде:
java -jar zipkin.jar --zipkin.collector.rabbitmq.addressed=localhost
Перезапустите программу zipkin-server с помощью любой из двух вышеперечисленных команд и перезапустите eureka-client, eureka-server, eureka-client-feign и посетите http://localhost в браузере после завершения операции: 8765/hi, а затем посетите http://localhost:9411/zipkin/, вы можете увидеть тот же интерфейс для отправки данных ссылки через Http.
Пользовательский тег
Вы можете просмотреть traceId каждого запроса на странице. Каждая трассировка содержит несколько диапазонов, а каждый диапазон содержит много тегов. Пользовательские теги можно настроить с помощью класса Tracer.
@Autowired
Tracer tracer;
@GetMapping("/hi")
public String home(@RequestParam String name) {
tracer.currentSpan().tag("name","forezp");
return "hi "+name+",i am from port:" +port;
}
Хранить данные о ссылках в базе данных Mysql
В приведенном выше примере данные ссылки хранятся в памяти. Пока zipkin-сервер перезагружается, все предыдущие данные ссылки не могут быть найдены. Zipkin поддерживает сохранение данных ссылки в mysql, cassandra и elasticsearch. Теперь объясните, как хранить данные о ссылках в базе данных Mysql. Во-первых, вам нужно инициализировать схему данных, хранящихся в Mysql с помощью zikin, вы можете просмотреть https://github.com/openzipkin/zipkin/blob/master/zipkin-storage/mysql-v1/src/main/resources/ mysql.sql здесь, детали следующим образом:
CREATE TABLE IF NOT EXISTS zipkin_spans (
`trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',
`trace_id` BIGINT NOT NULL,
`id` BIGINT NOT NULL,
`name` VARCHAR(255) NOT NULL,
`parent_id` BIGINT,
`debug` BIT(1),
`start_ts` BIGINT COMMENT 'Span.timestamp(): epoch micros used for endTs query and to implement TTL',
`duration` BIGINT COMMENT 'Span.duration(): micros used for minDuration and maxDuration query'
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;
ALTER TABLE zipkin_spans ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `id`) COMMENT 'ignore insert on duplicate';
ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`, `id`) COMMENT 'for joining with zipkin_annotations';
ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for getTracesByIds';
ALTER TABLE zipkin_spans ADD INDEX(`name`) COMMENT 'for getTraces and getSpanNames';
ALTER TABLE zipkin_spans ADD INDEX(`start_ts`) COMMENT 'for getTraces ordering and range';
CREATE TABLE IF NOT EXISTS zipkin_annotations (
`trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',
`trace_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.trace_id',
`span_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.id',
`a_key` VARCHAR(255) NOT NULL COMMENT 'BinaryAnnotation.key or Annotation.value if type == -1',
`a_value` BLOB COMMENT 'BinaryAnnotation.value(), which must be smaller than 64KB',
`a_type` INT NOT NULL COMMENT 'BinaryAnnotation.type() or -1 if Annotation',
`a_timestamp` BIGINT COMMENT 'Used to implement TTL; Annotation.timestamp or zipkin_spans.timestamp',
`endpoint_ipv4` INT COMMENT 'Null when Binary/Annotation.endpoint is null',
`endpoint_ipv6` BINARY(16) COMMENT 'Null when Binary/Annotation.endpoint is null, or no IPv6 address',
`endpoint_port` SMALLINT COMMENT 'Null when Binary/Annotation.endpoint is null',
`endpoint_service_name` VARCHAR(255) COMMENT 'Null when Binary/Annotation.endpoint is null'
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;
ALTER TABLE zipkin_annotations ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `span_id`, `a_key`, `a_timestamp`) COMMENT 'Ignore insert on duplicate';
ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`, `span_id`) COMMENT 'for joining with zipkin_spans';
ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for getTraces/ByIds';
ALTER TABLE zipkin_annotations ADD INDEX(`endpoint_service_name`) COMMENT 'for getTraces and getServiceNames';
ALTER TABLE zipkin_annotations ADD INDEX(`a_type`) COMMENT 'for getTraces and autocomplete values';
ALTER TABLE zipkin_annotations ADD INDEX(`a_key`) COMMENT 'for getTraces and autocomplete values';
ALTER TABLE zipkin_annotations ADD INDEX(`trace_id`, `span_id`, `a_key`) COMMENT 'for dependencies job';
CREATE TABLE IF NOT EXISTS zipkin_dependencies (
`day` DATE NOT NULL,
`parent` VARCHAR(255) NOT NULL,
`child` VARCHAR(255) NOT NULL,
`call_count` BIGINT,
`error_count` BIGINT
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;
ALTER TABLE zipkin_dependencies ADD UNIQUE KEY(`day`, `parent`, `child`);
После инициализации приведенного выше скрипта в базе данных все, что нужно сделать, — это подключить zipkin-сервер к базе данных. Как zipkin подключается к базе данных, так же, как и к rabbitmq. Переменные среды, соответствующие свойствам базы данных соединений zipkin, следующие:
Атрибуты | переменная среды | описывать |
---|---|---|
zipkin.torage.type | STORAGE_TYPE | По умолчанию используется mem, то есть память, и другие поддерживаемые: cassandra, cassandra3, elasticsearch, mysql. |
zipkin.torage.mysql.host | MYSQL_HOST | Хост базы данных, по умолчанию — localhost |
zipkin.torage.mysql.port | MYSQL_TCP_PORT | Порт базы данных, по умолчанию 3306 |
zipkin.torage.mysql.username | MYSQL_USER | Имя пользователя для подключения к базе данных, по умолчанию пусто |
zipkin.torage.mysql.password | MYSQL_PASS | Пароль для подключения к базе данных, по умолчанию пустой |
zipkin.torage.mysql.db | MYSQL_DB | Имя базы данных, используемое zipkin, по умолчанию — zipkin. |
zipkin.torage.mysql.max-active | MYSQL_MAX_CONNECTIONS | Максимальное количество подключений, по умолчанию 10 |
STORAGE_TYPE=mysql MYSQL_HOST=localhost MYSQL_TCP_PORT=3306 MYSQL_USER=root MYSQL_PASS=123456 MYSQL_DB=zipkin java -jar zipkin.jar
эквивалентна следующей команде
java -jar zipkin.jar --zipkin.torage.type=mysql --zipkin.torage.mysql.host=localhost --zipkin.torage.mysql.port=3306 --zipkin.torage.mysql.username=root --zipkin.torage.mysql.password=123456
Используйте приведенную выше команду, чтобы запустить проект zipkin.jar, затем просмотрите данные, чтобы посетить http://localhost:8765/hi, а затем посетите http://localhost:9411/zipkin/, вы можете увидеть данные ссылки. В это время перейдите в базу данных, чтобы просмотреть данные, и вы также можете увидеть данные ссылки, хранящиеся в базе данных, следующим образом:
В это время перезапустите приложение zipkin.jar и снова посетите http://localhost:9411/zipkin/ в браузере.Предыдущий результат все еще может быть получен, что доказывает, что данные ссылки хранятся в базе данных, а не в Память.
Существующие данные о ссылках в Elasticsearch
zipkin-server поддерживает хранение данных ссылок в ElasticSearch. Читателям необходимо самостоятельно установить ElasticSearch и Kibana, а адрес загрузки — https://www.elastic.co/products/harsh…
Точно так же соединение zipkin с elasticsearch также считывается из переменных среды.Переменные среды, связанные с elasticsearch, и соответствующие свойства:
Атрибуты | переменная среды | описывать |
---|---|---|
zipkin.torage.elasticsearch.hosts | ES_HOSTS | ES_HOSTS, по умолчанию пустой |
zipkin.torage.elasticsearch.pipeline | ES_PIPELINE | ES_PIPELINE, по умолчанию пусто |
zipkin.torage.elasticsearch.max-requests | ES_MAX_REQUESTS | ES_MAX_REQUESTS, по умолчанию 64 |
zipkin.torage.elasticsearch.timeout | ES_TIMEOUT | ES_TIMEOUT, по умолчанию 10 с. |
zipkin.torage.elasticsearch.index | ES_INDEX | ES_INDEX, по умолчанию zipkin |
zipkin.torage.elasticsearch.date-separator | ES_DATE_SEPARATOR | ES_DATE_SEPARATOR, по умолчанию "-" |
zipkin.torage.elasticsearch.index-shards | ES_INDEX_SHARDS | Es_index_shards, по умолчанию 5 |
zipkin.torage.elasticsearch.index-replicas | ES_INDEX_REPLICAS | ES_INDEX_REPLICAS, по умолчанию 1 |
zipkin.torage.elasticsearch.username | ES_USERNAME | Имя пользователя ES, по умолчанию пусто |
zipkin.torage.elasticsearch.password | ES_PASSWORD | Пароль ES, по умолчанию пустой |
Запустите zipkin-сервер следующей командой:
STORAGE_TYPE=elasticsearch ES_HOSTS=http://localhost:9200 ES_INDEX=zipkin java -jar zipkin.jar
java -jar zipkin.jar --STORAGE_TYPE=elasticsearch --ES_HOSTS=http://localhost:9200 --ES_INDEX=zipkin
java -jar zipkin.jar --STORAGE_TYPE=elasticsearch --ES_HOSTS=http://localhost:9200 --ES_INDEX=zipkin
java -jar zipkin.jar --zipkin.torage.type=elasticsearch --zipkin.torage.elasticsearch.hosts=http://localhost:9200 --zipkin.torage.elasticsearch.index=zipkin
После завершения запуска посетите http://localhost:8765/hi в данных просмотра, а затем посетите http://localhost:9411/zipkin/, вы увидите данные ссылки. В настоящее время данные ссылки хранятся в ElasticSearch.
Отображать данные ссылки на zipkin
Данные о ссылках хранятся в ElasticSearch. ElasticSearch можно комбинировать с Kibana для отображения данных о ссылках в Kibana. После установки и запуска Kibana Kibana будет считывать данные в ElasticSearch, чей локальный порт по умолчанию — 9200. Порт Kibana по умолчанию — 5601. Посетите домашнюю страницу Kibana http://localhost:5601, ее интерфейс показан на рисунке ниже.
В интерфейсе, показанном выше, нажмите кнопку «Управление», а затем нажмите «Добавить новый», чтобы добавить индекс. Мы настроим индекс данных ссылки, записанных в ElasticSearch в предыдущем разделе, на «zipkin», затем заполним «zipkin-*» в интерфейсе, нажмите кнопку «Создать», интерфейс показан ниже:
После создания индекса нажмите «Обнаружить», чтобы отобразить данные ссылки в интерфейсе, как показано на следующем рисунке.
использованная литература
GitHub.com/spring - уродливо...
cloud.spring.IO/spring - уродливый...
сегмент fault.com/ah/119000001…
Эластичная версия 2.6.x, адрес загрузки:Woohoo.elastic.co/downloads/ Боюсь…
woo woo woo.cn blog on.com/JRE Crocodile Q i/Fear/9…
Отсканируйте код, чтобы следовать за сюрпризом
(Просьба указывать автора и источник при перепечатке статей с этого сайтаБлог Фан Чжипэна)