This documentation and the Cisco Observability Platform functionalities it describes are subject to change. Data saved on the platform may disappear and APIs may change without notice.


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:

PropertiesDescription
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
      • a name of this property
    • 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:

PropertyRequired/OptionalDescription
parentTypeoptional
  • 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
metricTypesoptional

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

associationTypesoptional

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:

PropertyDescription
type

one of the following association type

TypeDescriptionCardinality
common:consists_ofThe source entity contains the destination entities.one to many
common:aggregates_ofThe source entity may have destination entity associated with it.one to many
common:relates_toThe source entity may relate to the destination entity.many to many
common:is_aThe destination entity offers a specific qualification for the source entity.one to one
common:hasThe destination entity may be associated with the source entity.one to many
common:usesThe 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:

PropertyDescription
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 typefrom 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

{
  "kind": "relationship",
  "name": "consists_of",
  "displayName": "Consists of",
  "cardinality": "ONE_TO_MANY",
  "isHierarchical": true,
  "isContainment": true
}

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

  1. appKey: 'EUM-AAB-AUA',
  2. appName: 'Everyfeature-Android'
  3. 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

{
    "accountId": <account-id>,
    "uniqueConfigName": "derivePlatFromApp",
    "typeId": "_dEntityC",
    "configClassName": "com.appdynamics.platform.entity.config.model.grouping.DerivedEntityConfiguration",
    "entityTypeId": "e_MAPP",
    "scopeFilter": "true",
    "targetEntityTypeId": "e_MPLT",
    "relationshipTypeId": "r_Plat-App",
    "mappings": {
        "name": [
            "this.properties.platform.value"
        ],
        "identifyingProperties": {
            "appKey": [
                "this.properties.appKey.value"
            ],
            "platform": [
                "this.properties.platform.value"
            ]
        },
        "attributes": {
            "*": [
                "this.attributes[#key]"
            ]
        },
        "labels": {
            "*": [
                "this.labels[#key]"
            ]
        }
    }
}

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.

Entity Tags

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.