0

practicum

Практическая работа. Выгрузка метрик в формате Prometheus

26.04.2022

Как мы уже говорили раньше, метрики можно выгружать из Yandex Cloud Monitoring в сторонние приложения и сервисы. Пожалуй, чаще всего их выгружают для сервера Prometheus.

На сегодняшний день Prometheus — один из самых популярных инструментов для мониторинга приложений и сервисов. В основе его лежит специализированная СУБД для анализа временных рядов, которая обеспечивает высокое быстродействие. В отличие от большинства систем мониторинга, Prometheus не ждет, пока сторонние приложения передадут ему свои метрики, а сам опрашивает подключенные к нему приложения и собирает нужные данные.

Prometheus и Yandex Cloud Monitoring решают схожие задачи — хранят значения разных метрик. Prometheus фактически является стандартом для обмена метриками. Поэтому даже используя сервисы Yandex.Cloud, ИТ-администраторы часто хотят отслеживать их работу с помощью Prometheus. Чтобы не лишать специалистов привычных инструментов, Yandex Cloud Monitoring поддерживает выгрузку данных в формате Prometheus. Для этого используется метод prometheusMetrics.

Для визуализации данных, собираемых Prometheus, можно использовать сервис Grafana (в нем можно зарегистрироваться бесплатно на тестовый период). Вы можете установить Grafana на свой компьютер, а можете работать в облачной версии.

Посмотрим, как настраивается выгрузка метрик в Prometheus и работа с ними в Grafana. Вы снова будете мониторить сайт клиники «Доктор Айболит».

Подготовка

  1. Создайте ключ доступа через веб-консоль Yandex.Cloud или CLI.

Если вы создаете ключ в веб-консоли, то перейдите в каталог, из которого будете выгружать метрики (например, default). Затем перейдите на вкладку Сервисные аккаунты и войдите в существующий аккаунт. Нажмите кнопку Создать новый ключ и выберите Создать API-ключ. В описании ключа можно указать, например, «для доступа к Prometheus». Сохраните секретную часть ключа в отдельный файл, например, prometheus-key.txt.

  1. Назначьте сервисному аккаунту роль monitoring.viewer на выбранный каталог.
  2. Создайте файл спецификации prometheus.yml (см. пример ниже, замените в нем значение folderId на идентификатор каталога, а значение для bearer_token — на ключ доступа из файла prometheus-key.txt):
lobal:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).
 
rule_files:
 
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']
 
  - job_name: 'yc-monitoring-export'
    metrics_path: '/monitoring/v2/prometheusMetrics'
    params:
      folderId:
      - 'b1gfdbij3ijgopgqv9m9' 
      service:
      - 'storage' 
    bearer_token: 'aEtdGRdWH1LJQoCdnFwVR9Ei42PlKMukZ0yNhA4a'
    static_configs:
    - targets: ['monitoring.api.cloud.yandex.net']
      labels:
          folderId: 'b1gfdbij3ijgopgqv9m9'
          service: 'storage' 

Запуск сервера Prometheus

  1. Если вы уже работаете с Prometheus, пропустите все шаги по установке — просто добавьте секцию scrape_configs из примера выше в спецификацию вашего сервера Prometheus и перезапустите сервер, а затем переходите к настройке Grafana.
  2. Для запуска сервера Prometheus используйте официальный Docker-образ prom/prometheus.Сначала загрузите образ. Для этого запустите Docker Desktop и выполните команду:
docker pull prom/prometheus 
  1. Чтобы на сервере сразу был ваш файл спецификации, создайте свой образ на основе prom/prometheus. Подготовьте Dockerfile с двумя командами:
FROM prom/prometheus
ADD prometheus.yml /etc/prometheus/ 

Сохраните этот файл в тот же каталог, где находится prometheus.yml. Назовите его именем по умолчанию: Dockerfile.

  1. Создайте образ с вашей конфигурацией (используйте ваш идентификатор в Yandex Container Registry):
docker build . -t cr.yandex/crpfpd8jhhldiqah91rc/my-prometheus:latest -f Dockerfile 
  1. Аутентифицируйтесь в Yandex Container Registry с помощью Docker Credential helper (чтобы Docker мог от вашего имени отправить образ в ваш реестр):
yc container registry configure-docker 
  1. Теперь отправьте образ в ваше хранилище в облаке:
