Skip to content

Модуль PrometheusTextFormat

Модуль, отвечающий за сериализацию промежуточного формата метрик в строку в формате Prometheus Text Format.

Входной формат:

  • массив семейств метрик;
  • каждое семейство — структура с полями:
    • Имя — имя метрики;
    • Типcounter, gauge, histogram, summary или untyped;
    • Справка — строка # HELP (опционально);
    • Сэмплы — массив сэмплов.

Сэмпл — структура с полями:

  • ИмяСэмпла — полное имя сэмпла (например, http_requests_total, metric_bucket);
  • Лейблы — соответствие имя → значение;
  • Значение — числовое значение;
  • для histogram: ВерхняяГраница (опционально, при формировании промежуточного формата);
  • для summary: Квантиль (опционально).

Content-Type

Функция ContentType() Экспорт

Возвращает строку HTTP‑заголовка Content-Type:

txt
text/plain; version=0.0.4; charset=utf-8

Используется вместе с результатом Сериализовать при отдаче метрик по HTTP.

Сериализация

Функция Сериализовать(Семейства) Экспорт

Принимает массив семейств и возвращает строку в формате Prometheus:

  • сортирует семейства по имени;
  • для каждого семейства:
    • добавляет строку # HELP (если задана справка, с экранированием \ и перевода строки);
    • добавляет строку # TYPE (counter, gauge, histogram, summary или untyped);
    • выводит строки сэмплов.

Для histogram и summary выполняется дополнительная сортировка сэмплов:

  • Histogram:
    • бакеты _bucket сортируются по возрастанию le, +Inf идёт последним;
    • затем _sum, затем _count.
  • Summary:
    • сэмплы с quantile сортируются по возрастанию квантиля;
    • затем _sum, затем _count.

Формат одной строки сэмпла

Строка имеет вид:

txt
имя_сэмпла{лейблы} значение

Лейблы формируются функцией СтрокаЛейблов:

  • лейблы сортируются по имени;
  • значения экранируются:
    • \\\;
    • перевод строки → \n;
    • "\".

Числа форматируются функцией ФорматЧисла:

  • приводятся к числовому типу;
  • десятичный разделитель — точка (.).

В конце всегда добавляется перевод строки.