Как обновить Prometheus 1.x до Prometheus 2.0 в Ubuntu 16.04

_ Автор выбрал фонд Diversity in Tech, чтобы получить пожертвование в размере 200 долларов США в рамках Write для DOnations программа.

Вступление

Prometheus - это система мониторинга с открытым исходным кодом, которая собирает метрики от ваших услуг. В Prometheus 2.0 внесено множество изменений и улучшений, таких как новая база данных временных рядов, улучшенное использование ресурсов, новый формат конфигурации для предупреждений и улучшенное обнаружение Alertmanager.

В этом руководстве вы обновите существующую установку Prometheus 1.x до Prometheus 2.0. Новая база данных временных рядов в Prometheus 2.0, называемая + tsdb +, несовместима с Prometheus 1.x, что означает, что вы не можете читать данные из вашего экземпляра Prometheus 1.x с помощью Prometheus 2. Чтобы обойти это ограничение, вы настроите Prometheus 1.x в качестве хранилища данных только для чтения, чтобы сделать ваши старые данные доступными.

Prometheus 2 использует новый формат для правил оповещения, поэтому вы обновите существующие правила оповещения до нового формата и будете работать с Alertmanager.

Наконец, вы будете использовать веб-интерфейс, чтобы убедиться, что Прометей работает должным образом.

Этот урок охватывает только самые важные изменения. Перед обновлением до последней версии вы должны прочитать Announcing Prometheus 2.0, чтобы убедиться, что ни один из другие изменения.

Предпосылки

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

  • Один сервер Ubuntu 16.04 был настроен по следующей ссылке: [Начальная настройка сервера с Ubuntu 16.04 учебник], включая пользователя без полномочий root и брандмауэр.

  • Prometheus 1.x установлен на вашем сервере, включая веб-интерфейс Prometheus. Вы можете узнать свою версию Prometheus, запустив команду + prometheus -version +. Вывод содержит вашу версию Prometheus, а также информацию о сборке.

В этом руководстве рассматриваются следующие аспекты установки Prometheus:

  • Вы создали пользователя * prometheus *.

  • Вы создали каталог + / etc / prometheus +, в котором находятся файлы конфигурации Prometheus.

  • Вы создали каталог + / var / lib / prometheus +, в котором хранятся данные Prometheus.

  • Исполняемые файлы + prometheus + и + promtool + находятся в + / usr / local / bin +.

  • Вы настроили Prometheus для запуска в качестве службы systemd под названием + prometheus +.

Шаг 1 - Обновление Прометея до 1.8.2

Чтобы получить доступ к вашим старым данным с помощью Prometheus 2.0, вам нужно обновить текущую установку Prometheus до версии + 1.8.2 +, а затем настроить Prometheus 2.0 для чтения из старых, используя функцию + remote_read +.

Используя команду + prometheus -version +, проверьте текущую версию Prometheus. Вывод содержит информацию о версии и сборке. Если вы уже используете версию + 1.8.2 +, пропустите этот шаг.

prometheus -version
prometheus -version outputprometheus, version  (branch: master, revision: 3afb3fffa3a29c3de865e1172fb740442e9d0133)
 build user:       root@0aa1b7fc430d
 build date:       20170612-11:44:05
 go version:       go1.8.3

Прежде чем идти дальше, остановите Prometheus, чтобы вы могли заменить его файлы:

sudo systemctl stop prometheus

Вы можете найти Prometheus 1.8.2 вместе с контрольными суммами на странице проекта GitHub Releases. Вам нужен файл с именем ++. Используя следующие команды + curl +, загрузите архив Prometheus и контрольную сумму в свой домашний каталог:

cd ~
curl -LO https://github.com/prometheus/prometheus/releases/download//
curl -LO https://github.com/prometheus/prometheus/releases/download//

Чтобы убедиться, что у вас есть подлинный не поврежденный архив, используйте команду + sha256sum +, чтобы сгенерировать контрольную сумму для архива и сравнить ее с файлом + sha256sums.txt +.

sha256sum -c  2>&1 | grep OK
Checksums checkprometheus-1.8.2.linux-amd64.tar.gz:

