Size: a a a

Церковь метрик

2020 January 14

i

inqfen in Церковь метрик
А ограничил в докере память 8 гигами - перестал и оказалось и с ними прекрасно работает
источник

i

inqfen in Церковь метрик
Чудеса
источник

i

inqfen in Церковь метрик
Но это вроде у старого проблема была
источник

GT

Gregory Tsvetkov in Церковь метрик
Yzzzi
а можно ссылочку, где говорят?
https://habr.com/ru/company/funcorp/blog/445370/
Несмотря на то, что есть возможность конфигурировать размер блока, не рекомендуется настраивать его вручную, поэтому вы поставлены перед необходимостью дать Prometheus столько памяти, сколько он попросит для вашей нагрузки.
https://github.com/coreos/prometheus-operator/issues/2196#issuecomment-444409703

Ну и вообще, когда гугли prometheus oom, не находишь никакого решения
источник

i

inqfen in Церковь метрик
Пытался под какие-то кеши tsdb память забрать и когда доходил до конца памяти в системе оживал oom и грохал его
источник

RK

Roman Khavronenko in Церковь метрик
Ihor Levchenko
я в общем только разбираюсь и хочу построить систему мониторинга всего и вся.
Я в общем для чего эту гистограму хочу - чтобы можно было потом отфильтровать самые тяжелые запросы.
Я думал сделать градацию бакетов для гистограмы: 0, 100, 500, 1000, 2000, 5000, 10000, Inf+
Это мне помогло бы понимать какие запросы работают очень быстро, какие не очень.. и с какими вообще все плохо (в миллисекундах)

но может быть я не совсем правильно понимаю метрики гистограм
гистограммы в прометеусе это обычные счетчики, где каждый бакет это счетчик и + 2 контрольных счетчика. Поэтому можно не переживать за их производительность - скорее всего всё будет достаточно быстро. С гистограммами нужно быть осторожным только с вариативностью лейблов для метрики, т.к. каждый новый лейбл или его значение будет порождать N новых рядов, где N -  кол-во бакетов. Т.е. для гистограм используйте всегда строго детерминированные наборы лейблов, чтобы измбежать неожиданного “взрыва” кардинальности.
источник

IL

Ihor Levchenko in Церковь метрик
Roman Khavronenko
гистограммы в прометеусе это обычные счетчики, где каждый бакет это счетчик и + 2 контрольных счетчика. Поэтому можно не переживать за их производительность - скорее всего всё будет достаточно быстро. С гистограммами нужно быть осторожным только с вариативностью лейблов для метрики, т.к. каждый новый лейбл или его значение будет порождать N новых рядов, где N -  кол-во бакетов. Т.е. для гистограм используйте всегда строго детерминированные наборы лейблов, чтобы измбежать неожиданного “взрыва” кардинальности.
спасибо, это исчерпывающий ответ
осталось научиться более менее этими метриками оперировать чтобы выводить красивый график

а вообще.. если у меня много микросервисов, но на них почти идентичные метрики - нормально ли на каждый микросервис заводить отдельный джоб? Или лучше во дной джобе все делать, но просто специальным тегом идентифицировать метрики с каждого сервиса?
источник

IL

Ihor Levchenko in Церковь метрик
или по барабану?
источник

RK

Roman Khavronenko in Церковь метрик
Gregory Tsvetkov
Привет, у меня Пром жрет 32 гига памяти и вырубается от oom каждые 5 мин, как фиксить, кто сталкивался? Метрик не много, на гитхабе говорят "дай Прому скока хочет", я крайне несогласен с этим
как уже рекомендовали - попробуйте обновиться до последней версии. Из доп опций есть следующие варианты:
- прометеус в основном потребляет память в зависимости от размера индекса во временным рядам. На размер этого индекса влияет кол-во метрик и их кардианльность. Посмотрите http://prometheus/status или http://prometheus/api/v1/status/tsdb чтобы найти самые “большие” метрики. Возможно, какие-то из них не нужны или используются неправильно (в лейблы пишется большое кол-во уникальных значений)
- можно попробовать снизить размер блока, если не используете танос (он работает только с 2ч afaik)
- можно понизить GOGC значение до 50% или меньше - контролирует частоту срабатывания GC в go. Это такой себе трейдофф CPU и памяти
источник

RK

Roman Khavronenko in Церковь метрик
Ihor Levchenko
спасибо, это исчерпывающий ответ
осталось научиться более менее этими метриками оперировать чтобы выводить красивый график

а вообще.. если у меня много микросервисов, но на них почти идентичные метрики - нормально ли на каждый микросервис заводить отдельный джоб? Или лучше во дной джобе все делать, но просто специальным тегом идентифицировать метрики с каждого сервиса?
в проме есть специальная ф-ция по работе с гистограммами - histogram_quantile. Так же в графане есть спец панель heatmap для гистограмм.
Еще одно преимущество гистограмм перед саммари - возможность комбинировать значения с разных сервисов/джоб (при условии что размерность бакетов идентична). Так вы сможете, например, построить один график по всем репликам ваших http-серверов.
источник

GT

