Введение в компоненты мониторинга KaiwuDB и вспомогательную настройку SQL

17291208:

1. Введение

KaiwuDB имеет полную функцию сбора поведенческих данных. Эта функция требует, чтобы система базы данных KaiwuDB на стороне C/E/T имела полные функции сбора индикаторов в разных измерениях в разных процессах; после того, как разные процессы завершат сбор индикаторов, индикаторы будут сохранены в Opentelemetry и Коллекционер Прометей для поиска экспонатов.

Opentelemetry — это инструмент для распределенной трассировки и мониторинга производительности нескольких служб и систем, который помогает собирать, записывать и анализировать различные данные для вашего приложения.

Одним из компонентов является Opentelemetry Collector, который предоставляет сборщик данных общего назначения, который может собирать и преобразовывать данные из нескольких источников данных и отправлять их на несколько целевых платформ хранения или анализа.

1. Основные функции Opentelemetry Collector

  • Сбор данных: Opentelemetry Collector может собирать данные из нескольких источников данных, включая OpenTracing, OpenCensus, Jaeger, Zipkin и Prometheus;

  • Преобразование данных: Opentelemetry Collector может преобразовывать данные, собранные из разных источников, в единый формат для удобной передачи, хранения и анализа;

  • Экспорт данных: Opentelemetry Collector может экспортировать преобразованные данные в несколько целевых хранилищ или аналитических платформ, включая Kafka, AWS S3, Google Cloud Storage, Elasticsearch, Prometheus, Zipkin и другие.

2. Получение коллектора Opentelemetry.

Opentelemetry Collector — это проект с открытым исходным кодом. Вы можете просмотреть и получить исходный код и версию выпуска на github https://github.com/open-telemetry/opentelemetry-collector.


git clone [email protected]:open-telemetry/opentelemetry-collector.git

Вы также можете вытащить образ через докер:


docker pull otel/opentelemetry-collector:0.78.0

2. Мониторинг и использование

Opentelemetry Collector отслеживает базы данных для сбора показателей производительности и поведения базы данных. Он может работать с использованием API OpenTelemetry или доступных драйверов базы данных для сбора следующих показателей:

  • Время ответа. Время ответа на запросы к базе данных можно измерить, чтобы определить производительность и эффективность запросов;

  • Частота ошибок: позволяет определить, возникли ли в базе данных ошибки и сколько запросов не удалось выполнить в процессе запроса;

  • Количество подключений: количество открытых подключений к базе данных можно измерить, чтобы определить, сколько клиентов подключаются;

  • Эффективность кэша. Вы можете понять, использует ли база данных кеш, и определить частоту попадания в кеш;

  • Соотношение чтения и записи. Вы можете понять, сколько запросов к базе данных приходится на операции чтения и операции записи.

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

Процесс сбора индикаторов в Opentelemetry выглядит следующим образом:

MetricReader будет периодически вызывать метод Collect MetricCollector. В методе Collect MetricCollector все индикаторы в MeterProvider будут просматриваться, упаковываться и возвращаться в MetricReader. Затем индикаторы будут отправляться в OpenTelemetry-Collector по протоколу http через метод Expor. .

Opentelemetry Collector поддерживает сбор данных индикаторов из источников данных Prometheus и преобразование их в стандартный формат OpenTelemetry для облегчения создания кросс-платформенных и кросс-языковых приложений. Ниже приведены инструкции по использованию Opentelemetry Collector для сбора и обработки данных метрик из источника данных Prometheus:

1. Размещение коллектора открытой телеметрии

Конфигурация Opentelemetry Collector может состоять из следующих частей:

  • Получатель: Получатель, то есть форма источника данных, полученная Сборщиком;

  • Процессор: плагин, аналогичный обработке данных, который выполняется между получателем и экспортером;

  • Экспортер: Экспортер, то есть форма вывода источника данных Коллектором;

  • Служба: этот раздел используется для настройки функций, которые OpenTelemetry Collector будет включать на основе приведенной выше конфигурации.

2. Запустите сборщик Opentelemetry.

При запуске сборщика Opentelemetry вы можете использовать командную строку или файл конфигурации, чтобы указать источник данных и целевую платформу хранения или анализа для сбора и экспорта.


# start collector using the configuration file
$ ./otelcol --config collector-config.yaml

Вы также можете использовать Docker для запуска образа:

