Applications are defined via the Application Custom Resource Definition. Applications can be used to improve the observability of your Kubernetes workloads. For that you can add metrics, logs, traces and other information via the different plugins to your Kubernetes resources.
Applications can be accessed via the Applications page. By default it shows all the Applications, which are owned by a Team a User is part of. It is also possible to filter the list of Applications by clusters, namespaces, tags or search for them by their name.
You can also use the topology page to view the topology graph of your applications. For that you can use the topology.dependencies field in the Application CR to define the dependencies for an Application.
Specification
Field
Type
Description
Required
description
string
Provide a descriptions for the application with additional details.
A list of dashboards, which should be shown for this application.
No
Link
Field
Type
Description
Required
title
string
Title for the link
Yes
link
string
The actuall link
Yes
Topology
Field
Type
Description
Required
external
boolean
When this true the application will be marked as external. This means that we do not show the cluster and namespace of the Application CR in the UI, to allow users to also add Applications which are not running in a Kubernetes cluster.
Add other applications as dependencies for this application. This can be used to render a topology graph for your applications.
No
Dependency
Field
Type
Description
Required
satellite
string
Satellite of the application, which should be added as dependency. If this field is omitted kobs will look in the same satellite as the application was created in.
No
cluster
string
Cluster of the application, which should be added as dependency. If this field is omitted kobs will look in the same cluster as the application was created in.
No
namespace
string
Namespace of the application, which should be added as dependency. If this field is omitted kobs will look in the same namespace as the application was created in.
No
name
string
Name of the application, which should be added as dependency.
Yes
description
string
The description can be used to explain, why this application is a dependency of the current application.
No
Insight
Field
Type
Description
Required
title
string
The title for the defined insight metric.
Yes
type
string
The type which should be used to display the insight metric. Currently the only valid value is sparkline.
Yes
unit
string
An optional unit for the metric.
No
mappings
map
A map of mappings, which should be displayed instead of the current metric value.
Define the dashboards, which should be used for the application.
Field
Type
Description
Required
cluster
string
Cluster of the dashboard. If this field is omitted kobs will look in the same cluster as the application was created in.
No
namespace
string
Namespace of the dashboard. If this field is omitted kobs will look in the same namespace as the application was created in.
No
name
string
Name of the dashboard. Note: You have not to provide a name, if you use the inline property.
Yes
title
string
Title for the dashboard
Yes
description
string
The description can be used to explain the content of the dashboard.
No
placeholders
map
A map of placeholders, whith the name as key and the value for the placeholder as value. More information for placeholders can be found in the documentation for Dashboards.
The following Application CR is used in the demo to display the resources, metrics, logs and traces for the productpage Application of the Bookinfo service.
---apiVersion:kobs.io/v1kind:Applicationmetadata:name:productpagenamespace:bookinfospec:description:The productpage microservice calls the details and reviews microservices to populate the page.tags:-bookinfolinks:-title:Websitelink:https://istio.io/latest/docs/examples/bookinfo/-title:GitHublink:https://github.com/istio/istio/tree/master/samples/bookinfo-title:Application CRlink:https://github.com/kobsio/kobs/blob/main/deploy/demo/kobs/base/crs/applications/productpage.yamlteams:-re@kobs.iotopology:dependencies:-name:detailsdescription:Get book information.-name:reviewsdescription:Get book reviews.insights:-title:Success Ratetype:sparklineunit:"%"plugin:name:prometheustype:prometheusoptions:query:sum(irate(istio_requests_total{reporter="destination",destination_workload_namespace=~"bookinfo",destination_workload=~"productpage-v1",response_code!~"5.*"}[5m])) / sum(irate(istio_requests_total{reporter="destination",destination_workload_namespace=~"bookinfo",destination_workload=~"productpage-v1"}[5m])) * 100-title:Healthy Replicastype:sparklineunit:"%"plugin:name:prometheustype:prometheusoptions:query:kube_deployment_status_replicas{namespace="bookinfo", deployment=~"productpage.*"} / kube_deployment_spec_replicas{namespace="bookinfo", deployment=~"productpage.*"} * 100dashboards:-title:Overviewinline:rows:-size:1panels:-title:Desired ReplicascolSpan:3plugin:name:prometheustype:prometheusoptions:type:sparklinequeries:-query:kube_deployment_spec_replicas{namespace="bookinfo", deployment=~"productpage.*"}-title:Current ReplicascolSpan:3plugin:name:prometheustype:prometheusoptions:type:sparklinequeries:-query:kube_deployment_status_replicas{namespace="bookinfo", deployment=~"productpage.*"}-title:Updated ReplicascolSpan:3plugin:name:prometheustype:prometheusoptions:type:sparklinequeries:-query:kube_deployment_status_replicas_updated{namespace="bookinfo", deployment=~"productpage.*"}-title:Available ReplicascolSpan:3plugin:name:prometheustype:prometheusoptions:type:sparklinequeries:-query:kube_deployment_status_replicas_available{namespace="bookinfo", deployment=~"productpage.*"}-size:-1panels:-title:Workloadsplugin:name:resourcestype:appoptions:satellites:-kobsclusters:-kobsnamespaces:-bookinforesources:-pods-deployments-servicesselector:app=productpage-size:2panels:-title:Open AlertscolSpan:6plugin:name:opsgenietype:opsgenieoptions:type:alertsqueries:-'status:openANDnamespace:"bookinfo"'-'status:closedANDnamespace:"bookinfo"'interval:31536000-title:TopologycolSpan:6plugin:name:topologytype:appoptions:satellite:"<%$.satellite%>"cluster:"<%$.cluster%>"namespace:"<%$.namespace%>"name:"<%$.name%>"-name:resource-usagenamespace:kobstitle:Resource Usageplaceholders:namespace:bookinfopod:"productpage-.*-.*-.*"-name:istio-httpnamespace:kobstitle:Istio HTTP Metricsplaceholders:namespace:bookinfoapp:productpage-title:Logsinline:rows:-size:-1panels:-title:LogscolSpan:12plugin:name:elasticsearchtype:elasticsearchoptions:showChart:truequeries:-name:Pod Logsquery:"kubernetes.namespace:bookinfoANDkubernetes.labels.app:productpage"fields:-"kubernetes.container.name"-"message"-name:Istio Logsquery:"kubernetes.namespace:bookinfoANDkubernetes.labels.app:productpageANDkubernetes.container.name:istio-proxyAND_exists_:content.method"fields:-"kubernetes.pod.name"-"content.authority"-"content.route_name"-"content.protocol"-"content.method"-"content.path"-"content.response_code"-"content.upstream_service_time"-"content.bytes_received"-"content.bytes_sent"-title:Tracesinline:rows:-size:-1panels:-title:TracescolSpan:12plugin:name:jaegertype:jaegeroptions:showChart:truequeries:-name:All Requestsservice:productpage.bookinfo-name:Slow Requestsservice:productpage.bookinfominDuration:100ms-name:Errorsservice:productpage.bookinfotags:error=true-title:Documentationinline:hideToolbar:truerows:-size:-1panels:-title:Bookinfo Documentationplugin:name:markdowntype:appoptions:text:|The application displays information about abook, similar to a single catalog entry of an online book store. Displayedon the page is a description of the book, book details (ISBN, number ofpages, and so on), and a few book reviews.The Bookinfo application is broken into four separate microservices:* `productpage`. The `productpage` microservice calls the `details` and `reviews` microservices to populate the page.* `details`. The `details` microservice contains book information.* `reviews`. The `reviews` microservice contains book reviews. It also calls the `ratings` microservice.* `ratings`. The `ratings` microservice contains book ranking information that accompanies a book review.There are 3 versions of the `reviews` microservice:* Version v1 doesn't call the `ratings` service.* Version v2 calls the `ratings` service, and displays each rating as 1 to 5 black stars.* Version v3 calls the `ratings` service, and displays each rating as 1 to 5 red stars.The end-to-end architecture of the application is shown below.This application is polyglot, i.e., the microservices are written in different languages.It's worth noting that these services have no dependencies on Istio, but make an interestingservice mesh example, particularly because of the multitude of services, languages and versionsfor the `reviews` service.
In the fowlling you can find some screenshots how the above application will look in kobs. The application contains the Deployments and Pods, which are related to the reviews service of the Bookinfo Application. It also uses the Prometheus plugin to display metrics, the Elasticsearch plugin to display the logs and the Jaeger plugin to display the traces for the service.