Service Catalog
Автоматическое обнаружение, каталогизация и управление сервисами в инфраструктуре
🔧 Team и выше
Обзор
Service Catalog автоматически обнаруживает сервисы на подключённых агентах: Docker-контейнеры, systemd-сервисы, слушающие порты, сетевые соединения и процессы. Строит полный каталог с metadata (owner, team, criticality), рассчитывает Health Score, определяет зависимости между сервисами и интегрируется с Infrastructure Map для визуализации графа зависимостей. Поддерживается ручная регистрация сервисов с кастомными тегами.
Обнаружение
Docker, systemd, порты, процессы
Все тарифы
Health Score
0-100 на основе CPU, memory, uptime
Все тарифы
Зависимости
Автоматическое построение графа
Team+
Metadata
Owner, team, criticality, теги
Team+
Архитектура обнаружения
Каждый агент FlowLink собирает информацию о сервисах через discovery plugins. Данные отправляются на relay, где Service Catalog агрегирует их, рассчитывает Health Score, определяет зависимости по сетевым соединениям и обогащает metadata. Обновления происходят каждые 60 секунд.
# Discovery pipeline
1. Сбор:
Agent → Docker API / systemctl / ss / ps → raw service data
# 2. Агрегация:
Relay → deduplication → normalization → Health Score
# 3. Обогащение:
metadata (owner, team, criticality) + auto-tags + dependencies
# 4. Индексация:
Service Catalog → API + Infrastructure Map graph
Что обнаруживается
Image, status, ports, volumes, CPU, memory, network I/O
Unit status, uptime, memory (RSS), CPU usage, активные подключения
Protocol (TCP/UDP), bind address, process owner, PID
Active TCP/UDP connections, remote peers, state
PID, name, user, CPU%, MEM%, command line, parent PID
Установленные пакеты (apt/rpm), версии, последние обновления
Metadata сервисов
Каждый сервис может иметь metadata: owner, team, criticality и кастомные теги. Metadata назначается автоматически (на основе конфигурации агента) или вручную через API.
| Поле | Тип | Описание |
|---|---|---|
| owner | string | Ответственный (email или username) |
| team | string | Команда-владелец (backend, frontend, devops, security) |
| criticality | string | critical / high / medium / low |
| environment | string | production / staging / development |
| tier | string | 1 (frontend) / 2 (backend) / 3 (data) |
| custom_tags | object | Произвольные ключ-значение теги |
Health Score
Каждый сервис получает Health Score от 0 до 100 на основе метрик и статуса. Формула учитывает CPU, memory, uptime и наличие ошибок.
Зависимости между сервисами
FlowLink автоматически определяет зависимости между сервисами на основе сетевых соединений. Если сервис A подключается к порту сервиса B, создаётся dependency edge A → B. Граф зависимостей используется для расчёта blast radius при инцидентах и визуализации в Infrastructure Map.
1{2 "service_id": "svc_api_01",3 "dependencies": {4 "upstream": [5 { "service_id": "svc_nginx_01", "type": "network", "port": 80 },6 { "service_id": "svc_redis_01", "type": "network", "port": 6379 }7 ],8 "downstream": [9 { "service_id": "svc_postgres_01", "type": "network", "port": 5432 }10 ],11 "blast_radius": 412 }13}
Автоматические теги
Service Catalog автоматически присваивает теги на основе обнаруженных данных.
Регистрация сервисов
Помимо автоматического обнаружения, сервисы можно зарегистрировать вручную через API с полным набором metadata.
1curl -X POST "https://api.flowlink.io/v1/catalog/services" \2 -H "Authorization: Bearer $TOKEN" \3 -H "Content-Type: application/json" \4 -d '{5 "name": "payment-service",6 "type": "custom",7 "agent_id": "agent-prod-01",8 "metadata": {9 "owner": "payments-team@company.com",10 "team": "backend",11 "criticality": "critical",12 "environment": "production",13 "tier": "2"14 },15 "tags": {16 "pci": "true",17 "data_class": "financial",18 "region": "eu-west-1"19 }20 }'
1{2 "id": "svc_payment_01",3 "name": "payment-service",4 "type": "custom",5 "agent_id": "agent-prod-01",6 "status": "registered",7 "health_score": null,8 "metadata": {9 "owner": "payments-team@company.com",10 "team": "backend",11 "criticality": "critical",12 "environment": "production",13 "tier": "2"14 },15 "tags": {16 "pci": "true",17 "data_class": "financial",18 "region": "eu-west-1"19 },20 "registered_at": "2026-01-15T14:00:00Z",21 "last_seen": null22}
API Reference
GET /api/v1/catalog/servicesСписок всех сервисовPOST /api/v1/catalog/servicesЗарегистрировать сервисGET /api/v1/catalog/services/{id}Детали сервисаPATCH /api/v1/catalog/services/{id}Обновить metadata сервисовDELETE /api/v1/catalog/services/{id}Удалить сервис из каталогаGET /api/v1/catalog/services/{id}/dependenciesЗависимости сервисаGET /api/v1/catalog/services/{id}/metricsИстория метрикGET /api/v1/catalog/services/{id}/eventsСобытия сервисаПример: список сервисов
1curl -s "https://api.flowlink.io/v1/catalog/services?limit=10&tag=environment:production" \2 -H "Authorization: Bearer $TOKEN" | jq
1{2 "services": [3 {4 "id": "svc_nginx_01",5 "name": "nginx",6 "type": "docker",7 "agent_id": "agent-prod-01",8 "image": "nginx:1.25",9 "status": "running",10 "health_score": 92,11 "metadata": {12 "owner": "devops@company.com",13 "team": "devops",14 "criticality": "high",15 "environment": "production",16 "tier": "1"17 },18 "ports": [{ "port": 80, "protocol": "tcp", "bind": "0.0.0.0" }],19 "resources": {20 "cpu_pct": 2.3,21 "memory_mb": 64,22 "network_rx_mb": 150.2,23 "network_tx_mb": 450.824 },25 "tags": {26 "environment": "production",27 "runtime": "docker",28 "exposed": "true",29 "health": "healthy"30 },31 "dependencies": {32 "upstream": [],33 "downstream": [34 { "service_id": "svc_api_01", "port": 8080 }35 ]36 },37 "uptime_seconds": 864000,38 "discovered_at": "2026-01-10T08:00:00Z",39 "last_seen": "2026-01-15T14:32:01Z"40 }41 ],42 "pagination": {43 "total": 47,44 "limit": 10,45 "offset": 0,46 "has_more": true47 }48}
| Param | Описание |
|---|---|
| type | docker, systemd, process, port, custom |
| status | running, stopped, registered |
| agent_id | Фильтр по агенту |
| tag | Фильтр по тегу (key:value) |
| health_score_min | Мин. Health Score |
| health_score_max | Макс. Health Score |
| search | Поиск по имени |
| criticality | critical, high, medium, low |
Интеграция с Infrastructure Map
Service Catalog является источником данных для Infrastructure Map. Каждый обнаруженный сервис становится узлом (node) в графе, а сетевые соединения — рёбрами (edges). Узлы раскрашиваются по Health Score, размер — по criticality. Это позволяет визуализировать топологию инфраструктуры и анализировать blast radius при инцидентах.
1# Blast radius для сервиса2curl -s "https://api.flowlink.io/v1/catalog/services/svc_api_01/blast-radius" \3 -H "Authorization: Bearer $TOKEN" | jq
1{2 "service_id": "svc_api_01",3 "direct_downstream": ["svc_postgres_01", "svc_redis_01"],4 "blast_radius": 4,5 "affected_services": [6 "svc_postgres_01", "svc_redis_01",7 "svc_cache_01", "svc_worker_01"8 ],9 "criticality_impact": "high"10}
Примеры использования
Устранение неполадок
Сервис не обнаруживается
Убедитесь, что агент запущен и имеет доступ к Docker API / systemctl. Проверьте, что discovery plugin активен в конфигурации агента.
Health Score всегда 0
Для manually registered сервисов (type: custom) Health Score не рассчитывается автоматически. Используйте PATCH /catalog/services/{id}/metrics для отправки метрик.
Зависимости не определяются
Зависимости строятся на основе сетевых соединений. Если сервисы используют Unix sockets или shared memory, добавьте зависимости вручную через API.
Лучшие практики
Заполняйте metadata для всех сервисов
Owner, team и criticality обязательны для production сервисов. Это ускоряет incident response и on-call escalation.
Используйте теги для фильтрации
Стандартизируйте теги: environment, tier, data_class. Это упрощает поиск и фильтрацию в каталоге.
Мониторьте unhealthy сервисы
Настройте webhook на agent_health_changed или используйте API для мониторинга сервисов с Health Score < 50.
Рассчитывайте blast radius
Перед изменениями в инфраструктуре проверяйте blast radius затрагиваемых сервисов через API.