Как работает сбор метрик
Схема взаимодействия
Заголовок раздела «Схема взаимодействия»sequenceDiagram
autonumber
participant KS as kube-state-metrics<br/>+ node-exporter
participant P as Prometheus
participant A as Агент metrics-collector<br/>(в вашем кластере)
participant API as API OpsMan AI
participant DB as Хранилище платформы
participant UI as Консоль
loop каждые 30 секунд
KS->>P: экспорт метрик (scrape)
A->>P: PromQL-запросы<br/>(поды / workload / ноды)
P-->>A: метрики
A->>API: POST /ingest<br/>Bearer company token
API->>DB: UPSERT
end
UI->>API: запрос отчёта
API->>DB: агрегация
DB-->>API: результат
API-->>UI: JSON
Что именно запрашивает агент
Заголовок раздела «Что именно запрашивает агент»| Метрика | Источник | Ед. |
|---|---|---|
| CPU usage | container_cpu_usage_seconds_total (5-минутный rate) | cores |
| Memory usage | container_memory_working_set_bytes | bytes |
| CPU request | kube_pod_container_resource_requests{resource="cpu"} | cores |
| CPU limit | kube_pod_container_resource_limits{resource="cpu"} | cores |
| Memory request | kube_pod_container_resource_requests{resource="memory"} | bytes |
| Memory limit | kube_pod_container_resource_limits{resource="memory"} | bytes |
| Network RX/TX | container_network_{receive,transmit}_bytes_total (5-минутный rate) | bytes/sec |
| Pod → Node | kube_pod_info | — |
| Метрика | Источник | Ед. |
|---|---|---|
| CPU capacity | kube_node_status_capacity{resource="cpu"} | cores |
| CPU allocatable | kube_node_status_allocatable{resource="cpu"} | cores |
| Memory capacity | kube_node_status_capacity{resource="memory"} | bytes |
| Memory allocatable | kube_node_status_allocatable{resource="memory"} | bytes |
| Usage per node | агрегируется на стороне агента | — |
Агрегация Workloads
Заголовок раздела «Агрегация Workloads»Агент сам определяет, какому Deployment / StatefulSet / DaemonSet принадлежит под, по его имени. Типичный шаблон имени пода Kubernetes — <workload>-<replicaset-hash>-<pod-hash>. Агент отбрасывает два последних сегмента и получает имя workload’а.
Для каждого workload за цикл считаются:
- сумма CPU/memory request и limit по всем подам,
- количество подов (
PodCount), - уникальный список нод, на которых они запущены.
Результат идёт в OpsMan AI как одна запись workload — в консоли вы видите агрегат, а не сотни отдельных подов.
Надёжность и задержки
Заголовок раздела «Надёжность и задержки»- Цикл строго 30 секунд. Если запрос к Prometheus занял 10 секунд, следующий цикл стартует через 20 секунд после начала предыдущего.
- Ретраев нет. Если Prometheus недоступен или API вернул ошибку, цикл пропускается; следующая попытка через 30 секунд. Данные за пропущенный цикл теряются — это компромисс в пользу простоты.
- Идемпотентность. Повторная отправка тех же данных приводит к перезаписи, а не дублированию.
Безопасность
Заголовок раздела «Безопасность»- Токен. Агент использует company token — он хранится в Kubernetes Secret внутри вашего кластера. Токен даёт право только отправлять метрики, не больше.
- TLS. Трафик между агентом и API OpsMan AI — HTTPS.
- Нет доступа из платформы в кластер. Платформа не открывает обратные соединения в вашу сеть; весь трафик инициирует агент.