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
, ниже приведены конкретные шаги по развертыванию агента:
- Изменить конфигурации
Измените файл конфигурации 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. Проверка доступа
- Показатели и данные отслеживания
Мы используем 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.
Итак, нам нужно их настроить:
- Скачать файлы
Сначала загрузите следующие зависимости 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:
Соавторы
Пинчуань Цзян
Старший инженер промежуточного программного обеспечения SphereEx, участник Apache Tomcat и Apache ShardingSphere.
Энтузиаст технологии с открытым исходным кодом, Пинчуань посвятил себя разработке SphereEx-Console и SphereEx-Boot.
Маолинь Цзян
Старший инженер промежуточного программного обеспечения SphereEx и участник Apache ShardingSphere.