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

Кратко:

  • Отправка собственных метрик в Yandex Monitoring возможна через API.
  • Для этого нужно получить IAM-токен и создать файл с телом запроса (my-metrics.json).
  • В файле указывается список метрик и значения на разные моменты времени.
  • Отправлять запрос с указанием идентификатора каталога и имени сервиса custom.
  • На дашборде можно создать виджет с графиком пользовательских метрик.
  • Мониторинг метрик Linux возможен с помощью Yandex Unified Agent.
  • Установка Yandex Unified Agent на виртуальной машине с ОС Ubuntu.
  • Создание файла config.yml с типовой спецификацией для доставки метрик Linux.
  • Настройка виджета для мониторинга метрик Linux с использованием системных метрик Linux.

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

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

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

  1. Получите IAM-токен:
  1. Сохраните токен в переменной окружения, так его будет проще использовать:
    export IAM_TOKEN=<IAM-токен>
     
     
  2. Создайте файл с телом запроса, например 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. Отправьте запрос, указав в нем идентификатор каталога и имя сервиса 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=<идентификатор_каталога>&service=custom' 
     
     
При выполнении этой команды может вернуться ошибка:
{"writtenMetricsCount":0,"errorMessage":"Response not OK from all clusters
UNKNOWN_SHARD: Metrics storage is not initialized yet, please wait
UNKNOWN_SHARD: Metrics storage is not initialized yet, please wait"}
 
Если это произошло - подождите несколько минут и повторите запрос.

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

  1. Создайте на вашем дашборде новый виджет с графиком, назовите его «Число пользователей сайта».
  2. В виджете создайте запрос с параметрами service = Custom Metrics и 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@<публичный_адрес_ВМ>
     
    Теперь вы можете установить 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'
     
     
    Также вы можете выбрать опцию Установить в поле Агент сбора метрик при создании ВМ, тогда Yandex Unified Agent будет установлен автоматически.
  4. В параметре folder_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: "<идентификатор_каталога>"
               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 вы можете почитать в документации.
  5. Скопируйте файл спецификации в виртуальную машину for-ua:
    scp config.yml Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript.:config.yml
     
     
  6. Теперь запустите Unified Agent с созданной спецификацией:
    sudo ./unified_agent --config config.yml
     
     
    Если запуск прошел успешно, в конце вы увидите сообщение такого вида:
    ... NOTICE agent started
     
     

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

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