Systems

Systems provide a way to represent Services that combine to form a unified whole or function. For example, an online retailer may have a “Checkout” System that comprises several Services working in unison. Systems are composed of Services. Utilizing Systems allows you to group together all of the Services that combine into a single unit so you can quickly see how these Services are performing.

When should I use a System instead of a Domain?

Systems should be used to group together Services that combine to form a single unit. Ideally, the personas that would make most use of Systems are Engineering Managers and Platform Operators who want a quick view into how the Services that make up their Systems are performing.

Creating Systems

Systems can be created by navigating to the Systems List page. This page can be accessed under Catalog within the side navigation.

Systems Menu

Systems Menu

If there are no active Systems within your OpsLevel account, you will see an empty state prompting you to create your first System.

Systems Empty State

Systems Empty State

You can create a new System by either clicking this prompt or by clicking the New System button. Upon clicking this button, a new modal will open up prompting you to fill out the following details for your System:

  • Name (required)
  • Owner
  • Domain
  • Description
Add System Modal

Add System Modal

Clicking Create will create your new System and add it as a new row on the table.

Systems List Page

Systems List Page

Systems Details

Clicking on a System from the Systems List page will bring you to the Systems Show page for that System. This page provides a bunch of details surrounding your System including:

  • Who owns the System
  • What tags are applied to the System
  • Size of the System (Services, Teams, Users)
  • Summary of the Maturity Report for the Services contained by the System
Systems Show Page

Systems Show Page

If you want to include more details about your System (what it is, how it functions, etc) you can click on the Notes tab and fill them out via the markdown editor.

How are the Services, Teams, and Users that fall under a System determined?

When you access the Systems Show page for a System, one of the first things you'll see is a count of all the Services, Teams, and Users that fall under that System.

Service Count

This simply counts the number of Services the System contains. See instructions on how to add Services to Systems below.

Team Count

This is a count of all the Teams that own the Services that the System contains.

User Count

This is a count of all the Users that exist in the Teams that own the Services that the System contains.

Adding a Child Service

You can add a child Service(s) to your System by navigating to the Services card at the bottom of the Systems Show page. Clicking Add Service will open a modal where you can search through and select and existing Service(s) to be added as a child for your System.

Add Service Modal

Add Service Modal

Clicking Add Services will add that Service(s) to the table in the Services card

Service Table

Service Table

Note: A Service can only have one parent System. If a Service already has a parent System you will not be able to select it from the dropdown.

You can also add a Service to a System via opslevel.yml.

Filtering by Systems

You can use Filters to easily see which Services fall under a given System and quickly write Checks or run Campaigns against those Services.

Filtering Systems

Filtering Systems

In the above example, OpsLevel will filter down to all of the Services that meet the following criteria: their Framework is "Rails" AND the System they fall under is "Cart".

Reporting by Systems

You can utilize the Maturity Report to easily see how the Services that fall under a given System(s) are performing. The reports table has a System dropdown option which can be selected to view the Maturity Report for one or many Systems.

Maturity Report for Systems

Maturity Report for Systems

Example: Creating Systems outside of the UI

In addition to creating Systems via the UI, you can also create Systems using the:

  • GraphQL API
  • Terraform Provider
  • Command Line Utility

all are options for configuring and maintaining your Systems. Below is an example of using the OpsLevel CLI to create a new System:

cat << EOF | opslevel create system -f -
name: "My System"
description: "Hello World System"
owner: "Z2lkOi8vb3BzbGV2ZWwvVGVhbS83NjY"
parent:
  alias: "alias of domain"
note: "Additional system details"
EOF

Note: "Owner" in this example is an ID for a team or group.

Example: Creating a System via Existing Tags

Many of our customers have already been modelling Systems via tags. The OpsLevel CLI can be utilized to convert existing tags into Systems. For example, let's say you've been using a key-value pair of "system:x", "system:y" as part of a tag. The following command will create a series of Systems based on the tag value it finds:

for SYSTEM in $(opslevel list services -o json | jq '.[] | .tags.Nodes[] | if .key == "system" then .value else empty end' | uniq)
do
    cat << EOF | opslevel create system -f -
name: ${SYSTEM}
EOF
done

Example: Creating a System via "Product" Field

Many of our customers have already been modelling Systems via the "Product" Field under Services. The OpsLevel CLI can be utilized to convert this field into a System. For example:

for SYSTEM in $(opslevel list services -o json | jq 'map(if .product != null then .product else empty end) | .[]' | uniq)
do
    cat << EOF | opslevel create system -f -
name: ${SYSTEM}
EOF
done