Apache ShardingSphere следует за Database Plus — руководящей концепцией разработки нашего сообщества для создания полной экосистемы службы данных, которая позволяет преобразовать любую базу данных в систему распределенной базы данных и легко расширить ее с помощью сегментирования, гибкого масштабирования, функций шифрования данных и многого другого.

Пользователям часто необходимо отслеживать производительность Apache ShardingSphere в реальном сценарии приложения, чтобы найти конкретные проблемы.

Само собой разумеется, что мониторинг производительности приложений (APM) может отслеживать и диагностировать производительность системы путем сбора, хранения и анализа наблюдаемых данных. Он также объединяет такие функции, как показатели производительности, анализ трассировки, отображение топологии приложений и т. д.

Он извлекает наблюдаемые данные из системных операций, используя трассировку, метрики и ведение журнала. Apache ShardingSphere предоставляет пользователям функцию наблюдения.

Цели

Apache ShardingSphere позволяет разработчикам настраивать вывод журналов. Основная цель текущей функции Observability — предоставить пользователям необходимые метрики и данные отслеживания.

Дизайн

Мы выбрали общий метод агента для идеальной реализации Observability с помощью ByteBuddy (библиотека генерации кода, которая позволяет разработчикам изменять классы Java (включая произвольные) во время выполнения приложения без использования компилятора и агента Java.

Мы применяем дизайн, ориентированный на плагины, для лучшей поддержки различных фреймворков или систем с метриками и трассировкой. Соответственно, пользователям разрешается настраивать функцию или разрабатывать дополнительные бизнес-компоненты самостоятельно.

В настоящее время модуль агента Apache ShardingSphere поддерживает Prometheus, Zipkin, Jaeger, SkyWalking и OpenTelemetry.

Пример

В следующем примере мы развертываем подключаемые модули наблюдаемых данных Prometheus и Zipkin на Apache ShardingSphere-Proxy, чтобы продемонстрировать, как использовать модуль Apache ShardingSphere Agent.

Шаг 1. Установите необходимое программное обеспечение

  • prometheus-2.32.1.linux-amd64.tar.gz (https://prometheus.io/download)
  • zipkin-server-2.23.9-exec.jar (https://zipkin.io/pages/quickstart.html)
  • apache-shardingsphere-5.1.0-SNAPSHOT-shardingsphere-proxy-bin.tar.gz
  • apache-shardingsphere-5.1.0-SNAPSHOT-shardingsphere-agent-bin.tar.gz
  • MySQL 5.7.34

Шаг 2. Развертывание

  • Порт

Сервер Прометей:9090

Сервер Zipkin:9411

Apache ShardingSphere-Proxy:3307

Агент Apache ShardingSphere (плагин Prometheus): 9000

Прометей

Во-первых, добавьте объекты мониторинга в Prometheus. В этом случае нам нужно добавить адрес порта Apache ShardingSphere Agent 9000 в файл конфигурации Prometheus prometheus.yml.

vi prometheus.yml

Добавьте следующий код под static_configs в файл:

- targets: ["localhost:9000"]

Затем инициируйте:

./prometheus &

Зипкин

Zipkin проще в использовании. Запустите его, введя следующую команду в каталог Zipkin Server:

java -jar zipkin-server-2.23.9-exec.jar &

Apache ShardingSphere

Чтобы развернуть Apache ShardingSphere-Proxy и Agent, обратитесь к официальному руководству пользователя.

Предполагая, что и прокси, и агент находятся в каталоге /tmp, ниже приведены конкретные шаги по развертыванию агента:

  1. Изменить конфигурации

Измените файл конфигурации agent.yaml.

Затем запустите плагины Prometheus и Zipkin и измените данные порта Prometheus на 9000 в соответствии с вышеупомянутыми настройками порта:

applicationName: shardingsphere-agent
ignoredPluginNames:
- Jaeger
- OpenTracing
- OpenTelemetry
- Logging
plugins:
Prometheus:
host:  "localhost"
port: 9000
props:
JVM_INFORMATION_COLLECTOR_ENABLED : "true"
Jaeger:
host: "localhost"
port: 5775
props:
SERVICE_NAME: "shardingsphere-agent"
JAEGER_SAMPLER_TYPE: "const"
JAEGER_SAMPLER_PARAM: "1"
Zipkin:
host: "localhost"
port: 9411
props:
SERVICE_NAME: "shardingsphere-agent"
URL_VERSION: "/api/v2/spans"
SAMPLER_TYPE: "const"
SAMPLER_PARAM: "1"
OpenTracing:
props:
OPENTRACING_TRACER_CLASS_NAME: "org.apache.skywalking.apm.toolkit.opentracing.SkywalkingTracer"
OpenTelemetry:
props:
otel.resource.attributes: "service.name=shardingsphere-agent"
otel.traces.exporter: "zipkin"
Logging:
props:
LEVEL: "INFO"

2. Добавить в команду "Пуск"

Измените файл /tmp/apache-shardingsphere-5.1.0-shardingsphere-proxy-bin/bin/start.sh и добавьте абсолютный путь агента shardingsphere-agent.jar в сценарий запуска.

До

nohup java ${JAVA_OPTS} ${JAVA_MEM_OPTS} \
-classpath ${CLASS_PATH} ${MAIN_CLASS} >> ${STDOUT_FILE} 2>&1 &

После

nohup java ${JAVA_OPTS} ${JAVA_MEM_OPTS} \
-javaagent:/tmp/apache-shardingsphere-5.1.0-shardingsphere-agent-bin/shardingsphere-agent.jar \
-classpath ${CLASS_PATH} ${MAIN_CLASS} >> ${STDOUT_FILE} 2>&1 &

3. Инициировать

Теперь мы готовы инициировать их в каталоге Proxy:

bin/start.sh

Шаг 3. Проверка доступа

  1. Показатели и данные отслеживания

Мы используем config-sharding.yaml, сценарий конфигурации сегментирования по умолчанию, предоставляемый Apache ShardingSphere-Proxy, для проверки доступа и отображения данных.

  • Подключитесь к инициированному ShardingSphere-Proxy с помощью командной строки MySQL.

  • Изучите результаты данных в Prometheus Server и Zipkin Server

Запросите proxy_info и получите результаты данных через Prometheus Web.

Просмотрите информацию о трассировке Zipkin Web после подключения к клиенту MySQL:

  • Запрос данных через командную строку MySQL:

  • Изучите результаты данных Prometheus Server и Zipkin Server

Запросите parse_sql_dml_select_total результаты данных через Prometheus Web.

Запросите информацию о трассировке через Zipkin Web:

Путем тщательного поиска Span мы можем проверить статус трассировки оператора SQL select * from t_order.

Отображение топологии

Мы не можем найти отображения топологии, когда проверяем зависимости через Zipkin Web.

Итак, нам нужно их настроить:

  1. Скачать файлы

Сначала загрузите следующие зависимости Zipkin и скопируйте их в каталог lib прокси.

2. Изменить конфигурации

Настройте файл конфигурации источника данных config-sharding.yaml, который находится в каталоге conf прокси-сервера, и добавьте следующую конфигурацию к URL-адресу, соответствующему нижнему источнику данных узла config-sharding.YAML dataSources:

MySQL 5.x:statementInterceptors=brave.mysql.TracingStatementInterceptor

Или MySQL 8.x:queryInterceptors=brave.mysql8.TracingQueryInterceptor

  • Перезапустите ShardingSphere-Proxy

Выполнив тот же тест доступа, что и раньше, мы можем просмотреть зависимости через Zipkin Web и увидеть следующие сопоставления топологии:

Частота выборки

Плагин Observability также позволяет пользователям устанавливать различную частоту дискретизации в соответствии с различными сценариями. Плагины Zipkin поддерживают различные конфигурации типов частоты дискретизации, включая константу, подсчет, ограничение скорости и границу.

Для сценариев с большим объемом запросов мы предлагаем вам выбрать тип границы и настроить его с соответствующей частотой дискретизации, чтобы уменьшить объем собираемых данных трассировки.

Zipkin:
host: "localhost"
port: 9411
props:
SERVICE_NAME: "shardingsphere-agent"
URL_VERSION: "/api/v2/spans"
SAMPLER_TYPE: "boundary"
SAMPLER_PARAM: "0.001"

Краткое содержание

Плагин Observibility по умолчанию совместим со многими распространенными платформами и системами мониторинга, поэтому пользователи могут легко отслеживать и управлять Apache ShardingSphere.

В будущем мы продолжим расширять возможности мониторинга.

Ссылки на проекты с открытым исходным кодом Apache ShardingSphere:

ШардингСфера Гитхаб

ШардингСфера Твиттер

ShardingSphere Slack

Руководство для авторов

Соавторы

Пинчуань Цзян

Старший инженер промежуточного программного обеспечения SphereEx, участник Apache Tomcat и Apache ShardingSphere.

Энтузиаст технологии с открытым исходным кодом, Пинчуань посвятил себя разработке SphereEx-Console и SphereEx-Boot.

Маолинь Цзян

Старший инженер промежуточного программного обеспечения SphereEx и участник Apache ShardingSphere.