ocker run -v $(pwd)/config.yaml:/etc/otelcol-contrib/config.yaml otel/opentelemetry-collector:0.78.0

Создание данных метрик в клиентском приложении Чтобы отправить данные метрик в сборщик Opentelemetry, клиентскому приложению необходимо использовать соответствующий API и конфигурацию для генерации данных метрик. Ниже приведен пример кода для отправки данных индикатора с помощью приложения C++:

#include <opentelemetry/sdk/metrics/meter.h>
#include <opentelemetry/exporters/otlp/otlp_http/otlp_http_exporter.h>
#include <opentelemetry/sdk/metrics/controller.h>
#include <opentelemetry/sdk/metrics/processormetrics.h>
#include <iostream>
using namespace opentelemetry::sdk::metrics;
using namespace opentelemetry::exporter::otlphttp;
 int main()
{
  try
  {
    // Create a metric exporter
    OtlpHttpExporterOptions opts;
    opts.url = "http://localhost:4317/v1/metrics";
    auto exporter = std::unique_ptr<OtlpHttpExporter>(new OtlpHttpExporter(opts));
     // Create a processor
    std::unique_ptr<Processor> processor(new Processor());
     // Create a controller
    auto controller = std::make_shared<Controller>(std::move(processor), std::chrono::system_clock::now());
     // Create a meter
    auto meter = controller->provider().GetMeter("example");
     // Define a counter metric
    auto counter = meter->NewIntCounter("example_counter", "counts", "1");
     // Record some data
    for (int i = 0; i < 10; i++)
    {
      counter->Add(i, {{"key", "value"}});
    }
     // Shutdown the controller
    controller->Shutdown().wait();
  }
  catch (const std::exception& e)
  {
    std::cerr << "Exception caught: " << e.what() << std::endl;
    return 1;
  }
   return 0;
}

В этом примере экспортер, процессор и контроллер метрик создаются с помощью пакета SDK OpenTelemetry C++, а метрика счетчика создается с помощью счетчика. Затем он записывает 10 значений счетчика с помощью метода Add и отправляет данные метрики в сборщик OpenTelemetry.

3. Анализируйте и визуализируйте данные

С помощью Opentelemetry Collector мы можем экспортировать данные метрик из источников данных Prometheus на несколько целевых платформ хранения или анализа. Ниже приведен пример конфигурации для экспорта данных метрик в Prometheus:


receivers:
  prometheus:
    config:
      scrape_configs:
        - job_name: 'my-service'
          scrape_interval: 30s
          static_configs:
            - targets: ['localhost:9080/metrics'] # replace with your collector's target
processors:
  batch:
exporters:
  prometheus:
    namespace: my-service
    endpoint: '0.0.0.0:8080' # replace with your prometheus server's endpoint
service:
  pipelines:
    metrics:
      receivers: [prometheus]
      processors: [batch]
      exporters: [prometheus]

В этом файле конфигурации мы определяем экспортер с именем «prometheus» и устанавливаем пространство имен экспорта и адрес конечной точки сервера Prometheus. Экспортируя данные метрик в Prometheus, мы можем использовать язык запросов Prometheus, PromQL, для анализа и визуализации данных.

При мониторинге KaiwuDB API Metrics Opentelemetry используется для создания методов Gauge и Counter и регистрации их в MeterProvider opentelemetry. В то же время используйте экспортер otlp для отправки данных метрик в удаленный сборщик OTLP.


opentelemetry::exporter::otlp::OtlpHttpMetricExporterOptions opts;
int interval, timeout;     
ZString ot_url = GetSysConfig("METRICS_PLUGIN", "url");
ZString interval_s = GetSysConfig("METRICS_PLUGIN", "interval");
ZString timeout_s = GetSysConfig("METRICS_PLUGIN", "timeout");
interval = atoi(interval_s.c_str());
timeout = atoi(timeout_s.c_str());
if (ot_url != "")
{
    opts.url = ot_url;
}
else
{
    opts.url = "http://localhost:4318/v1/metrics";
}
// Create OTLP exporter instance
auto exporter = otlp::OtlpHttpMetricExporterFactory::Create(opts);
// Initialize and set the global MeterProvider
metric_sdk::PeriodicExportingMetricReaderOptions options;
options.export_interval_millis = std::chrono::milliseconds(interval);
options.export_timeout_millis = std::chrono::milliseconds(timeout);

