Entities
The Cisco Observability Platform enables you to model entities and observe them. An entity represents a logical component in your solution and/or an application. An entity has attributes and tags. Entity has an associated health and a lifecycle that can be monitored. Examples of entities are REST endpoint, Service, Container, Disk, Thread, JVM, Topic, Database, Router, Cache and so on.
Entity properties help uniquely identify an entity. The entity properties are collection of immutable key/value pairs that together uniquely identify an entity. Hence, it is important to accurately define them in the domain model initially. An entity consists of the following properties:
Properties | Description |
---|
id | - a unique identifier of the entity
- used to reference the entity
- is globally unique, across all tenants
|
type | An entity type. |
isActive | A boolean indicating whether this entity is active in the selected time period |
attributes | - a list of attributes that adhere to the attributeDefinitions in the entity type
- if an attribute with a given name is not defined in a type, it is considered 'typeless' and its value is always a string
- each attribute consists of:
- name
- value
- a scalar value of this property
- source
- each attribute is uniquely identified by name and source
|
tags (optional) | A list of tags |
createdAt | A timestamp of entity created |
updatedAt | A timestamp of entity last updated - this is modified on an update of the entity metadata or any corresponding MELT data associated with this entity. |
An entity may have the following data associated with it through an external reference to its unique identifier:
When you build an observability solution for any domain, it is important to understand how that domain uses the MELT data to represent aspects like performance, availability, functionality, security, and so on of any given entity.
Entity Types
Entities are categorised into specific types. Entity Types help in modelling different entities that are discovered from various sources. Type refers to a specific category of an entity - for example, disk, machine, instance, service are different types of entities. Characteristics of an entity are governed by the type.
You must define an entity type in the domain model schema for all entities created in the Cisco Observability Platform.
An entity type comprises following properties:
Property | Required/Optional | Description |
parentType | optional | - a fully qualified type reference to the parent entity type
- attributes, metric, event and association types are inherited from the parent type and cannot be overridden
- UQL queries for a parent type will return entities that are either of parentType or descendants of parentType.
|
attributeDefinitions |
| - a definition of attributes that can be used to describe an entity of this type
- each attribute has an associated data type
- at least one attribute must be marked as required
- required attributes can be used to uniquely identify this entity
|
metricTypes | optional | A list of metric types that can be associated with this entity |
eventTypes | optional | A list of event types that can be associated with this entity |
associationTypes | optional | A list of outgoing association types that can be linked from this entity, with a list of allowed entity types to which this association can be connected
associationTypes: 'common:consists_of': - 'infra:container' //a k8s pod can only consist of containers
|
Some characteristics of an entity are:
- Measurement types (metrics / events) to capture various measurements observed on entities of a given type
- Relationship types to capture how one type is related to another
- Interaction types to capture how one type may interact with another
Entity Relationship
Entities typically do not exist in isolation, but co-exist with other entities of similar or other types. These entities are often related, and the relationships (for example, parent/child) are useful to understand and configure a model framework. The Cisco Observability Platform domain model entity object has an attribute named parentType
that contains a reference to the entity type that the entity inherits characteristics from.
Associations
An association represents a connection between entities. Associations connect entities with a directed edge forming a connected graph, a topology. Topology defines how entities interrelate with each other. All entities, events, metrics and topologies have types. The Cisco Observability Platform organises the types in type namespaces or domains. For example Kubernetes® is a domain type. You can traverse this topology by following any of the associations. Associations are referenced by their type name.
An association can represent one of the following:
- a static relationship between entities, for example:
- consists_of (one to many): a k8s pod consists of multiple containers
- relates_to (many to many): an EBS volume can be mounted to multiple EC2 instances. An EC2 instance can have multiple EBS volumes.
- a dynamic relationship, for example:
- a service instance updates a record in a database
Following are the properties of an association:
Property | Description |
---|
type | one of the following association type Type | Description | Cardinality |
---|
common:consists_of | The source entity contains the destination entities. | one to many | common:aggregates_of | The source entity may have destination entity associated with it. | one to many | common:relates_to | The source entity may relate to the destination entity. | many to many | common:is_a | The destination entity offers a specific qualification for the source entity. | one to one | common:has | The destination entity may be associated with the source entity. | one to many | common:uses | The destination entity depends on the source entity. | many to one |
|
from | a unique identifier of the entity which is the origin of association This entity must list the association type or an extension type. |
to | a unique identifier of the entity to which this association is connected This entity must list the entity type in the associationTypes or the from entity must list the extension type. |
An association is derived from MELT data based on a convention, a configuration, or an extension. It remains valid until the association either from or to entities expire.
An association is always associated with a single association type. The association type comprises of following properties:
Property | Description |
cardinality | Allowed values are:
- ONE_TO_ONE
- ONE_TO_MANY
- MANY_TO_ONE
- MANY_TO_MANY
Cardinality is enforced at an association type level, for example, for an association with a ONE_TO_MANY cardinality, an entity can have one outgoing association of this type to another entity.
Info Not all associations can be uniquely identified, there can be multiple associations with the same type, from and to fields if the type cardinality is MANY_TO_MANY. For other cardinalities, ONE_TO_ONE, ONE_TO_MANY an association can be uniquely identified by type, from and to.
|
isHierarchical | Determines if the association is hierarchical. This property is true if cardinality is ONE_TO_MANY or ONE_TO_ONE.
Info There cannot be more than one incoming association of a given type with isHierarchical=true for a given entity.
|
isContainment | Determines if the association is a containment between from and to entities. Can only be true if isHierarchical is true. If true, lifecycle of a contained entity is tied to the container entity.
Info There cannot be more than one incoming association, regardless of type, with isContainment=true for a given entity. |
Example
Relationship Example
Derived Entities
Some entities represent a group (aggregation) of a particular type or different type of entities. You can derive an entity from another entity; this implies a hierarchical relationship between the derived entity and the base entity. For example, a service is an entity representing a group of service instances. Such entities are derived from other observed entities based on a configured entity derivation. The derived entity configuration specifies the rules to derive a new entity.
The configuration rules help derive the following properties of the child (derived) entity:
- the name
- other identifying properties
- attributes
- relationship type between the two entities
For example, a mobile platform is a group of applications and hence platform entity can be derived from application entity. The mobile application entity contains all the properties required to define a platform entity. For example, an application entity with the following properties
- appKey: 'EUM-AAB-AUA',
- appName: 'Everyfeature-Android'
- platform: 'Android'
You can write and store the dynamic entity configurations for the application entity in the config-store. This means if the above application entity is ingested into the platform, a new platform entity is created and ingested into the platform using the properties (appKey and platform) from the application entity.
Below is the sample configuration to derive platform entity from the application entity:
Derived Entity Configurations
List of Derived Entities
Derived Entity |
Derived From |
Platform |
Application |
Application |
Carrier, Connection Type, Device, Geo, Request, OS Version |
When two entities are created by different sources or when both entities are derived, you need to derive the relationship configuration between the two entities.
Info: Before you start configuring a model schema for an application, ensure that you understand the metrics and entities that are supported with the current application architecture.
In addition to entity properties, an entity can also have tags, such as, attributes associated with it. Each tag is a key-value pair that is associated with an entity for a time range. A tag does not uniquely identify an entity. You define a tag only when you need to group entities or define a relationship between them.
Tags change over period of time; you can add new tags, update existing tags or delete a tag. Every change in the tag affects the group the entities belong to or the relationships they have. Each change in the tag creates a new version of the same entity, creating a timeline for the entity and the tag.
For example, a mobile application, where the application can be uniquely identified by the properties AppKey
, Platform
and AppName
. But along with the properties the application entity may contain attribute - appVersion
.
These tags can be used to
- Group the entities together
- Relate entities to each other
- Query/lookup the entities
When you create a solution, you can add entities to your solution domain model in the entity definition file in a folder under your solution package (link to solution package description) folder. See the Student Lab Guide.