Skip to content
ВозможностиДокументацияЦеныПартнёрыPlaygroundFAQ

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

Что обнаруживается

🐳
Docker-контейнеры

Image, status, ports, volumes, CPU, memory, network I/O

⚙️
systemd-сервисы

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.

ПолеТипОписание
ownerstringОтветственный (email или username)
teamstringКоманда-владелец (backend, frontend, devops, security)
criticalitystringcritical / high / medium / low
environmentstringproduction / staging / development
tierstring1 (frontend) / 2 (backend) / 3 (data)
custom_tagsobjectПроизвольные ключ-значение теги

Health Score

Каждый сервис получает Health Score от 0 до 100 на основе метрик и статуса. Формула учитывает CPU, memory, uptime и наличие ошибок.

score = (cpu_weight × (100 - cpu_pct)) + (mem_weight × (100 - mem_pct)) + uptime_factor - error_penalty
Здоров (75-100)
Предупреждение (50-74)
Проблемы (25-49)
Критический (0-24)

Зависимости между сервисами

FlowLink автоматически определяет зависимости между сервисами на основе сетевых соединений. Если сервис A подключается к порту сервиса B, создаётся dependency edge A → B. Граф зависимостей используется для расчёта blast radius при инцидентах и визуализации в Infrastructure Map.

json
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": 4
12 }
13}

Автоматические теги

Service Catalog автоматически присваивает теги на основе обнаруженных данных.

🏷️ environment: production / staging / development — на основе имени хоста и конфигурации агента
🏷️ runtime: docker / systemd / native — на основе типа процесса
🏷️ exposed: true / false — есть ли слушающие порты
🏷️ health: healthy / warning / critical — на основе Health Score
🏷️ tier: 1/2/3 — на основе позиции в графе зависимостей

Регистрация сервисов

Помимо автоматического обнаружения, сервисы можно зарегистрировать вручную через API с полным набором metadata.

bash
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 }'
json
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": null
22}

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События сервиса

Пример: список сервисов

bash
1curl -s "https://api.flowlink.io/v1/catalog/services?limit=10&tag=environment:production" \
2 -H "Authorization: Bearer $TOKEN" | jq
json
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.8
24 },
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": true
47 }
48}
ParamОписание
typedocker, systemd, process, port, custom
statusrunning, stopped, registered
agent_idФильтр по агенту
tagФильтр по тегу (key:value)
health_score_minМин. Health Score
health_score_maxМакс. Health Score
searchПоиск по имени
criticalitycritical, high, medium, low

Интеграция с Infrastructure Map

Service Catalog является источником данных для Infrastructure Map. Каждый обнаруженный сервис становится узлом (node) в графе, а сетевые соединения — рёбрами (edges). Узлы раскрашиваются по Health Score, размер — по criticality. Это позволяет визуализировать топологию инфраструктуры и анализировать blast radius при инцидентах.

bash
1# Blast radius для сервиса
2curl -s "https://api.flowlink.io/v1/catalog/services/svc_api_01/blast-radius" \
3 -H "Authorization: Bearer $TOKEN" | jq
json
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}

Примеры использования

📌 Inventory: полный список сервисов, контейнеров и процессов на всех агентах с metadata
📌 Capacity Planning: отслеживание утилизации CPU/memory для планирования масштабирования
📌 Incident Response: расчёт blast radius и быстрый поиск затронутых сервисов при инциденте
📌 Compliance: аудит запущенных сервисов для соответствия политикам безопасности
📌 On-call: автоматическое определение owner и team сервиса для escalation

Устранение неполадок

Сервис не обнаруживается

Убедитесь, что агент запущен и имеет доступ к 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.

Edit this page