лейблов и их значений не прокатит?
Грубо:
экспортер копит словарь id=hash(metricName,labelName,labelValue) -> tuple{ metricName,labelName,labelValue}, а значения метрик шлёт с соответствующими id.
Сам словарь (id- > tuple) мог бы посылаться прому как вместе с метриками целиком или как update с прошлого скрейпа, так и забираться промом отдельно.
Если при каждом скрейпе словарь не тащить, то трафик сильно пожмётся.
В какой то сепени похоже на шаблоны в netflow v9 и в ipfix.
Akumuli поддерживает похожий протокол, все что передается в БД сразу после установки соединения сначала интерпретируется как словарь, если это не прокатывает, то фолбэк на обычный протокол, если словарь передан, то можно потом отправлять метрики используя id вместо лэйблов, либо указывать лэйблы полностью. Это обратно совместимо с ранними версиями протокола. Главных минусов два: может быть дорого хранить большой словарь на каждое TCP соединение; непонятно что делать если нужно изменить словарь (либо разрешить передавать его в любое время и усложнить тем самым протокол для всех, либо передавать только в начале, но на клиенте нужно больше логики в некоторых случаях). Для прома скорее всего можно было бы что-то похожее придумать, только для pull модели это не так просто, кмк.
Обсуждают сегодня