docker push cr.yandex/crpfpd8jhhldiqah91rc/my-prometheus:latest 
  1. Создайте виртуальную машину с помощью Container Optimized Image, вы уже делали это раньше в практической работе (в разделе Выбор образа загрузочного диска переключитесь на вкладку Container Solution и нажмите Настроить. Выберите из реестра созданный вами образ, остальные настройки оставьте по умолчанию и нажмите Применить).При создании виртуальной машины используйте ваш сервисный аккаунт. Задайте логин (например, prom) и ssh-ключ.

Назовите машину, например, for-prometheus.

  1. Проверьте статус сервера по адресу http://84.252.135.189:9090/targets (здесь должен быть IP-адрес вашей виртуальной машины с сервером Prometheus). Через несколько минут после запуска статус процессов prometheus и yc-monitoring-export должен быть UP.
image
  1. Подайте нагрузку на ваш сайт:
while true; do wget -q -O- http://www.my-example.com.website.yandexcloud.net; done 

Подождите несколько минут и проверьте, как поставляются метрики в Prometheus. В верхнем меню выберите пункт Graph. Нажмите на значок “Земли”. Откроется меню с доступными метриками. Выберите метрику, которую вы хотите проверить, например, traffic и нажмите кнопку Execute.Переключитесь на вкладку Graph. Выберите текущее время, для наглядности уменьшите интервал запроса данных (например, до 15 минут). Вскоре вы увидите график изменения выбранной метрики.

image

Настройка Grafana

  1. Теперь посмотрим, как метрики визуализируются в системе Grafana.Если у вас еще нет аккаунта в Grafana, создайте его с помощью нескольких простых шагов, это бесплатно. Вам откроется интерфейс по адресу https://<ваш_логин>.grafana.net/

Добавление источника данных

  1. Настройте Prometheus в качестве источника данных. На главной странице нажмите кнопку Add your first data source. Из предложенного списка выберите источник Prometheus.
image
  1. В следующем окне в поле URL введите endpoint сервера Prometheus http://84.252.135.189:9090. Больше никакие настройки менять не нужно. Внизу нажмите кнопку Save & Test. Должна отобразиться надпись Data source is working.

Добавление дашборда

  1. Вернитесь на главную страницу (нажав на логотип в левом верхнем углу) и нажмите Create your first dashboard. Откроется окно настройки дашборда.
  2. В нижней части экрана на вкладке Query выберите источник данных — Prometheus.
  3. Выберите метрику, которую вы хотите отслеживать. Нажмите на поле Metrics, в открывшемся списке выберите метрику traffic.

Сверху отобразится график выбранной метрики.

image
  1. Вверху справа в поле Panel Title укажите название графика (например, «Трафик сайта»).
  2. Теперь сохраните настройки — в правом верхнем углу нажмите кнопку Save и укажите название дашборда (например, «Мой дашборд»).
image

Вы научились отслеживать метрики Yandex.Cloud не только средствами Yandex Monitoring, но и с помощью сторонних систем, в том числе широко используемых Prometheus и Grafana. Но метрики можно использовать не только для визуальной оценки состояния облака и его ресурсов. В следующих двух уроках мы посмотрим, как можно облегчить работу специалиста DevOps и автоматизировать мониторинг.

Свежие комментарии

Подписка

Лучшие статьи


Fatal error: Uncaught Error: Call to a member function have_posts() on null in /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/blog.php:380 Stack trace: #0 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/widgets/latest-posts/widget.php(257): fox56_blog_grid(NULL, Array) #1 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/widgets/latest-posts/register.php(33): include('/home/host18670...') #2 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/class-wp-widget.php(394): Wi_Widget_Latest_Posts->widget(Array, Array) #3 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/widgets.php(837): WP_Widget->display_callback(Array, Array) #4 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(417): dynamic_sidebar('sidebar') #5 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(136): fox56_single_sidebar() #6 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(7): fox56_single_inner() #7 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/single.php(23): fox56_single() #8 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/template-loader.php(106): include('/home/host18670...') #9 /home/host1867038/the-devops.ru/htdocs/www/wp-blog-header.php(19): require_once('/home/host18670...') #10 /home/host1867038/the-devops.ru/htdocs/www/index.php(17): require('/home/host18670...') #11 {main} thrown in /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/blog.php on line 380