Работа с метриками Prometheus

В дистрибутив R-Vision SIEM входит система мониторинга Prometheus, собирающая различные метрики работы кластера. В данном разделе описано, как получить доступ к панели управления Prometheus и просмотреть метрики, собранные системой.

Подключение к Prometheus

Чтобы получить доступ к панели управления Prometheus:

  1. Осуществите проброс портов, выполнив на хосте с сетевым доступом к управляющему узлу кластера следующую команду:

    kubectl port-forward -n kube-prometheus-stack service/kube-prometheus-stack-prometheus <local-port>:9090

    Здесь:

    • <local-port> — порт на хосте, по которому будет осуществляться доступ к Prometheus.

  2. В браузере откройте URL localhost:<local-port>, где <local-port> — порт с шага 1. Отобразится панель управления Prometheus.

Просмотр списка метрик, получаемых из источников

Источники метрик — это сервисы, из которых Prometheus получает метрики.

Чтобы просмотреть список источников, в панели управления Prometheus перейдите в раздел Status → Targets. Для каждого источника доступны метки Labels, по которым можно фильтровать значения метрик. Например, в качестве метки может выступать пространство имен или под, на котором располагается источник.

Просмотреть список метрик, получаемых Prometheus из всех источников, можно на главной странице панели управления:

  • Чтобы просмотреть список всех доступных метрик:

    1. Введите в строку запроса Prometheus следующий запрос:

      group by(__name__) ({__name__!=""})
    2. Нажмите на кнопку Execute или на клавишу ENTER.

  • Чтобы найти метрики по ключевому слову в названии, введите ключевое слово в строку запроса Prometheus. Отобразится список автодополнения, содержащий метрики с указанным ключевым словом в названии.

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

  1. Перейдите в раздел Prometheus Status → Targets.

  2. Выберите нужный источник из списка.

  3. Получите из столбца Endpoint таблицы порт и путь к конечной точке, на которой находится источник метрик.

    Например, для адреса http://10.233.116.160:8001/metrics порт — 8001, а путь — /metrics.
  4. Получите из столбца Labels таблицы пространство имен и под кластера, где находится источник метрик. Пространство имен указано в значении метки namespace, а под — в значении метки pod.

  5. Осуществите проброс портов до источника метрик, выполнив на хосте с сетевым доступом к управляющему узлу кластера следующую команду:

    kubectl port-forward -n <namespace> pod/<source-pod> <source-local-port>:<source-remote-port>

    Здесь:

    • <namespace> — пространство имен кластера, в котором находится источник метрик.

    • <source-pod> — под, на котором находится источник метрик.

    • <source-local-port> — порт на хосте, по которому будет осуществляться доступ к источнику метрик. Должен отличаться от порта, выбранного для доступа к Prometheus.

    • <source-remote-port> — порт, на котором находится источник метрик.

  6. В браузере откройте URL localhost:<source-local-port>/<source-path>.

    Здесь:

    • <source-local-port> — порт с предыдущего шага.

    • <source-path> — путь к конечной точке источника метрик, полученный на шаге 3.

      Откроется URL, соответствующий источнику метрик.

Пример получения списка метрик шарда ClickHouse
  1. Перейдите в раздел Prometheus Status → Targets.

  2. Выберите источник serviceMonitor/kube-prometheus-stack/kube-prometheus-stack-clickhouse/0.

    Далее рассматривается получение списка метрик для шарда clickhouse-shard0-0. Для второго шарда процесс аналогичен.

  3. Получите из столбца Endpoint таблицы информации об источнике порт и путь конечной точки, отправляющей метрики шарда clickhouse-shard0-0. Пусть конечная точка имеет адрес http://10.0.0.173:8001/metrics. Тогда:

    • порт 8001;

    • путь /metrics.

  4. Получите из столбца Labels таблицы пространство имен и под кластера, где находится источник метрик. Пусть пространство имен в значении метки namespace — siem, а под в значении метки pod — clickhouse-shard0-0.

  5. Осуществите проброс портов до источника метрик, выполнив на хосте с сетевым доступом к управляющему узлу кластера следующую команду:

    kubectl port-forward -n siem pod/clickhouse-shard0-0 5555:8001
  6. В браузере откройте URL localhost:5555/metrics. Отобразится список метрик ClickHouse.

Вывод значений метрик в интерфейсе Prometheus

На главной странице панели управления Prometheus можно выводить значения получаемых системой метрик. Для этого:

  1. Введите запрос на языке PromQL в строку запроса Prometheus.

  2. Нажмите на кнопку Execute или на клавишу ENTER.

  3. При необходимости измените представление данных, пользуясь вкладками:

    • Table — таблица значений метрик в момент времени, заданный в поле ввода Evaluation time;

    • Graph — графическое представление временного ряда значений метрики. Для него можно выбрать интервал времени для отображения, конечный момент времени End time и интервал в секундах между точками графика Res. (s).

Метрики, собранные Prometheus, также можно отобразить на дашборде Grafana.

Примеры метрик состояния кластера