Если вы не видите + OK + в выходных данных, удалите загруженный архив и выполните предыдущие шаги, чтобы загрузить его снова.

Теперь распакуйте архив.

tar xvf

Скопируйте исполняемые файлы + prometheus + и + promtool + в каталог + / usr / local / bin +.

sudo cp prometheus-1.8.2.linux-amd64/prometheus /usr/local/bin
sudo cp prometheus-1.8.2.linux-amd64/promtool /usr/local/bin

Установите права доступа пользователя и группы к файлам для пользователя * prometheus *.

sudo chown prometheus:prometheus /usr/local/bin/prometheus
sudo chown prometheus:prometheus /usr/local/bin/promtool

Наконец, запустите Prometheus, чтобы убедиться, что он работает так, как задумано.

sudo systemctl start prometheus

Наконец, проверьте статус сервиса.

sudo systemctl status prometheus

Вы увидите следующий вывод:

Prometheus service status● prometheus.service - Prometheus
  Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: enabled)
  Active:  (running) since Mon 2018-01-01 21:44:52 UTC; 2s ago
Main PID: 1646 (prometheus)
   Tasks: 6
  Memory: 17.7M
     CPU: 333ms
  CGroup: /system.slice/prometheus.service
          └─1646 /usr/local/bin/prometheus -config.file /etc/prometheus/prometheus.yml -storage.local.path /var/lib/prometheus/
...

Если статус службы не ++, следуйте инструкциям на экране и проследуйте предыдущие шаги, чтобы решить проблему, прежде чем продолжить обучение.

Проверьте версию Prometheus, чтобы убедиться, что вы используете версию ++.

prometheus -version
prometheus -version outputprometheus, version  (branch: HEAD, revision: 5211b96d4d1291c3dd1a569f711d3b301b635ecb)
 build user:       root@1412e937e4ad
 build date:       20171104-16:09:14
 go version:       go1.9.2

Если вы не видите + version +, убедитесь, что вы загрузили правильный файл, и повторите шаги, описанные в этом разделе.

Наконец, удалите загруженные файлы, так как они вам больше не нужны.

rm -rf

Затем вы перенастроите существующую установку, чтобы она не мешала работе Prometheus 2.0 после ее установки.

Шаг 2 - Настройка Prometheus 1.8.2 в качестве отдельной службы

Мы хотим сохранить Prometheus 1.8.2, чтобы иметь доступ к старым данным, но мы должны быть уверены, что наша старая установка не будет мешать Prometheus 2 при установке. Для этого мы добавим + 1 + к имени всех каталогов и исполняемых файлов, связанных с Prometheus. Например, исполняемый файл + prometheus + станет + prometheus1 +. Мы также обновим определение сервиса и настроим его запуск на другом порту.

Прежде чем продолжить, остановите Prometheus, чтобы вы могли переименовать файлы и каталоги.

sudo systemctl stop prometheus

В каталоге + / usr / local / bin + вы найдете два исполняемых файла Prometheus - + prometheus + и + promtool +. Переименуйте их в + prometheus1 + и + promtool1 + соответственно:

sudo mv /usr/local/bin/prometheus /usr/local/bin/prometheus1
sudo mv /usr/local/bin/promtool /usr/local/bin/promtool1

У Prometheus есть две связанные директории: + / etc / prometheus + для хранения файлов конфигурации и + / var / lib / prometheus + для хранения данных. Переименуйте эти каталоги также.

sudo mv /etc/prometheus /etc/prometheus1
sudo mv /var/lib/prometheus /var/lib/prometheus1

Мы собираемся запустить Prometheus 1.8.2 в качестве хранилища данных только для чтения, поэтому нам не нужно собирать какие-либо данные от экспортеров. Чтобы убедиться в этом, мы удалим все содержимое из файла конфигурации с помощью следующей команды + truncate +. Перед удалением содержимого файла создайте резервную копию файла, чтобы вы могли использовать ее позже для настройки Prometheus 2.0.

sudo cp /etc/prometheus1/prometheus.yml /etc/prometheus1/prometheus.yml.bak

Затем очистите содержимое файла конфигурации с помощью + truncate.