// Initialize the reader
std::unique_ptr<metric_sdk::MetricReader> reader{
    new metric_sdk::PeriodicExportingMetricReader(std::move(exporter), options)};
// Initialize the provider
auto resource_attributes = opentelemetry::sdk::resource::ResourceAttributes{
    {"service.name", "service"}};
auto resource = opentelemetry::sdk::resource::Resource::Create(resource_attributes);
auto provider = std::shared_ptr<metrics_api::MeterProvider>(new metric_sdk::MeterProvider(std::unique_ptr<opentelemetry::v1::sdk::metrics::ViewRegistry>(new opentelemetry::v1::sdk::metrics::ViewRegistry()), resource));
auto p = std::static_pointer_cast<metric_sdk::MeterProvider>(provider);
p->AddMetricReader(std::move(reader));
metrics_api::Provider::SetMeterProvider(provider);

Приведенный выше код используется в KaiwuDB для настройки и инициализации экспортера OTLP OpenTelemetry для отправки данных индикатора в указанную серверную службу.

После запуска сборщика Opentelemetry вы можете запросить соответствующие данные мониторинга через определенный URL-адрес: http://localhost:4318/v1/metrics. Данные Promtheus получены из KaiwuDB. Пример сбора выглядит следующим образом:

# HELP sys_connection_max_count 
# TYPE sys_connection_max_count gauge
sys_connection_max_count{clusterId="60a10600-497b-4186-88d0-bacafe0a1857",job="KWDB",nodeName="e1Primary",nodeType="E:ME"} 100
# HELP sys_connection_used_count 
# TYPE sys_connection_used_count gauge
sys_connection_used_count{clusterId="60a10600-497b-4186-88d0-bacafe0a1857",job="KWDB",nodeName="e1Primary",nodeType="E:AE"} 0

3. Роль индикаторов мониторинга в настройке SQL

В KaiwuDB мониторинг производительности включает следующие показатели:

После подключения к KaiwuDB  получите соответствующие показатели мониторинга через http://localhost:4318/v1/metrics.

Используйте следующий SQL для запроса:

Повторный запрос индикаторов мониторинга показывает, что загрузка ЦП значительно возросла.

Поскольку этот оператор SQL использует подстановочные знаки (%) для нечеткого сопоставления строк в столбце, если объем данных в столбце велик, этот запрос может привести к увеличению загрузки ЦП базы данных, поскольку ему необходимо искать элемент по всему столбцу.

Таким образом, мы можем оптимизировать SQL, используя индекс добавления или используя подстановочный знак префикса.


ALTER TABLE operation ADD INDEX idx_result (result);

После повторного использования SQL для запроса вы увидите, что затраченное время значительно сокращается.В то же время загрузка ЦП при обработке данных мониторинга также снизилась.

4. Резюме

Opentelemetry Collector — очень мощный инструмент, который помогает пользователям легко собирать, преобразовывать и экспортировать данные распределенной трассировки и мониторинга производительности. Используя Opentelemetry Collector, пользователи могут лучше понимать производительность своих приложений и систем и обеспечивать лучшую поддержку данных для бизнес-решений.

Используя OpenTelemetry для сбора и анализа показателей SQL, вы можете легко отслеживать, насколько эффективно выполняется каждый запрос SQL, и выявлять потенциальные проблемы с производительностью. Это помогает оптимизировать производительность запросов и повышает производительность приложений.

Тан Сяоу, основатель SenseTime, скончался в возрасте 55 лет. В 2023 году PHP застопорится. Wi-Fi 7 будет полностью доступен. в начале 2024 г. Дебют, в 5 раз быстрее, чем Wi-Fi 6. Система Hongmeng вот-вот станет независимой, и во многих университетах созданы «классы Hongmeng». Zhihui Стартап-компания Цзюня рефинансирует сумму, превышающую 600 миллионов юаней, а предварительная оценка составляет 3,5 миллиарда юаней. Версия Quark Browser для ПК начинает внутреннее тестирование AI code Assistant популярен, и рейтинги языков программирования высоки. Ничего не поделаешь Модем 5G и радиочастотная технология Mate 60 Pro далеко впереди MariaDB разделяет SkySQL и устанавливается как независимая компания Xiaomi отвечает на заявление Юй Чэндуна о плагиате со стороны Huawei
{{o.name}}
{{м.имя}}

рекомендация

отmy.oschina.net/u/5148943/blog/10148367
рекомендация