0

practicum

Практическая работа. Отправка собственных метрик

26.04.2022

Часто бывает полезно отслеживать более широкий набор метрик, чем тот, что из коробки доступно в Yandex Monitoring.Предположим, вам интересно узнать, сколько людей заходит на ваш сайт и как их число зависит от времени дня или дня недели. Вы можете выгружать эти данные из Яндекс.Метрики или вашей собственной аналитической системы и самостоятельно загружать в Yandex Monitoring с помощью API.Давайте попробуем сделать это с нашим сайтом.

Отправка метрик через API

  1. Получите IAM-токен:

Обратите внимание — токены устаревают через 12 часов после создания. Поэтому если вы сделаете паузу при выполнении данной практической работы, для продолжения лучше запросить новый токен.

  1. Сохраните токен в переменной окружения, так его будет проще использовать:
export IAM_TOKEN=CggaATEVAgA... 
  1. Создайте файл с телом запроса, например my-metrics.json. В свойстве metrics указывается список метрик для записи. Пусть это будет количество пользователей сайта. В массиве timeseries указываются значения на разные моменты времени (измените число на сегодняшнее).
{
  "metrics": [
    {
      "name": "number_of_users",
      "labels": {
       "site": "aibolit"
      },
      "type": "IGAUGE",
      "timeseries": [
        {
          "ts": "2021-05-10T10:00:00Z",
          "value": "22"
        },
        {
          "ts": "2021-05-10T11:00:00Z",
          "value": "44"
        },
        {
          "ts": "2021-05-10T12:00:00Z",
          "value": "11"
        },
        {
          "ts": "2021-05-10T13:00:00Z",
          "value": "55"
        },
        {
          "ts": "2021-05-10T14:00:00Z",
          "value": "33"
        }
      ]
    }
  ]
} 
  1. Отправьте запрос, указав в нем ID каталога и имя сервиса custom (это имя указывается для всех пользовательских метрик):
curl -X POST \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer ${IAM_TOKEN}" \
    -d '@my-metrics.json' \
'https://monitoring.api.cloud.yandex.net/monitoring/v2/data/write?folderId=b1gfdbij3ijgopgqv9m9&service=custom' 

Мониторинг пользовательских метрик

  1. Создайте на вашем дашборде новый виджет, назовите его «Число пользователей сайта».
  2. В виджете создайте запрос с параметрами service = Custom и name = number_of_users. Убедитесь, что в виджете выбран нужный период:
image

Этот график станет нагляднее, если вместо точек отображать столбцы. Тип графика можно изменить с помощью кнопки в правом верхнем углу виджета:

image

Мониторинг метрик Linux

Другой пример — ваши приложения запущены на виртуальных машинах под Linux. По умолчанию вы можете посмотреть утилизацию ресурсов процессора или диска для виртуальной машины в целом. Но вам будет полезно знать, сколько ресурсов потребляет каждое из них. В Yandex Monitoring вы можете отслеживать системные метрики Linux, такие как объем свободной памяти или загрузка процессора. Но для этого нужно дополнительно настроить отправку этих метрик с помощью Yandex Unified Agent, который мы уже упоминали.

Установка Yandex Unified Agent

  1. Создайте виртуальную машину. На нее вы будете устанавливать Yandex Unified Agent. Можете использовать образ с ОС Ubuntu, который вы создали ранее и поместили в Container Registry. Назовите машину, например, for-ua.При создании используйте ваш сервисный аккаунт. Задайте логин (например, ua-user) и ssh-ключ.
  2. Для сервисного аккаунта добавьте роль monitoring.editor.
  3. Посмотрите публичный IP-адрес машины for-ua и зайдите на нее по ssh:
ssh ua-user@84.252.135.237 

Теперь вы можете установить Yandex Unified Agent:

Скопировать кодua_version=$(curl -s https://storage.yandexcloud.net/yc-unified-agent/latest-version) bash -c 'curl -s -O https://storage.yandexcloud.net/yc-unified-agent/releases/$ua_version/unified_agent && chmod +x ./unified_agent' 
  1. Создайте файл config.yml с типовой спецификацией для доставки метрик Linux.

В параметре folder_id укажите ID вашего каталога.

status:
   port: "16241"
 
storages:
   - name: main
     plugin: fs
     config:
       directory: /var/lib/yandex/unified_agent/main
       max_partition_size: 100mb
       max_segment_size: 10mb
 
channels:
   - name: cloud_monitoring
     channel:
       pipe:
         - storage_ref:
             name: main
       output:
         plugin: yc_metrics
         config:
           folder_id: "b1gfdbij3ijgopgqv9m9"
           iam:
             cloud_meta: {}
 
routes:
   - input:
       plugin: linux_metrics
       config:
         namespace: sys
     channel:
       channel_ref:
         name: cloud_monitoring
 
   - input:
       plugin: agent_metrics
       config:
         namespace: ua
     channel:
       pipe:
         - filter:
             plugin: filter_metrics
             config:
               match: "{scope=health}"
       channel_ref:
         name: cloud_monitoring
 
import:
   - /etc/yandex/unified_agent/conf.d/*.yml 

В секции status достаточно указать порт для просмотра статуса Yandex Unified Agent.Секция storage содержит список хранилищ, в которых будут находиться выгруженные данные. Для практической работы достаточно одного файлового хранилища (fs).Секция channels содержит список именованных каналов, к этим каналам можно обращаться по имени из других секций спецификации. Здесь обозначен один канал с именем cloud_monitoring. К нему идет обращение из секции routes, которая содержит список маршрутов доставки метрик.Подробнее о конфигурировании Yandex Unified Agent вы можете почитать в документации.

  1. Скопируйте файл спецификации в виртуальную машину for-ua:
scp config.yml ua-user@84.252.135.237:config.yml 
  1. Теперь запустите Unified Agent с созданной спецификацией:
sudo ./unified_agent --config config.yml 

Если запуск прошел успешно, в конце вы увидите сообщение такого вида:

... NOTICE agent started 

Настройка виджета для мониторинга метрик Linux

  1. Создайте на вашем дашборде новый виджет, назовите его «Метрики Linux».
  2. В виджете создайте запрос с параметром service = Custom. В параметре name выберите любой параметр, начинающийся с sys — все это системные метрики, поставляемые Unified Agent. Например, name = sys.memory.MemAvailable.
image

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

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

Подписка

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


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