The Service Topology feature in Keep provides a visual representation of your service dependencies, allowing you to quickly understand the relationships between various components in your system. By mapping services and their interactions, you can gain insights into how issues in one service may impact others, enabling faster root-cause analysis and more effective incident resolution.

Key Concepts

  • Nodes: Represent individual services, applications, or infrastructure components.
  • Edges: Show the dependencies and interactions between nodes.

Supported Providers

Features

Visualizing Dependencies

The service topology graph helps you:

  • Identify critical dependencies between services.
  • Understand how failures in one service propagate through the system.
  • Highlight single points of failure or bottlenecks.

Real-Time Health Indicators

Nodes and edges are enriched with health indicators derived from alerts and metrics. This allows you to:

  • Quickly spot issues in your architecture.
  • Prioritize incident resolution based on affected dependencies.

Filter and Focus

Use filters to focus on specific parts of the topology, such as:

  • A particular environment (e.g., production, staging).
  • A service group (e.g., all database-related services).
  • Alerts of a specific severity or type.

Incident Integration

Service topology integrates seamlessly with Keep’s incident management features. When an incident is triggered, you can:

  • View the affected nodes and their dependencies directly on the topology graph.
  • Analyze how alerts related to the incident are propagating through the system.
  • Use this information to guide remediation efforts.

Manually adding Topology

This features allows you to create and manipulate your services and the dependencies between them.

  • Click on + Add Node to add a new service to your map.
  • Field Service and Display Name are mandatory fields and rest of the fields are optional. (Note: Tags accepts CSV)
  • Click Save, this adds a new service to your map.
  • You can add multiple such services and add connections/dependencies between them.
  • You can select on or more manually created services (holding Ctrl select multiple services), and delete them all at once using the Delete Services option.
  • You can click any service and use Update Service button to update a service.
  • To add a dependency drag from any service’s right handle (source) to another service’s left handle (target).
  • You can remove a dependency by dragging away a dependency from it’s target handle and leave it.
  • To add a protocol to your dependency: click the dependency > Click Edit Dependency > Fill in the protocol in the popup > Click OK.
  • You can only manipulate the services that are created manually.
  • Creating or updating a dependency is only possible between two manually created services.

Importing and Exporting topology

You can Import/Export topology data: services + applications + dependencies to/from keep using this feature.

  • Click the menu item to get the Import/Export option.
  • Data is Imported and Exported in YAML Format.
  • Below is a sample YAML:
applications:
- description: 'A sample application for monitoring and management'
  id: 398e7b9a-bc0f-487a-b6d7-049a16e500e4
  name: monitoring-app
  repository: 'https://github.com/sample-org/monitoring-app'
  services:
  - 556041
  - 556061
dependencies:
- depends_on_service_id: 556051
  id: 6219
  protocol: HTTP
  service_id: 556041
- depends_on_service_id: 556081
  id: 6220
  protocol: HTTPS
  service_id: 556051
- depends_on_service_id: 556041
  id: 6221
  protocol: GRPC
  service_id: 556061
- depends_on_service_id: 556071
  id: 6222
  protocol: TCP
  service_id: 556061
- depends_on_service_id: 556051
  id: 6223
  protocol: UDP
  service_id: 556071
services:
- id: 556041
  display_name: Auth Service
  service: PAH3VXB
  category: Backend
  description: 'Handles user authentication and session management'
  email: '[email protected]'
  environment: production
  ip_address: '192.168.1.10'
  is_manual: false
  mac_address: '00:1A:2B:3C:4D:5E'
  manufacturer: 'Dell'
  namespace: 'auth'
  repository: 'https://github.com/sample-org/auth-service'
  slack: '#auth-alerts'
  source_provider_id: ebe062c4814f483cb2c5d556fbb9395c
  tags: ['authentication', 'security']
  team: 'Auth Team'
- id: 556051
  display_name: Log Aggregator
  service: PFRKUOO
  category: Monitoring
  description: 'Main service responsible for collecting and aggregating logs'
  email: '[email protected]'
  environment: staging
  ip_address: '192.168.1.11'
  is_manual: false
  mac_address: '00:1A:2B:3C:4D:5F'
  manufacturer: 'HP'
  namespace: 'logs'
  repository: 'https://github.com/sample-org/log-aggregator'
  slack: '#logs-alerts'
  source_provider_id: ebe062c4814f483cb2c5d556fbb9395c
  tags: ['monitoring', 'logging']
  team: 'Logs Team'
- id: 556061
  display_name: Core API
  service: PWKXGRK
  category: API
  description: 'Main business logic service for processing user data'
  email: '[email protected]'
  environment: production
  ip_address: '192.168.1.12'
  is_manual: false
  mac_address: '00:1A:2B:3C:4D:60'
  manufacturer: 'Cisco'
  namespace: 'api'
  repository: 'https://github.com/sample-org/core-api'
  slack: '#backend-alerts'
  source_provider_id: ebe062c4814f483cb2c5d556fbb9395c
  tags: ['api', 'backend']
  team: 'Backend Team'
- id: 556071
  display_name: Database Service
  service: PFEIHAU
  category: Storage
  description: 'Handles database operations and caching'
  email: '[email protected]'
  environment: production
  ip_address: '192.168.1.13'
  is_manual: false
  mac_address: '00:1A:2B:3C:4D:61'
  manufacturer: 'IBM'
  namespace: 'db'
  repository: 'https://github.com/sample-org/database-service'
  slack: '#db-alerts'
  source_provider_id: ebe062c4814f483cb2c5d556fbb9395c
  tags: ['database', 'storage']
  team: 'Database Team'
- id: 556081
  display_name: Service Mesh
  service: PC8HHE7
  category: Infrastructure
  description: 'Handles networking and service discovery'
  email: '[email protected]'
  environment: production
  ip_address: '192.168.1.14'
  is_manual: false
  mac_address: '00:1A:2B:3C:4D:62'
  manufacturer: 'Juniper'
  namespace: 'mesh'
  repository: 'https://github.com/sample-org/service-mesh'
  slack: '#infra-alerts'
  source_provider_id: ebe062c4814f483cb2c5d556fbb9395c
  tags: ['networking', 'mesh']
  team: 'Infra Team'