13.Prometheus: Миграция на версию 2.0

Thank you for reading this post, don't forget to subscribe!

Prometheus со все­ми необ­хо­ди­мы­ми ком­по­нен­та­ми дав­но успеш­но рабо­тал в docker-кон­тей­не­рах, как копи­са­но в этой ста­тье.

С наско­ку” меняю вер­сию docker-обра­за в фай­ле docker-compose.yml, было:

ста­ло:

Обнов­ляю кон­тей­нер с помо­щью команды:

и он не запускается:

Смот­рим логи:

С помо­щью гуг­ла выяс­ня­ем, что в Prometheus 2.0 пара­мет­ры команд­ной стро­ки нуж­но зада­вать через два дефи­са, а не один, как было раньше:

First, we moved to a new flag library, which uses the more common double-dash – prefix for flags instead of the single dash Prometheus used so far

Пра­вим docker-compose.yml, добав­ляя дефи­сы, запус­ка­ем кон­тей­нер — он опять не стар­ту­ет! В логах:

Нахо­дим, что теперь URL для alertmanager’а нель­зя зада­вать как пара­метр команд­ной стро­ки, его сле­ду­ет ука­зы­вать в самом кон­фи­гу­ра­ци­он­ном фай­ле Prometheus вот так.

Исправ­ля­ем­ся, про­бу­ем запу­стить­ся — и сно­ва неуда­ча! Смот­рим логи:

В свя­зи с новым хра­ни­ли­щем для мет­рик в Prometheus 2.0 вме­сто --storage.local.path=/prometheus нуж­но исполь­зо­вать --storage.tsdb.path=/prometheus, а пара­метр --storage.local.memory-chunks вооб­ще уда­лить, ина­че в логах будут ошиб­ки вида:

Вновь запус­ка­ем docker-кон­тей­нер с новой вер­си­ей Prometheus, резуль­тат тот же. В логах на этот раз:

Ока­зы­ва­ет­ся, теперь в кон­тей­не­ре prometheus запус­ка­ет­ся от поль­зо­ва­те­ля nobody, а не root. Пра­вим пра­ва досту­па на при­мон­ти­ро­ван­ный том, в кото­ром хра­нят­ся мет­ри­ки и нако­нец-то Prometheus запускается!

Одна­ко, при­клю­че­ния на этом не закан­чи­ва­ют­ся — на даш­бор­дах в гра­фане часть мет­рик не отоб­ра­жа­ют­ся, а имен­но мет­ри­ки, исполь­зу­ю­щие функ­цию count_scalar(). Для исправ­ле­ния ситу­а­ции в моем слу­чае при­шлось заме­нить выражение:

на сле­ду­ю­щее:

а такое выражение:

на:

Кро­ме того, изме­нил­ся так­же фор­мат alertrules,

Сто­ит отме­тить, что мно­гих «при­клю­че­ний» мож­но избе­жать, если вовре­мя читать release notes или migration guide.