Gregory Tsvetkov in Церковь метрик
Roman Khavronenko
как уже рекомендовали - попробуйте обновиться до последней версии. Из доп опций есть следующие варианты:
- прометеус в основном потребляет память в зависимости от размера индекса во временным рядам. На размер этого индекса влияет кол-во метрик и их кардианльность. Посмотрите http://prometheus/status или http://prometheus/api/v1/status/tsdb чтобы найти самые “большие” метрики. Возможно, какие-то из них не нужны или используются неправильно (в лейблы пишется большое кол-во уникальных значений)
- можно попробовать снизить размер блока, если не используете танос (он работает только с 2ч afaik)
- можно понизить GOGC значение до 50% или меньше - контролирует частоту срабатывания GC в go. Это такой себе трейдофф CPU и памяти
О, спасибо. А какой параметр за размер блока отвечает, он storage.tsdb.min-block-duration?
источник

IL

Ihor Levchenko in Церковь метрик
Roman Khavronenko
в проме есть специальная ф-ция по работе с гистограммами - histogram_quantile. Так же в графане есть спец панель heatmap для гистограмм.
Еще одно преимущество гистограмм перед саммари - возможность комбинировать значения с разных сервисов/джоб (при условии что размерность бакетов идентична). Так вы сможете, например, построить один график по всем репликам ваших http-серверов.
очень исчерпываюищй ответ, спасибо большое
я, как новичок в деле мониторинга, долго думал между саммари и гистограммами.
но в общем пришел к последнему именно из-за “унификации” всего и построения общего графика “массового характера”
источник

RK

Roman Khavronenko in Церковь метрик
>> а вообще.. если у меня много микросервисов, но на них почти идентичные метрики - нормально ли на каждый микросервис заводить отдельный джоб? Или лучше во дной джобе все делать, но просто специальным тегом идентифицировать метрики с каждого сервиса?

да, это нормальная практика. Обьединяйте джобы по типам микросервисов: job: nginx, job: node_exporter. Для прометеуса не будет разницы между вариативностью джоб или уникальных идентификаторов.
источник

RK

Roman Khavronenko in Церковь метрик
Gregory Tsvetkov
О, спасибо. А какой параметр за размер блока отвечает, он storage.tsdb.min-block-duration?
да, есть еще max-block-duration
источник

GT

Gregory Tsvetkov in Церковь метрик
Roman Khavronenko
да, есть еще max-block-duration
Я их крутил, толку 0
источник

GT

Gregory Tsvetkov in Церковь метрик
Обновлюсь и посмотрим.  Если что pprof придется освоить
источник

RK

Roman Khavronenko in Церковь метрик
Gregory Tsvetkov
Я их крутил, толку 0
имеется в виду память? или вы проверяли частоту чекпоинтов?
источник

IL

Ihor Levchenko in Церковь метрик
@hagen1778
Спасибо!
На сколько я понимаю, гистограммы - это в принципе единственный способ строить даже линейный график, где Y - будет, например, размер запроса.
То есть если я сделаю градацию там.. 0б, 100б, 1кб, 5кб, 20кб, 100кб, 1мб, Inf+.

Вообще есть ли какие-то правила построения правильной градации бакетов? Я так понял это больше нужно для построения правильной “температуры” в heatmap, а для линейного графика - главное, какие градации мне удобней для мониторинга?

заранее спасибо за ответ
источник

GT

Gregory Tsvetkov in Церковь метрик
Roman Khavronenko
имеется в виду память? или вы проверяли частоту чекпоинтов?
Я убавлял min-block до получаса(было 2 ч), в надежде что это снизит потребление памяти. Но видимо в другом дело
источник

RK

Roman Khavronenko in Церковь метрик
Ihor Levchenko
@hagen1778
Спасибо!
На сколько я понимаю, гистограммы - это в принципе единственный способ строить даже линейный график, где Y - будет, например, размер запроса.
То есть если я сделаю градацию там.. 0б, 100б, 1кб, 5кб, 20кб, 100кб, 1мб, Inf+.

Вообще есть ли какие-то правила построения правильной градации бакетов? Я так понял это больше нужно для построения правильной “температуры” в heatmap, а для линейного графика - главное, какие градации мне удобней для мониторинга?

заранее спасибо за ответ
бакеты в гистограммах куммулятивны и именуются le => less or equal. Таким образом, получая значение, прометеусовская либа понимает какой из счетчиков выбрать для обновления - выбор происходит по диапазонам. Например, при получении значения 98КБ - будут выбраны все бакеты со значеним >98KB. И единственным необновленным бакетом будет 0. Исходя из этой логики вы можете прийти к выводу, что бакет 0 не имеет смысла и обойтись без него).

Основная сложность гистограмм - определение диапазонов бакетов, т.к. библиотека прометеуса ничего не знает о данных, которые вы хотите туда записывать. Поэтому задача понять диапазон значений ложится как раз на пользователя. Определите какие именно значения вам нужно покрыть и соответственно сделайте нужную градацию. Так же совершенно нормально время от времени “подкручивать” диапазоны бакетов, т.к. ваше приложение или поток данных могут меняться.

Имплементация гистограмм в VM умеет автоматически определять диапазоны бакетов в зависимости от входящих данных. Т.е. ее не нужно настраивать - просто пишите данные
источник