VictoriaMetrics Cloud: інтеграція з AWS Data Firehose для CloudWatch метрик

Автор |  22/09/2024

Про саму VictoriaMetrics Cloud напишу окремо, а зараз хочу перевірити як можна писати CloudWatch Metrcis через AWS Firehose до VictoriaMetrics Cloud.

Власне, сам сервіс AWS Data Firehose дозволяє передачу потокових даних з різних джерел до сервісів Amazon на кшталт AWS S3, Redshift, OpenSearch, або до зовнішніх – Datadog, New Relic, і т.д.

Нещодавно VictoriaMetrics запустила (поки що в Beta) власну підтримку AWS Data Firehose, і тепер ми можемо стрімити дані до VictoriaMetrics Cloud.

Приємна особливість цього сетапу, що нам фактично не треба самим запускати якісь сервери або експортери для збору метрик – все повністю agentless та serverless, бо Data Firehose – це AWS Managed сервіс, який просто працює, а VictoriaMetrics Cloud працює повністю на інфраструктурі VictoriaMetrics, і не потребує від нас якихось особливих налаштувань.

Ще з цікавих моментів, це те, що CloudWatch віддає метрики а VictoriaMetrics приймає їх в форматі OpenTelemetry, хоча при бажанні у VictoriaMetrics можна їх конвертувати в формат Prometheus.

Власне, що будемо робити:

  • налаштуємо AWS Data Firehose Stream для передачі даних до VictoriaMetrics Cloud
  • налаштуємо CloudWatch Metrics Stream для передачі метрик в цей Firehose Stream

VictoriaMetrics Cloud Authentification

Перше, що потрібно зробити – це отримати URL ендпоінту, на який будуть відправлятись дані.

У VictoriaMetrics Cloud маємо створений Deployment (див. Creating deployments), в Overview якого маємо параметр Access Endpoint:

Друге – це отримати Access Token (див. Start writing and reading data).

Переходимо до вкладки Access, де маємо токен з правами read-write:

Тепер маємо дві частини, які будемо використовувати в AWS Firehose:

  • HTTP Endpoint URL: https://gw-c7-2b.cloud.victoriametrics.com
  • Bearer Access Token: ccbd4c8e-db49-463f-9813-371a09e549b6

З CloudWatch до VictoriaMetrics будемо писати в форматі OpenTelemetry, тому повний ендпоінт буде з URI /opentelemetry/api/v1/pushhttps://gw-c7-2b.cloud.victoriametrics.com/opentelemetry/api/v1/push.

Створення AWS Data Firehose Stream

Тут все доволі просто: нам потрібно задати Source, тобто – звідки і які дані будуть йти, і вказати Destination – куди ці дані відправляти.

При необхідності можна з AWS Lambda робити трансформації, але у випадку з метриками CloudWatch це не обов’язково.

Отже, переходимо до Amazon Data Firehose, клікаємо Create Firehose stream:

В Source вибираємо Direct PUT:

В Destination – HTTP Endpoint:

Задаємо Firehose stream name:

В Destination settings – вказуємо HTTP endpoint URL, який отримали в VictoriaMetrics Cloud + /opentelemetry/api/v1/push:

Токен аутентифікації задаємо в Access key у форматі “Bearer TOKEN_VALUE“:

Опціонально – включаємо GZIP.

Firehose потребує налаштування Backup storage для даних, які не зміг відправити до Destination – див. Handle data delivery failures.

Задаємо ім’я AWS S3 бакету:

Зберігаємо новий стрім – він готовий приймати дані.

Cloudwatch Metrics to AWS Data Firehose

Документація – Custom setup with Firehose.

Переходимо до CloudWatch > Metrcis > Streams, клікаємо Create metric stream:

Вибираємо Custom setup with Firehose, вибираємо створений вище стрім:

При необхідності – можна вибрати формат, але дефолтний OpenTelemetry 1.0 підтримується:

Вибираємо які саме метрики хочемо відправляти – всі, або тільки обрані:

Останнім задаємо ім’я стріма:

Перевіряємо, що Status == Running:

Перевірка Firehose Stream

Тепер маємо CloudWatch Metrcis Stream, який пише метрики до Firehose Stream, який потім відправляє їх до HTTP Endpoint у VictoriaMetrcis Cloud.

Чекаємо хвилин 5, і спершу перевіряємо метрики в CloudWatch Metrcis Stream:

Якщо тут метрики є, то переходимо до Firehose Stream > Monitoring, де маємо побачити, що дані йдуть до VictoriaMetrics Cloud:

При проблемах з відправкою даних – дивимось вкладку Destination error logs:

Також можна перевірити вкладку Monitoring в VictoriaMetrics – на графіку Ingestion rate мають бути запити з {type="opentelemetry"}:

VictoriaMetrics Explore та метрики CloudWatch

Включаємо Autocomplete – і маємо отримати список метрик, які приходять з AWS CloudWatch:

І далі можемо вже робити запити, наприклад використовуючи лейблу __name__:

sum({__name__="amazonaws.com/AWS/EC2/CPUUtilization"}) by (Namespace, cloud.region)

А аби переключити формат метрик з OpenTelemetry на Prometheus – переходимо до Settings > Advanced Settings, і додаємо параметр -opentelemetry.usePrometheusNaming:

Готово.