Использование системных ресурсов

  • Использование процессора:

    • container_cpu_usage_seconds_total — время процессора в секундах, потребленное контейнерами кластера.

    • machine_cpu_cores — количество логических ядер процессора.

      PromQL-запрос потребления ресурсов процессора всеми контейнерами кластера

      Метрика container_cpu_usage_seconds_total имеет тип counter, то есть является счетчиком с накоплением. Чтобы вычислить изменение метрики за временной период, воспользуйтесь функцией rate языка PromQL:

      sum(rate(container_cpu_usage_seconds_total{container!=""}[1m])) / sum(machine_cpu_cores) * 100
    • container_threads — количество потоков, запущенных внутри контейнера.

      PromQL-запрос количества потоков внутри указанного контейнера
      container_threads{container="<container_name>"}

      Здесь:

      • <container_name> — имя контейнера.

  • Использование оперативной памяти:

    • container_memory_usage_bytes — потребление оперативной памяти контейнерами в байтах.

    • machine_memory_bytes — размер оперативной памяти в байтах, установленной на машине.

      PromQL-запрос потребления оперативной памяти контейнерами на узле
      sum(container_memory_usage_bytes{node="<node_name>"}) / sum(machine_memory_bytes{node="<node_name>"}) * 100

      Здесь:

      • <node_name> — имя узла кластера.

  • Использование дискового пространства:

    • host_filesystem_used_bytes — размер используемого дискового пространства в байтах.

    • host_filesystem_total_bytes — размер установленного дискового пространства в байтах.

      PromQL-запрос процента свободного места в файловой системе
      sum(host_filesystem_used_bytes{filesystem="<filesystem>"}) / sum(host_filesystem_total_bytes{filesystem="<filesystem>"}) * 100

      Здесь:

      • <filesystem> — имя файловой системы.

  • Использование сети:

    • container_network_transmit_bytes_total — объем переданных по сети данных в байтах.

    • container_network_receive_bytes_total — объем полученных по сети данных в байтах.

      PromQL-запрос количества мегабайт, переданных по сети за одну минуту

      Метрики container_network_transmit_bytes_total и container_network_receive_bytes_total имеют тип counter. Чтобы вычислить изменение метрики за временной период, воспользуйтесь функцией rate языка PromQL:

      sum(rate(container_network_transmit_bytes_total{node="<node_name>"}[1m])) / (1024 ^ 2)

      Здесь:

      • <node_name> — имя узла кластера.

      • Байты переведены в мегабайты путем деления на 10242.

Метрики ClickHouse

  • Общие метрики запросов:

    • ClickHouseMetrics_Query — количество выполняющихся запросов.

    • ClickHouseProfileEvents_FailedQuery — количество запросов, завершившихся с ошибкой.

    • ClickHouseProfileEvents_FailedSelectQuery — количество запросов типа SELECT, завершившихся с ошибкой.

    • ClickHouseProfileEvents_FailedInsertQuery — количество запросов типа INSERT, завершившихся с ошибкой.

    • ClickHouseMetrics_GlobalThreadActive — количество потоков, выполняющих задачи, в глобальном пуле потоков ClickHouse.

    • ClickHouseErrorMetric_ALL — количество ошибок сервера ClickHouse с последнего перезапуска.

      PromQL-запрос суммарного значения метрики по одному шарду ClickHouse
      ClickHouseMetrics_Query{pod="<pod_name>"}

      Здесь:

      • <pod_name> — имя пода, на котором расположен шард ClickHouse.

      Вместо ClickHouseMetrics_Query можно подставить любую метрику из списка общих метрик.

      PromQL-запрос значения метрики по всем шардам ClickHouse
      sum(ClickHouseMetrics_Query)

      Вместо ClickHouseMetrics_Query можно подставить любую метрику из списка общих метрик.

  • Метрики времени выполнения запросов:

    • ClickHouseProfileEvents_QueryTimeMicroseconds — время выполнения запросов в микросекундах.

    • ClickHouseProfileEvents_SelectQueryTimeMicroseconds — время выполнения запросов типа SELECT в микросекундах.

    • ClickHouseProfileEvents_InsertQueryTimeMicroseconds — время выполнения запросов типа INSERT в микросекундах.

    • ClickHouseProfileEvents_OtherQueryTimeMicroseconds — время выполнения запросов всех типов, кроме SELECT и INSERT, в микросекундах.

      PromQL-запрос времени, затраченного на выполнение запросов в течение одной минуты

      Метрики, описанные в этом разделе, имеют тип counter. Чтобы вычислить изменение метрики за временной период, воспользуйтесь функцией rate языка PromQL:

      sum(rate(ClickHouseProfileEvents_QueryTimeMicroseconds[1m])) / (10^6)

      Здесь:

      • Микросекунды переведены в секунды путем деления на 106.

  • Метрики подключений к серверу СУБД:

    • ClickHouseProfileEvents_DistributedConnectionTries — количество всех попыток подключения к серверу СУБД.

    • ClickHouseProfileEvents_DistributedConnectionUsable — количество успешных попыток подключения к серверу СУБД.

    • ClickHouseProfileEvents_DistributedConnectionFailTry — количество неудачных попыток подключения к серверу СУБД, завершившихся повторной попыткой соединения.

    • ClickHouseProfileEvents_DistributedConnectionFailAtAll — количество неудачных попыток подключения к серверу СУБД, завершившихся после исчерпания повторных попыток.

      PromQL-запрос количества всех попыток подключения к серверу СУБД в течение одной минуты

      Метрики, описанные в этом разделе, имеют тип counter. Чтобы вычислить изменение метрики за временной период, воспользуйтесь функцией rate языка PromQL:

      sum(rate(ClickHouseProfileEvents_DistributedConnectionTries[1m]))