Про саму 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/push
– https://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
:
Готово.