Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions docs/explanation/overview/what-is-cos.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
---
myst:
html_meta:
description: "Learn what the Canonical Observability Stack (COS) is, how it works, what it does, and the flavours available."
description: "Learn what the Canonical Observability Stack (COS) is, how it works, what it does, and the flavors available."
---

# What is COS?

The Canonical Observability Stack (COS) is a highly-integrated, low-operations observability suite powered by [Juju](https://documentation.ubuntu.com/juju/3.6/) and Kubernetes. There are two flavours available: COS (sometimes referred to as COS HA) and COS Lite.
The Canonical Observability Stack (COS) is a highly-integrated, low-operations observability suite powered by [Juju](https://documentation.ubuntu.com/juju/3.6/) and Kubernetes. There are two flavors available: COS (sometimes referred to as COS HA) and COS Lite.

COS gathers, processes, visualises, and alerts on telemetry (metrics, logs, and traces) generated by workloads running both within and outside of Juju. By leveraging Juju's topology model to contextualise data and charm relations to automate configuration and integration, it provides a turn-key observability solution built on best-in-class, open-source tools.

Expand All @@ -29,9 +29,9 @@ For more detail, see [Telemetry Flow](/explanation/architecture/telemetry-flow)
By modelling observability as a set of Juju relations, COS eliminates the manual configuration burden typically associated with spinning up a monitoring stack. Dashboards, alert rules, and scrape targets are automatically provisioned when charms are related. This application of Juju topology also means that telemetry is contextualised out of the box, enabling admins to filter and correlate data by model, application, or unit without any extra instrumentation. The result is a full-stack, self-monitoring observability platform that evolves alongside the applications it observes.


## Flavours of COS: COS and COS Lite
## Flavors of COS: COS and COS Lite

There are two flavours available: COS and COS Lite. Each is suited to different deployment scenarios:
There are two flavors available: COS and COS Lite. Each is suited to different deployment scenarios:

| | COS | COS Lite |
|--------------------------|--------------------------------------------------------------|-----------------------------------------------------------|
Expand All @@ -50,7 +50,7 @@ The key architectural difference between COS and COS Lite is how the backends ar
COS is built around a **coordinator/worker pattern**: each backend (Mimir, Loki, Tempo) is split into a coordinator charm and one or more worker charms, allowing individual components to be scaled out independently and placed on separate nodes. An Nginx layer handles load balancing across workers before traffic reaches Traefik. This makes COS HA suitable for high-availability, enterprise deployments where telemetry volumes are large and resilience to node failure is required.

COS Lite, by contrast, runs each backend as a single monolithic charm, which is simpler to deploy and much lighter on resources, but without the horizontal scalability or trace support.
Both flavours share the same Grafana, Alertmanager, Traefik, and Catalogue charms.
Both flavors share the same Grafana, Alertmanager, Traefik, and Catalogue charms.

## Useful links

Expand Down
8 changes: 3 additions & 5 deletions docs/how-to/configure-and-tune/customize-storage-options.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,10 @@ If you don't specify a size, a PVC will be created with a default size of 1G bac
Add a `storage_directive` for each storage container in your terraform file. For COS Lite it may look like this:

```diff
module "cos-lite" {
source = "git::https://github.com/canonical/observability-stack//terraform/cos-lite?ref=track/2"
module "cos-lite" {
source = "git::https://github.com/canonical/observability-stack//terraform/cos-lite?ref=main"
model_uuid = juju_model.cos.uuid
channel = "2/stable"
ssc = { channel = "1/stable" }
traefik = { channel = "latest/stable" }
risk = "edge"

+ # Adding storage for Prometheus
+ prometheus = {
Expand Down
2 changes: 1 addition & 1 deletion docs/how-to/deploy-and-manage/cos-ingress.tf
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ module "cos" {
# Use the right source value depending on whether you are using cos or cos-lite
source = "git::https://github.com/canonical/observability-stack//terraform/cos?ref=main"
model_uuid = juju_model.cos.uuid
channel = "dev/edge"
risk = "edge"

# ... other inputs ...

Expand Down
10 changes: 5 additions & 5 deletions docs/how-to/deploy-and-manage/cos-tls.tf
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ resource "juju_model" "cos" {

module "cos" {
# Use the right source value depending on whether you are using cos or cos-lite
source = "git::https://github.com/canonical/observability-stack//terraform/cos?ref=track/2"
model_uuid = juju_model.cos.uuid
channel = "2/stable"
internal_tls = true # TLS between in-model applications
source = "git::https://github.com/canonical/observability-stack//terraform/cos?ref=main"
model_uuid = juju_model.cos.uuid
risk = "edge"
internal_tls = true # TLS between in-model applications

# Update the _offer_url inputs with the offered endpoints of the external CA's model
external_certificates_offer_url = "admin/external-ca-model.certificates" # Set to 'null' to communicate with Traefik via HTTP, i.e. no 'external_tls'
external_ca_cert_offer_url = "admin/external-ca-model.send-ca-cert" # Required if 'external_certificates_offer_url' is set
Expand Down
4 changes: 2 additions & 2 deletions docs/reference/glossary.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ See [COS components](/reference/cos-components).

## COS Lite

A resource-constrained flavour of COS that runs monolithic Loki and
A resource-constrained flavor of COS that runs monolithic Loki and
Prometheus, without Tempo. Recommended for near-edge and single-node deployments.
See [What is COS?](/explanation/overview/what-is-cos).

Expand Down Expand Up @@ -76,7 +76,7 @@ CMRs are the primary mechanism by which workloads in other models — including
models — send telemetry to COS.
See [Integration matrix](/reference/integration-matrix).

## Flavour
## Flavor

Informal term for the two COS deployment variants: **COS** (scalable, HA) and
**COS Lite** (monolithic, resource-constrained). Both share Grafana, Alertmanager,
Expand Down
6 changes: 2 additions & 4 deletions docs/tutorial/cos-canonical-k8s-sandbox.conf
Original file line number Diff line number Diff line change
Expand Up @@ -74,17 +74,15 @@ runcmd:
}

module "cos" {
source = "git::https://github.com/canonical/observability-stack//terraform/cos?ref=track/2"
source = "git::https://github.com/canonical/observability-stack//terraform/cos?ref=main"
model_uuid = juju_model.cos.uuid
channel = "2/stable"
risk = "edge"
anti_affinity = false
internal_tls = false
external_certificates_offer_url = null
s3_endpoint = "http://$IPADDR:8080"
s3_secret_key = "secret-key"
s3_access_key = "access-key"
ssc = { channel = "1/stable" }
traefik = { channel = "latest/stable" }
}
EOF
# [docs:create-terraform-module-end]
Expand Down
4 changes: 2 additions & 2 deletions docs/tutorial/cos-lite-microk8s-sandbox.tf
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ resource "juju_model" "cos" {
}

module "cos-lite" {
source = "git::https://github.com/canonical/observability-stack//terraform/cos-lite?ref=track/2"
source = "git::https://github.com/canonical/observability-stack//terraform/cos-lite?ref=main"
model_uuid = juju_model.cos.uuid
channel = "2/stable"
risk = "edge"
ssc = { channel = "1/stable" }
traefik = { channel = "latest/edge" }
}
Loading