sudo truncate -s 0 /etc/prometheus1/prometheus.yml

Затем переименуйте файл службы из + prometheus + в + prometheus1 +.

sudo mv /etc/systemd/system/prometheus.service /etc/systemd/system/prometheus1.service

Откройте служебный файл Prometheus в текстовом редакторе.

sudo nano /etc/systemd/system/prometheus1.service

Вы будете запускать Prometheus 2.0 на порте по умолчанию + 9090 +, поэтому измените порт, который Prometheus 1.8.2 прослушивает на порт + 9089 +. Замените директиву + ExecStart + следующей конфигурацией:

ExecStart - /etc/systemd/system/prometheus.service

...
ExecStart=/usr/local/bin/ \
   -config.file /etc//prometheus.yml \
   -storage.local.path /var/lib// \
   -web.listen-address ":"
...

Сохраните файл и закройте текстовый редактор. Перезагрузите + systemd +, чтобы применить изменения.

sudo systemctl daemon-reload

Запустите сервис + prometheus1 +.

sudo systemctl start prometheus1

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

sudo systemctl status prometheus1

Как и прежде, выходные данные содержат информацию о процессе, такую ​​как PID, статус и многое другое:

Service status output● prometheus1.service - Prometheus
  Loaded: loaded (/etc/systemd/system/prometheus1.service; disabled; vendor preset: enabled)
  Active:  (running) since Mon 2018-01-01 21:46:42 UTC; 3s ago
Main PID: 1718 (prometheus1)
   Tasks: 6
  Memory: 35.7M
     CPU: 223ms
  CGroup: /system.slice/prometheus1.service
          └─1718 /usr/local/bin/prometheus1 -config.file /etc/prometheus1/prometheus.yml -storage.local.path /var/lib/prometheus1/
...

Если статус службы не ++, следуйте инструкциям на экране и проследуйте предыдущие шаги, чтобы решить проблему, прежде чем продолжить обучение.

Включите службу, чтобы она запускалась при загрузке системы.

sudo systemctl enable prometheus1

На этом этапе Prometheus 1.8.2 не будет ломать ни одного экспортера. Это обеспечит согласованность данных после того, как мы настроим Prometheus 2.0, который будет использовать текущую установку в качестве хранилища данных только для чтения для старых данных. На следующем шаге мы собираемся установить Prometheus 2.0 и использовать Prometheus 1.8.2 для доступа к нашим старым данным.

Шаг 3 - Настройка Prometheus 2.0

На этом этапе мы настроим Prometheus 2.0 для очистки экспортеров и используем Prometheus 1.8.2 в качестве хранилища данных только для чтения, чтобы мы могли получить доступ к нашим существующим данным.

Прежде чем продолжить обучение, установите Prometheus 2, выполнив шаги 1 и 2 https://www.digitalocean.com/community/tutorials/how-to-install-prometheus-on-ubuntu-16-04#step-2-% E2% 80% 94-скачивание-прометей [Учебник по установке Прометея в Ubuntu 16.04].

После того, как вы установили Prometheus, создайте новый файл конфигурации. Формат файла конфигурации не изменился, поэтому вы можете использовать ваш файл конфигурации Prometheus 1.x с Prometheus 2. Скопируйте резервную копию существующей конфигурации Prometheus, созданной на предыдущем шаге, в каталог + / etc / prometheus / +.

sudo cp /etc/prometheus1/prometheus.yml.bak /etc/prometheus/prometheus.yml

Установите пользователя и группу в только что созданном файле конфигурации для пользователя * prometheus *.

sudo chown prometheus:prometheus /etc/prometheus/prometheus.yml

Единственное изменение, которое вы внесете в этот файл, - это попросите Prometheus 2.0 использовать Prometheus 1.8.2 в качестве хранилища данных только для чтения, чтобы у вас был доступ к старым данным. Откройте файл конфигурации в текстовом редакторе.

sudo nano /etc/prometheus/prometheus.yml

В конце файла конфигурации добавьте директиву + remote_read +, которая читает из удаленного экземпляра Prometheus. Скажите ему прочитать из + localhst: 9089 +, вашего экземпляра Prometheus 1.8.2:

Конфигурационный файл Прометея - /etc/prometheus/prometheus.yml

...

remote_read:
   - url: http://localhost:/api/v1/read

Когда вы закончите, сохраните файл и закройте текстовый редактор.

Перед первым запуском Prometheus 2.0 мы обновим правила оповещения и настроим Alertmanager для работы с Prometheus. Если вы не используете правила оповещения или Alertmanager, пропустите следующий шаг.

Шаг 4 - Настройка оповещения (необязательно)

Правила оповещения Prometheus 1.x были определены с использованием пользовательского синтаксиса. Начиная с версии 2.0, вы определяете правила оповещения, используя YAML. Чтобы упростить миграцию, команда Prometheus '+ promtool + `может преобразовать старые файлы правил в новый формат. Если вы не используете правила оповещения, вы можете пропустить этот шаг.

Сначала скопируйте все ваши правила из каталога + / etc / prometheus1 + в каталог + / etc / prometheus +.

sudo cp /etc/prometheus1/*.rules /etc/prometheus/

Также убедитесь, что у вас установлена ​​версия + promtool + 2.0, выполнив следующую команду:

promtool --version

Вывод содержит информацию о версии и сборке + promtool +.

promtool --versionpromtool, version 2.0.0 (branch: HEAD, revision: 0a74f98628a0463dddc90528220c94de5032d1a0)
 build user:       root@615b82cb36b6
 build date:       20171108-07:11:59
 go version:       go1.9.2

Если версия не 2.0, убедитесь, что вы скопировали исполняемый файл + promtool + в правильное место.

Теперь перейдите в каталог + / etc / prometheus or.

cd /etc/prometheus

Выполните следующую команду + promtool + для каждого файла + .rules +, который у вас есть в каталоге:

sudo promtool update rules .rules

Это создает новый файл с именем + .rules.yml + из предоставленного файла. Если вы видите какое-либо сообщение об ошибке на экране, следуйте инструкциям на экране, чтобы решить проблему, прежде чем продолжить обучение.

Убедитесь, что пользователь и владелец группы правильно установлены для файлов, созданных с помощью + promtool +.

sudo chown prometheus:prometheus .rules

Наконец, обновите файл конфигурации Prometheus, чтобы использовать вновь созданные файлы правил вместо старых. Откройте файл конфигурации в вашем редакторе.

sudo nano /etc/prometheus/prometheus.yml

Добавьте суффикс + .yml + к каждой записи в директиве + rule_files +, например так:

...
rule_files:
 - alert1.rules
 - alert2.rules
...

Сохраните файл и выйдите из редактора.

Теперь удалите старые файлы правил оповещения, поскольку они больше не нужны.

sudo rm

Далее, давайте настроим Прометей для обнаружения Alertmanager. Флаг + -alertmanager.url + больше не существует. Вместо этого Prometheus 2.0 представил Alertmanager Service Discovery, который предоставляет множество новых функций и улучшенную интеграцию с такими службами, как Kubernetes. Если вы не используете Alertmanager, пропустите оставшуюся часть этого шага.

Снова откройте файл + prometheus.yml + в вашем редакторе:

sudo nano /etc/prometheus/prometheus.yml

Следующая директива + alerting + предписывает Прометею использовать Alertmanager, работающий на порте дроплета +: 9093 +. Вы можете добавить следующее содержимое в любом месте файла:

/etc/prometheus/prometheus.yml

global:
...

alerting:
 alertmanagers:
 - static_configs:
   - targets:
     - alertmanager:9093

rule_files:
...

Сохраните файл и закройте текстовый редактор.

Prometheus теперь может использовать правила оповещения и общаться с Alertmanager, и мы готовы запустить его впервые.

Шаг 5 - Запуск Прометея 2.0

Чтобы запустить Prometheus 2.0 как сервис, нам нужно создать файл сервиса. Мы можем начать с служебного файла, который мы использовали для Prometheus 1.8.2, поскольку он в основном такой же, кроме команды + ExecStart +.

Создайте новый служебный файл, скопировав существующий:

sudo cp /etc/systemd/system/prometheus1.service /etc/systemd/system/prometheus.service

Откройте вновь созданный служебный файл в вашем редакторе:

sudo nano /etc/systemd/system/prometheus.service

Prometheus 2.0 вносит несколько важных изменений в систему флагов, в том числе:

  • Флаги теперь имеют префикс с использованием двойной черты (+ - +) вместо одиночной черты.

  • Все флаги + -storage.local и` + -storage.remote + были удалены и заменены на флаги + - storage.tsdb`.

  • + -Alertmanager.url + был удален и заменен на Обнаружение службы Alertmanager, которое описано в предыдущем шаге.

Замените директиву + ExecStart + следующей:

ExecStart=/usr/local/bin/prometheus \
   --config.file /etc/prometheus/prometheus.yml \
   --storage.tsdb.path /var/lib/prometheus/ \
   --web.console.templates=/etc/prometheus/consoles \
   --web.console.libraries=/etc/prometheus/console_libraries

Директива + - config.file + указывает Прометею использовать файл + prometheus.yml + в каталоге + / etc / prometheus +. Вместо + - storage.local.path мы будем использовать` + - storage.tsdb.path`. Также мы добавили два флага + - web. +, Поэтому у нас есть доступ к встроенным веб-шаблонам.

Когда вы закончите, сохраните файл и закройте текстовый редактор.

Наконец, перезагрузите systemd, чтобы вы могли использовать только что созданный сервис.

sudo systemctl daemon-reload

Затем запустите Прометей:

sudo systemctl start prometheus

Проверьте статус службы, чтобы убедиться, что она работает как задумано.

sudo systemctl status prometheus
Prometheus service status● prometheus.service - Prometheus
   Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: enabled)
   Active:  (running) since Mon 2018-01-01 20:15:09 UTC; 1h 20min ago
 Main PID: 1947 (prometheus)
   Tasks: 7
   Memory: 54.3M
     CPU: 15.626s
   CGroup: /system.slice/prometheus.service
           └─1947 /usr/local/bin/prometheus --config.file /etc/prometheus/prometheus.yml --storage.tsdb.path /var/lib/prometheus/
...

Если статус службы не ++, следуйте инструкциям на экране и проследуйте предыдущие шаги, чтобы решить проблему, прежде чем продолжить обучение.

Теперь, когда вы знаете, что сервис работает, включите его при загрузке системы:

sudo systemctl enable prometheus

Вы можете получить доступ к веб-интерфейсу Prometheus, перейдя по ссылке + http: // + в своем веб-браузере и аутентифицировавшись, используя учетные данные, которые вы настроили при установке Prometheus. На следующем шаге вы будете использовать веб-интерфейс, чтобы убедиться, что Prometheus работает должным образом.

Шаг 6 - Тестирование Прометея

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

Перейдите к + http: // + в веб-браузере, чтобы получить доступ к веб-интерфейсу Prometheus. Вам будет предложено ввести имя пользователя и пароль, которые вы настроили при первоначальной установке Prometheus.

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

изображение: https: //assets.digitalocean.com/articles/promethus_2_upgrade_1604/EqSVHAn.png [Страница графика Прометея]

Прежде чем выполнить запрос, давайте проверим версию и статус экспортера Prometheus. Нажмите на ссылку * Status * на панели навигации и нажмите кнопку * Runtime & Build Information *. Вы увидите страницу, содержащую информацию о вашем сервере Prometheus.

изображение: https: //assets.digitalocean.com/articles/promethus_2_upgrade_1604/WmqDmEc.png [Информация о времени выполнения Prometheus]

Затем снова нажмите ссылку * Status *, затем нажмите кнопку * Targets *, чтобы убедиться, что ваши экспортеры работают так, как задумано. Веб-страница содержит информацию о ваших экспортерах, в том числе о том, работают ли они.

изображение: https: //assets.digitalocean.com/articles/promethus_2_upgrade_1604/8X8y7ll.png [Цели Прометея]

Если вы видите какую-либо ошибку, обязательно устраните ее, следуя инструкциям на экране, прежде чем продолжить обучение.

Вы не увидите свой источник данных Prometheus 1.8.2, поскольку он используется как хранилище данных, а не как экспортер. Поэтому давайте обеспечим доступ к старым и новым данным. Нажмите на кнопку * График *.

В поле * Expression * введите + node_memory_MemAvailable / 1024/1024 +, чтобы получить доступную память вашего сервера в мегабайтах. Нажмите на кнопку * Выполнить *.

Вы увидите результаты, отображаемые на экране:

изображение: https: //assets.digitalocean.com/articles/promethus_2_upgrade_1604/8ZEKOvP.png [График Прометея - Запрос]

Нажмите на вкладку * График *, чтобы визуализировать доступную память с течением времени. На графике вы должны увидеть предыдущие данные, а после перерыва, пока Прометей не работал, последние данные.

изображение: https: //assets.digitalocean.com/articles/promethus_2_upgrade_1604/65dC32n.png [Визуализация запроса Prometheus]

Если вы не видите старые данные, убедитесь, что Prometheus 1.8.2 работает, проверив состояние его службы, и что вы настроили Prometheus 2.0 для использования его в качестве удаленной базы данных.

Вы убедились, что Prometheus работает и правильно сообщает данные. Теперь давайте посмотрим, как вы можете удалить Prometheus 1.8.2 и старые данные, если они больше не используются.

Шаг 7 - Удаление старых данных (необязательно)

Вы можете удалить Prometheus 1.8.2 и ваши старые данные, когда они вам больше не нужны. Выполните следующие шаги, чтобы очистить все.

Сначала удалите директиву + remote_read + из файла конфигурации Prometheus 2. Откройте файл конфигурации Prometheus 2.0 в вашем редакторе:

sudo nano /etc/prometheus/prometheus.yml

Найдите и удалите директиву + remote_read +, которая должна находиться в конце файла:

remote_read:
   - url: http://localhost:/api/v1/read

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

sudo systemctl restart prometheus

Убедитесь, что служба работает правильно:

sudo systemctl status prometheus
Prometheus service status● prometheus.service - Prometheus
  Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: enabled)
  Active:  (running) since Mon 2018-01-01 20:15:09 UTC; 1h 20min ago
Main PID: 1947 (prometheus)
   Tasks: 7
  Memory: 54.3M
     CPU: 15.626s
  CGroup: /system.slice/prometheus.service
          └─1947 /usr/local/bin/prometheus --config.file /etc/prometheus/prometheus.yml --storage.tsdb.path /var/lib/prometheus/
...

Если статус службы не ++, следуйте инструкциям на экране и проследуйте предыдущие шаги, чтобы решить проблему, прежде чем продолжить обучение.

Затем отключите и удалите службу + prometheus1 +, а затем очистите все соответствующие каталоги и файлы Prometheus 1.8.2.

Отключите службу, чтобы убедиться, что она не запускается автоматически:

sudo systemctl disable prometheus1

Затем остановите службу:

sudo systemctl stop prometheus1

Отсутствие вывода означает, что операция завершена успешно.

Теперь удалите служебный файл + prometheus1 +:

sudo rm /etc/systemd/system/prometheus1.service

Наконец, удалите оставшиеся файлы, так как они больше не нужны. Сначала удалите исполняемые файлы + prometheus1 + и + promtool1 +, расположенные в каталоге + / usr / local / bin +.

sudo rm /usr/local/bin/prometheus1 /usr/local/bin/promtool1

Затем удалите каталоги + / etc / prometheus1 + и + / var / lib / prometheus1 +, которые вы использовали для хранения данных и конфигурации.

sudo rm -r /etc/prometheus1 /var/lib/prometheus1

Prometheus 1.8.2 теперь удален из вашей системы, и ваши старые данные исчезли.

Заключение

В этом руководстве вы обновили Prometheus 1.x до Prometheus 2.0, обновили все файлы правил и настроили Prometheus для обнаружения Alertmanager, если он есть.

Узнайте больше обо всех изменениях, которые включает в себя Prometheus 2.0, читая официальный пост Announcing Prometheus 2.0 и https: // github .com / prometheus / prometheus / blob / master / CHANGELOG.md # 200—​2017-11-08 [список изменений проекта].