Skip to content

Commit 25b9453

Browse files
feat(helm): Create cogstack observability helm chart (#71)
1 parent 09aff96 commit 25b9453

17 files changed

Lines changed: 6363 additions & 11 deletions

File tree

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,15 @@
11
# Cogstack Helm Charts
22

3-
The Helm charts for CogStack are published to Docker Hub, which is an OCI-compliant registry.
43

54
## Chart Listings
65

7-
- **MedCAT Service:**
8-
https://hub.docker.com/r/cogstacksystems/medcat-service-helm
9-
10-
- **MedCAT Trainer:**
11-
https://hub.docker.com/r/cogstacksystems/medcat-trainer-helm
12-
13-
- **CogStack CE (Community Edition, umbrella chart):**
14-
https://hub.docker.com/r/cogstacksystems/cogstack-ce-helm
15-
166
- [MedCAT Service Helm](medcat-service-helm.md)
177
- [MedCAT Trainer Helm](medcat-trainer-helm.md)
188
- [CogStack Community Edition Helm](cogstack-ce-helm.md)
9+
- [CogStack Observability Helm](cogstack-observability-helm.md.md)
1910

2011
## Chart Publishing
2112

13+
The Helm charts for CogStack are published to Docker Hub, which is an OCI-compliant registry. You can see the charts on Dockerhub https://hub.docker.com/r/cogstacksystems
14+
2215
Charts are published automatically via a GitHub Action on every commit to the main branch.

docs/mkdocs.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ nav:
7070
- MedCAT Service Helm: platform/deployment/helm/charts/medcat-service-helm.md
7171
- MedCAT Trainer Helm: platform/deployment/helm/charts/medcat-trainer-helm.md
7272
- Cogstack CE Helm: platform/deployment/helm/charts/cogstack-ce-helm.md
73+
- Cogstack Observability Helm: platform/deployment/helm/charts/cogstack-observability-helm.md
7374
- Examples:
7475
- Examples: platform/deployment/examples/_index.md
7576
- AWS Kubernetes EKS: platform/deployment/examples/aws-kubernetes-eks.md
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
anoncat-service:
2+
serviceMonitor:
3+
enabled: true
4+
medcat-service:
5+
serviceMonitor:
6+
enabled: true
7+
8+
opensearch:
9+
plugins:
10+
enabled: true
11+
installList:
12+
- https://github.com/opensearch-project/opensearch-prometheus-exporter/releases/download/3.5.0.0/prometheus-exporter-3.5.0.0.zip
13+
serviceMonitor:
14+
enabled: true
15+
scheme: https
16+
tlsConfig:
17+
insecureSkipVerify: true
18+
basicAuth:
19+
enabled: true
20+
username: admin
21+
password: opensearch-312$A
22+

helm-charts/cogstack-ce-helm/values.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,10 @@ opensearch:
7474
extraEnvs:
7575
- name: OPENSEARCH_INITIAL_ADMIN_PASSWORD
7676
value: "opensearch-312$A"
77+
# plugins:
78+
# enabled: true
79+
# installList:
80+
# - https://github.com/opensearch-project/opensearch-prometheus-exporter/releases/download/3.5.0.0/prometheus-exporter-3.5.0.0.zip
7781

7882
opensearch-dashboards:
7983
# -- Deploy an opensearch-dashboards instance
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Patterns to ignore when building packages.
2+
# This supports shell glob matching, relative path matching, and
3+
# negation (prefixed with !). Only one pattern per line.
4+
.DS_Store
5+
# Common VCS dirs
6+
.git/
7+
.gitignore
8+
.bzr/
9+
.bzrignore
10+
.hg/
11+
.hgignore
12+
.svn/
13+
# Common backup files
14+
*.swp
15+
*.bak
16+
*.tmp
17+
*.orig
18+
*~
19+
# Various IDEs
20+
.project
21+
.idea/
22+
*.tmproj
23+
.vscode/
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
dependencies:
2+
- name: kube-prometheus-stack
3+
repository: oci://ghcr.io/prometheus-community/charts
4+
version: 81.2.2
5+
digest: sha256:7c42643a0850e853506cacaa4c28f455e46f76963d6acdd6c7be4634497ead83
6+
generated: "2026-03-30T15:07:01.412910469Z"
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
apiVersion: v2
2+
name: cogstack-observability-helm
3+
description: This chart provides observability for a CogStack deployment. It is a basic wrapper around Grafana and Kube Prometheus Stack.
4+
5+
# A chart can be either an 'application' or a 'library' chart.
6+
#
7+
# Application charts are a collection of templates that can be packaged into versioned archives
8+
# to be deployed.
9+
#
10+
# Library charts provide useful utilities or functions for the chart developer. They're included as
11+
# a dependency of application charts to inject those utilities and functions into the rendering
12+
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
13+
type: application
14+
15+
# This is the chart version. This version number should be incremented each time you make changes
16+
# to the chart and its templates, including the app version.
17+
# Versions are expected to follow Semantic Versioning (https://semver.org/)
18+
version: 0.1.0
19+
20+
# This is the version number of the application being deployed. This version number should be
21+
# incremented each time you make changes to the application. Versions are not expected to
22+
# follow Semantic Versioning. They should reflect the version the application is using.
23+
# It is recommended to use it with quotes.
24+
appVersion: "0.1.0"
25+
26+
maintainers:
27+
- name: alhendrickson
28+
email: alistair@cogstack.org
29+
30+
icon: "https://avatars.githubusercontent.com/u/28688163"
31+
32+
dependencies:
33+
- name: kube-prometheus-stack
34+
version: "81.2.2"
35+
repository: "oci://ghcr.io/prometheus-community/charts"
36+
condition: kube-prometheus-stack.enabled
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
# CogStack Observability Helm Chart
2+
3+
This chart installs the observability stack for a CogStack deployment on Kubernetes.
4+
5+
It is a wrapper around the kube-prometheus-stack, aiming to provide a simple way to get with observability for cogstack services.
6+
7+
## Overview
8+
9+
This chart deploys:
10+
11+
| Component | Description |
12+
|-----------|-------------|
13+
| **kube-prometheus-stack** | Prometheus Operator stack for metrics collection, rules, and monitoring components. |
14+
| **Prometheus** | Scrapes metrics from CogStack services and stores time series data. |
15+
| **Grafana** | Provides dashboards for visualising CogStack platform health and service metrics. |
16+
| **Bundled dashboards** | Preloads dashboards for CogStack availability, FastAPI metrics, and OpenSearch metrics. |
17+
18+
This chart is intended to be installed alongside a CogStack deployment that exposes metrics through `ServiceMonitor`, `PodMonitor`, `Probe`, or related Prometheus resources.
19+
20+
## Prerequisites
21+
22+
- Kubernetes cluster
23+
- Helm 3+
24+
- A CogStack deployment with metrics endpoints enabled
25+
26+
## Installation
27+
28+
```sh
29+
helm install observability oci://registry-1.docker.io/cogstacksystems/cogstack-observability-helm
30+
```
31+
32+
If you are deploying this alongside `cogstack-ce-helm`, you can enable the required monitors in the CE chart with the example override file at `../cogstack-ce-helm/values-observability.yaml`.
33+
34+
## Configuration
35+
These are some values that are likely to need customization for your deployment:
36+
37+
| Value | Default | Description |
38+
|-------|---------|-------------|
39+
| `kube-prometheus-stack.enabled` | `true` | Main switch for installing the bundled `kube-prometheus-stack`. Set this to `false` if your cluster already provides Prometheus and Grafana. |
40+
| `kube-prometheus-stack.crds.enabled` | `true` | Controls installation of Prometheus Operator CRDs. Set this to `false` when the CRDs are already installed and managed elsewhere. |
41+
| `kube-prometheus-stack.grafana.sidecar.dashboards.enabled` | `true` | Enables Grafana sidecar dashboard discovery for the dashboards shipped by this chart. Set this to `false` if Grafana or dashboard loading is handled externally. |
42+
| `kube-prometheus-stack.grafana.adminUser` | `"admin"` | Grafana admin username. |
43+
| `kube-prometheus-stack.grafana.adminPassword` | `"grafana-admin-password"` | Grafana admin password; change this for any real deployment. |
44+
| `kube-prometheus-stack.grafana.service.*` | not set | Configure how Grafana is exposed, for example `ClusterIP`, `NodePort`, or `LoadBalancer`. |
45+
| `kube-prometheus-stack.prometheus.service.*` | not set | Configure how Prometheus is exposed if direct access is required. |
46+
| `kube-prometheus-stack.prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues` | `false` | Allows Prometheus to discover `ServiceMonitor` resources not created by this chart. |
47+
| `kube-prometheus-stack.prometheus.prometheusSpec.podMonitorSelectorNilUsesHelmValues` | `false` | Allows Prometheus to discover `PodMonitor` resources not created by this chart. |
48+
| `kube-prometheus-stack.prometheus.prometheusSpec.probeSelectorNilUsesHelmValues` | `false` | Allows Prometheus to discover `Probe` resources not created by this chart. |
49+
| `kube-prometheus-stack.prometheus.prometheusSpec.ruleSelectorNilUsesHelmValues` | `false` | Allows Prometheus to discover `PrometheusRule` resources not created by this chart. |
50+
| `kube-prometheus-stack.prometheus.prometheusSpec.scrapeConfigSelectorNilUsesHelmValues` | `false` | Allows Prometheus to discover additional `ScrapeConfig` resources not created by this chart. |
51+
52+
Example override file:
53+
54+
```yaml
55+
# my-values.yaml
56+
kube-prometheus-stack:
57+
enabled: false
58+
crds:
59+
enabled: false
60+
grafana:
61+
sidecar:
62+
dashboards:
63+
enabled: false
64+
```
65+
66+
Install with overrides:
67+
68+
```bash
69+
helm install cogstack-observability . -f my-values.yaml --namespace observability --create-namespace
70+
```
71+
72+
## Dependencies
73+
74+
The chart depends on:
75+
76+
- `kube-prometheus-stack`
77+
78+
## Uninstall
79+
80+
```bash
81+
helm uninstall cogstack-observability --namespace observability
82+
```
83+
84+
If the namespace was created only for this release, remove it with:
85+
86+
```bash
87+
kubectl delete namespace observability
88+
```
89+
90+
## Requirements
91+
92+
| Repository | Name | Version |
93+
|------------|------|---------|
94+
| oci://ghcr.io/prometheus-community/charts | kube-prometheus-stack | 81.2.2 |
95+
96+
## Values
97+
98+
| Key | Type | Default | Description |
99+
|-----|------|---------|-------------|
100+
| fullnameOverride | string | `""` | |
101+
| kube-prometheus-stack.crds.enabled | bool | `true` | |
102+
| kube-prometheus-stack.enabled | bool | `true` | |
103+
| kube-prometheus-stack.grafana.adminPassword | string | `"grafana-admin-password"` | |
104+
| kube-prometheus-stack.grafana.adminUser | string | `"admin"` | |
105+
| kube-prometheus-stack.grafana.enabled | bool | `true` | |
106+
| kube-prometheus-stack.grafana.sidecar.dashboards.enabled | bool | `true` | |
107+
| kube-prometheus-stack.prometheus.prometheusSpec.podMonitorSelectorNilUsesHelmValues | bool | `false` | |
108+
| kube-prometheus-stack.prometheus.prometheusSpec.probeSelectorNilUsesHelmValues | bool | `false` | |
109+
| kube-prometheus-stack.prometheus.prometheusSpec.ruleSelectorNilUsesHelmValues | bool | `false` | |
110+
| kube-prometheus-stack.prometheus.prometheusSpec.scrapeConfigSelectorNilUsesHelmValues | bool | `false` | |
111+
| kube-prometheus-stack.prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues | bool | `false` | |
112+
| nameOverride | string | `""` | |
113+
114+
----------------------------------------------
115+
Autogenerated from chart metadata using [helm-docs v1.14.2](https://github.com/norwoodj/helm-docs/releases/v1.14.2)
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
# CogStack Observability Helm Chart
2+
3+
This chart installs the observability stack for a CogStack deployment on Kubernetes.
4+
5+
It is a wrapper around the kube-prometheus-stack, aiming to provide a simple way to get with observability for cogstack services.
6+
7+
## Overview
8+
9+
This chart deploys:
10+
11+
| Component | Description |
12+
|-----------|-------------|
13+
| **kube-prometheus-stack** | Prometheus Operator stack for metrics collection, rules, and monitoring components. |
14+
| **Prometheus** | Scrapes metrics from CogStack services and stores time series data. |
15+
| **Grafana** | Provides dashboards for visualising CogStack platform health and service metrics. |
16+
| **Bundled dashboards** | Preloads dashboards for CogStack availability, FastAPI metrics, and OpenSearch metrics. |
17+
18+
This chart is intended to be installed alongside a CogStack deployment that exposes metrics through `ServiceMonitor`, `PodMonitor`, `Probe`, or related Prometheus resources.
19+
20+
## Prerequisites
21+
22+
- Kubernetes cluster
23+
- Helm 3+
24+
- A CogStack deployment with metrics endpoints enabled
25+
26+
## Installation
27+
28+
```sh
29+
helm install observability oci://registry-1.docker.io/cogstacksystems/cogstack-observability-helm
30+
```
31+
32+
If you are deploying this alongside `cogstack-ce-helm`, you can enable the required monitors in the CE chart with the example override file at `../cogstack-ce-helm/values-observability.yaml`.
33+
34+
## Configuration
35+
These are some values that are likely to need customization for your deployment:
36+
37+
| Value | Default | Description |
38+
|-------|---------|-------------|
39+
| `kube-prometheus-stack.enabled` | `true` | Main switch for installing the bundled `kube-prometheus-stack`. Set this to `false` if your cluster already provides Prometheus and Grafana. |
40+
| `kube-prometheus-stack.crds.enabled` | `true` | Controls installation of Prometheus Operator CRDs. Set this to `false` when the CRDs are already installed and managed elsewhere. |
41+
| `kube-prometheus-stack.grafana.sidecar.dashboards.enabled` | `true` | Enables Grafana sidecar dashboard discovery for the dashboards shipped by this chart. Set this to `false` if Grafana or dashboard loading is handled externally. |
42+
| `kube-prometheus-stack.grafana.adminUser` | `"admin"` | Grafana admin username. |
43+
| `kube-prometheus-stack.grafana.adminPassword` | `"grafana-admin-password"` | Grafana admin password; change this for any real deployment. |
44+
| `kube-prometheus-stack.grafana.service.*` | not set | Configure how Grafana is exposed, for example `ClusterIP`, `NodePort`, or `LoadBalancer`. |
45+
| `kube-prometheus-stack.prometheus.service.*` | not set | Configure how Prometheus is exposed if direct access is required. |
46+
| `kube-prometheus-stack.prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues` | `false` | Allows Prometheus to discover `ServiceMonitor` resources not created by this chart. |
47+
| `kube-prometheus-stack.prometheus.prometheusSpec.podMonitorSelectorNilUsesHelmValues` | `false` | Allows Prometheus to discover `PodMonitor` resources not created by this chart. |
48+
| `kube-prometheus-stack.prometheus.prometheusSpec.probeSelectorNilUsesHelmValues` | `false` | Allows Prometheus to discover `Probe` resources not created by this chart. |
49+
| `kube-prometheus-stack.prometheus.prometheusSpec.ruleSelectorNilUsesHelmValues` | `false` | Allows Prometheus to discover `PrometheusRule` resources not created by this chart. |
50+
| `kube-prometheus-stack.prometheus.prometheusSpec.scrapeConfigSelectorNilUsesHelmValues` | `false` | Allows Prometheus to discover additional `ScrapeConfig` resources not created by this chart. |
51+
52+
Example override file:
53+
54+
```yaml
55+
# my-values.yaml
56+
kube-prometheus-stack:
57+
enabled: false
58+
crds:
59+
enabled: false
60+
grafana:
61+
sidecar:
62+
dashboards:
63+
enabled: false
64+
```
65+
66+
Install with overrides:
67+
68+
```bash
69+
helm install cogstack-observability . -f my-values.yaml --namespace observability --create-namespace
70+
```
71+
72+
## Dependencies
73+
74+
The chart depends on:
75+
76+
- `kube-prometheus-stack`
77+
78+
## Uninstall
79+
80+
```bash
81+
helm uninstall cogstack-observability --namespace observability
82+
```
83+
84+
If the namespace was created only for this release, remove it with:
85+
86+
```bash
87+
kubectl delete namespace observability
88+
```
89+
90+
{{ template "chart.requirementsSection" . }}
91+
92+
{{ template "chart.valuesSection" . }}
93+
94+
{{ template "helm-docs.versionFooter" . }}

0 commit comments

Comments
 (0)